| version 1.5, 2007/01/12 19:09:58 | 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 411  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 445  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 456  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 466  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 487  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 518  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 537  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 563  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; | 
 | } | } |