Diff for /np2/x11/gtk/Attic/gtkdraw.c between versions 1.2 and 1.3

version 1.2, 2003/11/26 14:55:01 version 1.3, 2003/11/28 16:29:57
Line 34 Line 34
 #include "scrnmng.h"  #include "scrnmng.h"
   
 #include "gtk/xnp2.h"  #include "gtk/xnp2.h"
   #include "gtk/gtkdrawmng.h"
   
   
 typedef struct {  typedef struct {
         BYTE    scrnmode;          BYTE            scrnmode;
         int     width;          int             width;
         int     height;          int             height;
         int     extend;          int             extend;
         int     clipping;          int             clipping;
   
         RGB32   pal16mask;          PAL16MASK       pal16mask;
         BYTE    r16b;  
         BYTE    l16r;          RECT_T          scrn;
         BYTE    l16g;          RECT_T          rect;
   
         RECT_T  scrn;          int             lpitch;
         RECT_T  rect;          int             scrw;
           int             scrh;
         int     lpitch;  
         int     scrw;  
         int     scrh;  
   
         /* toolkit depend */          /* toolkit depend */
         GdkImage        *surface;          GdkImage        *surface;
         GdkPixmap       *backsurf;          GdkPixmap       *backsurf;
         unsigned long   pixel[24];      /* pallete */  
   
         BOOL            shared_pixmap;          BOOL            shared_pixmap;
   
           unsigned long   pixel[24];      /* pallete */
 } DRAWMNG;  } DRAWMNG;
   
 typedef struct {  typedef struct {
Line 237  palette_set(void) Line 235  palette_set(void)
         }          }
 }  }
   
   
 static void  
 make16mask(UINT32 bmask, UINT32 rmask, UINT32 gmask)  
 {  
         BYTE sft;  
   
         sft = 0;  
         while ((!(bmask & 0x80)) && (sft < 32)) {  
                 bmask <<= 1;  
                 sft++;  
         }  
         drawmng.pal16mask.p.b = (BYTE)bmask;  
         drawmng.r16b = sft;  
   
         sft = 0;  
         while ((rmask & 0xffffff00) && (sft < 32)) {  
                 rmask >>= 1;  
                 sft++;  
         }  
         drawmng.pal16mask.p.r = (BYTE)rmask;  
         drawmng.l16r = sft;  
   
         sft = 0;  
         while ((gmask & 0xffffff00) && (sft < 32)) {  
                 gmask >>= 1;  
                 sft++;  
         }  
         drawmng.pal16mask.p.g = (BYTE)gmask;  
         drawmng.l16g = sft;  
 }  
   
 void  void
 scrnmng_initialize(void)  scrnmng_initialize(void)
 {  {
Line 299  scrnmng_create(BYTE mode) Line 266  scrnmng_create(BYTE mode)
                 scrnmng.flag = SCRNFLAG_HAVEEXTEND;                  scrnmng.flag = SCRNFLAG_HAVEEXTEND;
   
                 visual = gtk_widget_get_visual(drawarea);                  visual = gtk_widget_get_visual(drawarea);
                 switch (visual->type) {                  bitcolor = gtkdrawmng_getbpp(drawarea, window);
                 case GDK_VISUAL_TRUE_COLOR:                  if (bitcolor == 0) {
                         break;  
   
                 case GDK_VISUAL_PSEUDO_COLOR:  
                         break;  
   
                 case GDK_VISUAL_DIRECT_COLOR:  
                         if (visual->depth > 8) {  
                                 break;  
                         }  
                         /* FALLTHROUGH */  
                 default:  
                         fprintf(stderr, "No support visual class.\n");  
                         return 1;  
                 }  
   
                 if (visual->depth == 32) {  
                         bitcolor = 32;  
                 } else if (visual->depth == 24) {  
                         if (is_32bpp(window->window)) {  
                                 bitcolor = 32;  
                         } else {  
                                 bitcolor = 24;  
                         }  
                 } else if (visual->depth == 15 || visual->depth == 16) {  
                         bitcolor = 16;  
                         make16mask(visual->blue_mask, visual->red_mask, visual->green_mask);  
                 } else if (visual->depth == 8) {  
                         bitcolor = 8;  
                         palette_init();  
                 } else if (visual->depth < 8) {  
                         fprintf(stderr, "Too few allocable color.\n");  
                         return FAILURE;  
                 } else {  
                         fprintf(stderr, "No support depth.\n");  
                         return FAILURE;                          return FAILURE;
                   } else if (bitcolor == 16) {
                           drawmng_make16mask(&drawmng.pal16mask, visual->blue_mask, visual->red_mask, visual->green_mask);
                   } else if (bitcolor == 8) {
                           palette_init();
                 }                  }
                 drawmng.extend = 1;                  drawmng.extend = 1;
                 bytes_per_pixel = bitcolor >> 3;                  bytes_per_pixel = bitcolor >> 3;
Line 346  scrnmng_create(BYTE mode) Line 283  scrnmng_create(BYTE mode)
                         lpitch = rect.right * bytes_per_pixel;                          lpitch = rect.right * bytes_per_pixel;
                         if (lpitch % 4) {                          if (lpitch % 4) {
                                 rect.right += (lpitch % 4) / bytes_per_pixel;                                  rect.right += (lpitch % 4) / bytes_per_pixel;
                                   lpitch = rect.right * bytes_per_pixel;
                         }                          }
                 } else {                  } else {
                         rect.right = 480;                          rect.right = 480;
                         rect.bottom = 641;                          rect.bottom = 641;
                           lpitch = rect.right * bytes_per_pixel;
                 }                  }
                 lpitch = rect.right * bytes_per_pixel;  
                 height = 480;                  height = 480;
   
                 drawmng.surface = gdk_image_new(GDK_IMAGE_FASTEST, visual,                  drawmng.surface = gdk_image_new(GDK_IMAGE_FASTEST, visual,
Line 361  scrnmng_create(BYTE mode) Line 299  scrnmng_create(BYTE mode)
                         return FAILURE;                          return FAILURE;
                 }                  }
   
                   drawmng.shared_pixmap = use_shared_pixmap;
                 drawmng.backsurf = NULL;                  drawmng.backsurf = NULL;
                 if (use_shared_pixmap) {                  if (use_shared_pixmap) {
                         drawmng.backsurf = gdk_pixmap_shpix_new(                          drawmng.backsurf = gdk_pixmap_shpix_new(
Line 410  scrnmng_destroy(void) Line 349  scrnmng_destroy(void)
 RGB16  RGB16
 scrnmng_makepal16(RGB32 pal32)  scrnmng_makepal16(RGB32 pal32)
 {  {
         RGB32 pal;  
   
         pal.d = pal32.d & drawmng.pal16mask.d;          return drawmng_makepal16(&drawmng.pal16mask, pal32);
         return (RGB16)((pal.p.g << drawmng.l16g) + (pal.p.r << drawmng.l16r) + (pal.p.b >> drawmng.r16b));  
 }  }
   
 void  void
Line 480  scrnmng_surfunlock(const SCRNSURF* surf) Line 417  scrnmng_surfunlock(const SCRNSURF* surf)
         RECT_T r;          RECT_T r;
         gint h, s;          gint h, s;
   
         r.left = drawmng.scrn.left;  
         r.top = drawmng.scrn.top;  
         r.right = drawmng.rect.right;  
         r.bottom = drawmng.rect.bottom;  
   
         if (!drawmng.shared_pixmap) {          if (!drawmng.shared_pixmap) {
                   r.left = drawmng.scrn.left;
                   r.top = drawmng.scrn.top;
                   r.right = drawmng.rect.right;
                   r.bottom = drawmng.rect.bottom;
   
                 if (!(drawmng.scrnmode & SCRNMODE_ROTATE)) {                  if (!(drawmng.scrnmode & SCRNMODE_ROTATE)) {
                         /* normal */                          /* normal */
                         for (s = h = 0; h < r.bottom; h++) {                          for (s = h = 0; h < r.bottom; h++) {

Removed from v.1.2  
changed lines
  Added in v.1.3


RetroPC.NET-CVS <cvs@retropc.net>