--- np2/x11/gtk2/gtk_screen.c 2007/01/23 15:48:20 1.7 +++ np2/x11/gtk2/gtk_screen.c 2011/01/15 18:55:47 1.13 @@ -1,5 +1,3 @@ -/* $Id: gtk_screen.c,v 1.7 2007/01/23 15:48:20 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -33,7 +31,11 @@ #include "palettes.h" #include "scrndraw.h" +#include "toolkit.h" + #include "scrnmng.h" +#include "mousemng.h" +#include "soundmng.h" #include "gtk2/xnp2.h" #include "gtk2/gtk_drawmng.h" @@ -43,17 +45,18 @@ typedef struct { UINT8 scrnmode; volatile int drawing; - int width; /* drawarea ¡¢¥Û width */ - int height; /* drawarea ¡¢¥Û height */ + int width; /* drawarea åá¥ç width */ + int height; /* drawarea åá¥ç height */ int extend; int clipping; PAL16MASK pal16mask; - RECT_T scrn; /* drawarea ¥Ë䦥ۥΥÁ¥¤ðÐ¥Û¡¼ð²¥Õ¥Æ¥è */ - RECT_T rect; /* drawarea ¡¢¥Ò¥Î¥Á¥¤ð¦¥±¡¢ö§¥ª¡¦¡¢¡¦¥³ */ + RECT_T scrn; /* drawarea éæªå¢°ëï¾éȽò¢Ðçޡ迺饹¥ç */ + RECT_T rect; /* drawarea åᥩëï¾éȽåáÒå£ëå⥪åâ¡¢å⥳ */ /* toolkit depend */ + GdkPixbuf *drawsurf; GdkPixbuf *backsurf; GdkPixbuf *surface; double ratio_w, ratio_h; @@ -71,7 +74,7 @@ typedef struct { static SCRNMNG scrnmng; static DRAWMNG drawmng; -static SCRNSTAT scrnstat; +static SCRNSTAT scrnstat = { 640, 400, 1, SCREEN_DEFMUL }; static SCRNSURF scrnsurf; static int real_fullscreen; @@ -84,7 +87,7 @@ GtkWidget *drawarea; #define BYTES_PER_PIXEL 3 /* - * drawarea ¡¢¥Û¡¦¡Ö¡¦¥±¡¦¥ì¡¦¥Ã¡¦¥Í¥Íì¦4:3 (640x480) ¤Ë¤¹¤ë¡£ + * drawarea ¤Î¥¢¥¹¥Ú¥¯¥ÈÈæ¤ò 4:3 (640x480) ¤Ë¤¹¤ë¡£ */ static void adapt_aspect(int width, int height, int scrnwidth, int scrnheight) @@ -411,18 +414,14 @@ scrnmng_create(UINT8 mode) gdk_pixbuf_fill(drawmng.surface, 0); if (mode & SCRNMODE_FULLSCREEN) { + drawmng.drawsurf = + real_fullscreen ? drawmng.backsurf : drawmng.surface; xmenu_hide(); - if (real_fullscreen) { - gtk_window_fullscreen_mode(main_window); - } else { - gtk_window_fullscreen(GTK_WINDOW(main_window)); - } + gtk_window_fullscreen_mode(main_window); } else { - if (real_fullscreen) { - gtk_window_restore_mode(main_window); - } else { - gtk_window_unfullscreen(GTK_WINDOW(main_window)); - } + drawmng.drawsurf = (scrnstat.multiple == SCREEN_DEFMUL) + ? drawmng.backsurf : drawmng.surface; + gtk_window_restore_mode(main_window); xmenu_show(); } @@ -445,6 +444,17 @@ scrnmng_destroy(void) } } +void +scrnmng_fullscreen(int onoff) +{ + + if (onoff) { + gtk_window_fullscreen_mode(main_window); + } else { + gtk_window_restore_mode(main_window); + } +} + RGB16 scrnmng_makepal16(RGB32 pal32) { @@ -456,8 +466,6 @@ void scrnmng_setwidth(int posx, int width) { - UNUSED(posx); - scrnstat.width = width; renewal_client_size(); } @@ -466,8 +474,6 @@ void scrnmng_setheight(int posy, int height) { - UNUSED(posy); - scrnstat.height = height; renewal_client_size(); } @@ -487,7 +493,19 @@ scrnmng_setmultiple(int multiple) if (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(); + } } } @@ -518,12 +536,7 @@ void scrnmng_surfunlock(const SCRNSURF *surf) { - UNUSED(surf); - - if (((drawmng.scrnmode & SCRNMODE_FULLSCREEN) && real_fullscreen) - && !(drawmng.scrnmode & SCRNMODE_FULLSCREEN) && (scrnstat.multiple == SCREEN_DEFMUL)) { - /* Nothing to do */ - } else { + if (drawmng.drawsurf == drawmng.surface) { gdk_pixbuf_scale(drawmng.backsurf, drawmng.surface, 0, 0, drawmng.rect.right, drawmng.rect.bottom, 0, 0, drawmng.ratio_w, drawmng.ratio_h, @@ -537,7 +550,7 @@ void scrnmng_update(void) { 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) { scrnmng.palchanged = FALSE; @@ -563,20 +576,11 @@ scrnmng_update(void) } } - if (((drawmng.scrnmode & SCRNMODE_FULLSCREEN) && real_fullscreen) - && !(drawmng.scrnmode & SCRNMODE_FULLSCREEN) && (scrnstat.multiple == SCREEN_DEFMUL)) { - gdk_draw_pixbuf(d, gc, drawmng.backsurf, - 0, 0, - drawmng.scrn.left, drawmng.scrn.top, - 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); - } + gdk_draw_pixbuf(d, gc, drawmng.drawsurf, + 0, 0, + drawmng.scrn.left, drawmng.scrn.top, + drawmng.rect.right, drawmng.rect.bottom, + GDK_RGB_DITHER_NORMAL, 0, 0); drawmng.drawing = FALSE; }