|
|
| version 1.6, 2007/01/22 16:37:52 | version 1.12, 2011/01/15 18:43:13 |
|---|---|
| Line 1 | Line 1 |
| /* $Id$ */ | |
| /* | /* |
| * Copyright (c) 2003 NONAKA Kimihiro | * Copyright (c) 2003 NONAKA Kimihiro |
| * All rights reserved. | * All rights reserved. |
| Line 33 | Line 31 |
| #include "palettes.h" | #include "palettes.h" |
| #include "scrndraw.h" | #include "scrndraw.h" |
| #include "toolkit.h" | |
| #include "scrnmng.h" | #include "scrnmng.h" |
| #include "mousemng.h" | |
| #include "soundmng.h" | |
| #include "gtk2/xnp2.h" | #include "gtk2/xnp2.h" |
| #include "gtk2/gtk_drawmng.h" | #include "gtk2/gtk_drawmng.h" |
| Line 54 typedef struct { | Line 56 typedef struct { |
| RECT_T rect; /* drawarea に描画するサイズ */ | RECT_T rect; /* drawarea に描画するサイズ */ |
| /* toolkit depend */ | /* toolkit depend */ |
| GdkPixbuf *drawsurf; | |
| GdkPixbuf *backsurf; | GdkPixbuf *backsurf; |
| GdkPixbuf *surface; | GdkPixbuf *surface; |
| double ratio_w, ratio_h; | double ratio_w, ratio_h; |
| Line 71 typedef struct { | Line 74 typedef struct { |
| static SCRNMNG scrnmng; | static SCRNMNG scrnmng; |
| static DRAWMNG drawmng; | static DRAWMNG drawmng; |
| static SCRNSTAT scrnstat; | static SCRNSTAT scrnstat = { 640, 400, 1, SCREEN_DEFMUL }; |
| static SCRNSURF scrnsurf; | static SCRNSURF scrnsurf; |
| static int real_fullscreen; | static int real_fullscreen; |
| Line 332 scrnmng_initialize(void) | Line 335 scrnmng_initialize(void) |
| } | } |
| } | } |
| void | |
| scrnmng_terminate(void) | |
| { | |
| if (real_fullscreen) { | |
| gtk_window_restore_mode(main_window); | |
| } | |
| } | |
| BOOL | BOOL |
| scrnmng_create(UINT8 mode) | scrnmng_create(UINT8 mode) |
| { | { |
| Line 420 scrnmng_create(UINT8 mode) | Line 414 scrnmng_create(UINT8 mode) |
| gdk_pixbuf_fill(drawmng.surface, 0); | gdk_pixbuf_fill(drawmng.surface, 0); |
| if (mode & SCRNMODE_FULLSCREEN) { | if (mode & SCRNMODE_FULLSCREEN) { |
| drawmng.drawsurf = | |
| real_fullscreen ? drawmng.backsurf : drawmng.surface; | |
| xmenu_hide(); | xmenu_hide(); |
| if (real_fullscreen) { | gtk_window_fullscreen_mode(main_window); |
| gtk_window_fullscreen_mode(main_window); | |
| } else { | |
| gtk_window_fullscreen(GTK_WINDOW(main_window)); | |
| } | |
| } else { | } else { |
| if (real_fullscreen) { | drawmng.drawsurf = (scrnstat.multiple == SCREEN_DEFMUL) |
| gtk_window_restore_mode(main_window); | ? drawmng.backsurf : drawmng.surface; |
| } else { | gtk_window_restore_mode(main_window); |
| gtk_window_unfullscreen(GTK_WINDOW(main_window)); | |
| } | |
| xmenu_show(); | xmenu_show(); |
| } | } |
| Line 454 scrnmng_destroy(void) | Line 444 scrnmng_destroy(void) |
| } | } |
| } | } |
| void | |
| scrnmng_fullscreen(int onoff) | |
| { | |
| if (onoff) { | |
| gtk_window_fullscreen_mode(main_window); | |
| } else { | |
| gtk_window_restore_mode(main_window); | |
| } | |
| } | |
| RGB16 | RGB16 |
| scrnmng_makepal16(RGB32 pal32) | scrnmng_makepal16(RGB32 pal32) |
| { | { |
| Line 465 void | Line 466 void |
| scrnmng_setwidth(int posx, int width) | scrnmng_setwidth(int posx, int width) |
| { | { |
| UNUSED(posx); | |
| scrnstat.width = width; | scrnstat.width = width; |
| renewal_client_size(); | renewal_client_size(); |
| } | } |
| Line 475 void | Line 474 void |
| scrnmng_setheight(int posy, int height) | scrnmng_setheight(int posy, int height) |
| { | { |
| UNUSED(posy); | |
| scrnstat.height = height; | scrnstat.height = height; |
| renewal_client_size(); | renewal_client_size(); |
| } | } |
| Line 496 scrnmng_setmultiple(int multiple) | Line 493 scrnmng_setmultiple(int multiple) |
| if (scrnstat.multiple != multiple) { | if (scrnstat.multiple != multiple) { |
| scrnstat.multiple = multiple; | scrnstat.multiple = multiple; |
| renewal_client_size(); | if (!(drawmng.scrnmode & SCRNMODE_FULLSCREEN)) { |
| soundmng_stop(); | |
| mouse_running(MOUSE_STOP); | |
| scrnmng_destroy(); | |
| if (scrnmng_create(scrnmode) != SUCCESS) { | |
| toolkit_widget_quit(); | |
| return; | |
| } | |
| renewal_client_size(); | |
| scrndraw_redraw(); | |
| mouse_running(MOUSE_CONT); | |
| soundmng_play(); | |
| } | |
| } | } |
| } | } |
| Line 527 void | Line 536 void |
| scrnmng_surfunlock(const SCRNSURF *surf) | scrnmng_surfunlock(const SCRNSURF *surf) |
| { | { |
| UNUSED(surf); | if (drawmng.drawsurf == drawmng.surface) { |
| if (((drawmng.scrnmode & SCRNMODE_FULLSCREEN) && real_fullscreen) | |
| && !(drawmng.scrnmode & SCRNMODE_FULLSCREEN) && (scrnstat.multiple == SCREEN_DEFMUL)) { | |
| /* Nothing to do */ | |
| } else { | |
| gdk_pixbuf_scale(drawmng.backsurf, drawmng.surface, | gdk_pixbuf_scale(drawmng.backsurf, drawmng.surface, |
| 0, 0, drawmng.rect.right, drawmng.rect.bottom, | 0, 0, drawmng.rect.right, drawmng.rect.bottom, |
| 0, 0, drawmng.ratio_w, drawmng.ratio_h, | 0, 0, drawmng.ratio_w, drawmng.ratio_h, |
| Line 546 void | Line 550 void |
| scrnmng_update(void) | scrnmng_update(void) |
| { | { |
| GdkDrawable *d = drawarea->window; | GdkDrawable *d = drawarea->window; |
| GdkGC *gc = drawarea->style->fg_gc[GTK_WIDGET_STATE(drawarea)]; | GdkGC *gc = drawarea->style->fg_gc[gtk_widget_get_state(drawarea)]; |
| if (scrnmng.palchanged) { | if (scrnmng.palchanged) { |
| scrnmng.palchanged = FALSE; | scrnmng.palchanged = FALSE; |
| Line 572 scrnmng_update(void) | Line 576 scrnmng_update(void) |
| } | } |
| } | } |
| if (((drawmng.scrnmode & SCRNMODE_FULLSCREEN) && real_fullscreen) | gdk_draw_pixbuf(d, gc, drawmng.drawsurf, |
| && !(drawmng.scrnmode & SCRNMODE_FULLSCREEN) && (scrnstat.multiple == SCREEN_DEFMUL)) { | 0, 0, |
| gdk_draw_pixbuf(d, gc, drawmng.backsurf, | drawmng.scrn.left, drawmng.scrn.top, |
| 0, 0, | drawmng.rect.right, drawmng.rect.bottom, |
| drawmng.scrn.left, drawmng.scrn.top, | GDK_RGB_DITHER_NORMAL, 0, 0); |
| drawmng.rect.right, drawmng.rect.bottom, | |
| GDK_RGB_DITHER_NORMAL, 0, 0); | |
| } else { | |
| gdk_draw_pixbuf(d, gc, drawmng.surface, | |
| 0, 0, | |
| drawmng.scrn.left, drawmng.scrn.top, | |
| drawmng.rect.right, drawmng.rect.bottom, | |
| GDK_RGB_DITHER_NORMAL, 0, 0); | |
| } | |
| drawmng.drawing = FALSE; | drawmng.drawing = FALSE; |
| } | } |