--- np2/x11/gtk2/gtk_screen.c 2004/07/14 16:01:40 1.1 +++ np2/x11/gtk2/gtk_screen.c 2004/07/27 17:07:50 1.3 @@ -1,4 +1,4 @@ -/* $Id: gtk_screen.c,v 1.1 2004/07/14 16:01:40 monaka Exp $ */ +/* $Id: gtk_screen.c,v 1.3 2004/07/27 17:07:50 monaka Exp $ */ /* * Copyright (c) 2003 NONAKA Kimihiro @@ -40,8 +40,8 @@ typedef struct { - BYTE scrnmode; - BYTE drawing; + UINT8 scrnmode; + UINT8 drawing; int width; int height; int extend; @@ -72,7 +72,7 @@ typedef struct { typedef struct { SCRNSURF ss; - BYTE renewal[SURFACE_HEIGHT]; + UINT8 renewal[SURFACE_HEIGHT]; } X11SCRNSURF; static SCRNMNG scrnmng; @@ -250,14 +250,15 @@ scrnmng_initialize(void) } BOOL -scrnmng_create(BYTE mode) +scrnmng_create(UINT8 mode) { GdkVisual *visual; RECT_T rect; int height; - int bitcolor; UINT lpitch; - BYTE bytes_per_pixel; + UINT8 bytes_per_pixel; + pixmap_format_t fmt; + int padding; while (drawmng.drawing) gtk_main_iteration_do(FALSE); @@ -274,28 +275,32 @@ scrnmng_create(BYTE mode) scrnmng.flag = SCRNFLAG_HAVEEXTEND; visual = gtk_widget_get_visual(drawarea); - bitcolor = gtkdrawmng_getbpp(drawarea, main_window); - if (bitcolor == 0) { + if (!gtkdrawmng_getformat(drawarea, main_window, &fmt)) return FAILURE; - } else if (bitcolor == 16) { + + switch (fmt.bits_per_pixel) { + case 16: drawmng_make16mask(&drawmng.pal16mask, visual->blue_mask, visual->red_mask, visual->green_mask); - } else if (bitcolor == 8) { + break; + + case 8: palette_init(); + break; } drawmng.extend = 1; - bytes_per_pixel = bitcolor >> 3; + bytes_per_pixel = (UINT8)(fmt.bits_per_pixel / 8); if (!(mode & SCRNMODE_ROTATE)) { rect.right = 641; rect.bottom = 480; - lpitch = rect.right * bytes_per_pixel; - if (lpitch % 4) { - rect.right += (lpitch % 4) / bytes_per_pixel; - lpitch = rect.right * bytes_per_pixel; - } } else { rect.right = 480; rect.bottom = 641; + } + lpitch = rect.right * bytes_per_pixel; + padding = lpitch % (fmt.scanline_pad / 8); + if (padding > 0) { + rect.right += padding / bytes_per_pixel; lpitch = rect.right * bytes_per_pixel; } height = 480; @@ -316,9 +321,9 @@ scrnmng_create(BYTE mode) gdk_draw_rectangle(drawmng.backsurf, drawarea->style->black_gc, TRUE, 0, 0, rect.right, rect.bottom); } - scrnmng.bpp = (BYTE)bitcolor; + scrnmng.bpp = (UINT8)fmt.bits_per_pixel; drawmng.lpitch = lpitch; - scrnsurf.ss.bpp = bitcolor; + scrnsurf.ss.bpp = fmt.bits_per_pixel; drawmng.scrnmode = mode; drawmng.width = 640; drawmng.height = height; @@ -389,7 +394,7 @@ scrnmng_surflock(void) memcpy(scrnsurf.renewal, renewal_line, sizeof(scrnsurf.renewal)); #endif - scrnsurf.ss.ptr = (BYTE *)drawmng.surface->mem; + scrnsurf.ss.ptr = (UINT8 *)drawmng.surface->mem; if (!(drawmng.scrnmode & SCRNMODE_ROTATE)) { scrnsurf.ss.xalign = bytes_per_pixel; scrnsurf.ss.yalign = lpitch; @@ -413,7 +418,7 @@ scrnmng_surfunlock(const SCRNSURF *surf) GdkDrawable *d = drawarea->window; GdkGC *gc = drawarea->style->fg_gc[GTK_WIDGET_STATE(drawarea)]; X11SCRNSURF *ss = (X11SCRNSURF *)surf; - BYTE *delta = ss->renewal; + UINT8 *delta = ss->renewal; RECT_T r; gint h, s;