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

version 1.1, 2003/11/16 16:43:45 version 1.2, 2003/11/26 14:55:01
Line 51  typedef struct { Line 51  typedef struct {
         RECT_T  scrn;          RECT_T  scrn;
         RECT_T  rect;          RECT_T  rect;
   
           int     lpitch;
         int     scrw;          int     scrw;
         int     scrh;          int     scrh;
   
         int     lpitch;  
   
         /* toolkit depend */          /* toolkit depend */
         GdkImage*       surface;          GdkImage        *surface;
         GdkPixmap*      backsurf;          GdkPixmap       *backsurf;
         unsigned long   pixel[24];      /* pallete */          unsigned long   pixel[24];      /* pallete */
   
           BOOL            shared_pixmap;
 } DRAWMNG;  } DRAWMNG;
   
 typedef struct {  typedef struct {
Line 145  renewal_client_size(void) Line 146  renewal_client_size(void)
 static void  static void
 clear_out_of_rect(const RECT_T* target, const RECT_T* base)  clear_out_of_rect(const RECT_T* target, const RECT_T* base)
 {  {
           GdkDrawable *d = drawarea->window;
           GdkGC *gc = drawarea->style->black_gc;
         RECT_T rect;          RECT_T rect;
   
         rect.left = base->left;          rect.left = base->left;
Line 152  clear_out_of_rect(const RECT_T* target,  Line 155  clear_out_of_rect(const RECT_T* target, 
         rect.top = base->top;          rect.top = base->top;
         rect.bottom = target->top;          rect.bottom = target->top;
         if (rect.top < rect.bottom) {          if (rect.top < rect.bottom) {
                 gdk_draw_rectangle(drawmng.backsurf,                  gdk_draw_rectangle(d, gc, TRUE,
                     drawarea->style->black_gc, TRUE,  
                     rect.left, rect.top, rect.right, rect.bottom);                      rect.left, rect.top, rect.right, rect.bottom);
         }          }
         rect.top = target->bottom;          rect.top = target->bottom;
         rect.bottom = base->bottom;          rect.bottom = base->bottom;
         if (rect.top < rect.bottom) {          if (rect.top < rect.bottom) {
                 gdk_draw_rectangle(drawmng.backsurf,                  gdk_draw_rectangle(d, gc, TRUE,
                     drawarea->style->black_gc, TRUE,  
                     rect.left, rect.top, rect.right, rect.bottom);                      rect.left, rect.top, rect.right, rect.bottom);
         }          }
   
Line 170  clear_out_of_rect(const RECT_T* target,  Line 171  clear_out_of_rect(const RECT_T* target, 
                 rect.left = base->left;                  rect.left = base->left;
                 rect.right = target->left;                  rect.right = target->left;
                 if (rect.left < rect.right) {                  if (rect.left < rect.right) {
                         gdk_draw_rectangle(drawmng.backsurf,                          gdk_draw_rectangle(d, gc, TRUE,
                             drawarea->style->black_gc, TRUE,  
                             rect.left, rect.top, rect.right, rect.bottom);                              rect.left, rect.top, rect.right, rect.bottom);
                 }                  }
                 rect.left = target->right;                  rect.left = target->right;
                 rect.right = base->right;                  rect.right = base->right;
                 if (rect.left < rect.right) {                  if (rect.left < rect.right) {
                         gdk_draw_rectangle(drawmng.backsurf,                          gdk_draw_rectangle(d, gc, TRUE,
                             drawarea->style->black_gc, TRUE,  
                             rect.left, rect.top, rect.right, rect.bottom);                              rect.left, rect.top, rect.right, rect.bottom);
                 }                  }
         }          }
Line 190  clear_outscreen(void) Line 189  clear_outscreen(void)
         RECT_T target;          RECT_T target;
         RECT_T base;          RECT_T base;
   
           base.left = base.top = 0;
           base.right = drawmng.scrw;
           base.bottom = drawmng.scrh;
         target = drawmng.scrn;          target = drawmng.scrn;
         memset(&base, 0, sizeof(base));  
         clear_out_of_rect(&target, &base);          clear_out_of_rect(&target, &base);
 }  }
   
Line 340  scrnmng_create(BYTE mode) Line 341  scrnmng_create(BYTE mode)
                 bytes_per_pixel = bitcolor >> 3;                  bytes_per_pixel = bitcolor >> 3;
   
                 if (!(mode & SCRNMODE_ROTATE)) {                  if (!(mode & SCRNMODE_ROTATE)) {
                         rect.right = 640;                          rect.right = 641;
                         rect.bottom = 480;                          rect.bottom = 480;
                         if (np2oscfg.paddingx) {  
                                 rect.right++;  
                         }  
   
                         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;
                         }                          }
                 } else {                  } else {
                         rect.right = 480;                          rect.right = 480;
                         rect.bottom = 640;                          rect.bottom = 641;
                         if (np2oscfg.paddingx) {  
                                 rect.bottom++;  
                         }  
                 }                  }
                 lpitch = rect.right * bytes_per_pixel;                  lpitch = rect.right * bytes_per_pixel;
                 height = 480;                  height = 480;
Line 366  scrnmng_create(BYTE mode) Line 360  scrnmng_create(BYTE mode)
                         g_message("can't create surface.");                          g_message("can't create surface.");
                         return FAILURE;                          return FAILURE;
                 }                  }
   
                   drawmng.backsurf = NULL;
                   if (use_shared_pixmap) {
                           drawmng.backsurf = gdk_pixmap_shpix_new(
                               drawarea->window, drawmng.surface,
                               rect.right, rect.bottom, visual->depth);
                   }
                   if (drawmng.backsurf == NULL) {
                           drawmng.shared_pixmap = FALSE;
                           drawmng.backsurf = gdk_pixmap_new(drawarea->window,
                               rect.right, rect.bottom, visual->depth);
                   }
                   if (drawmng.backsurf == NULL) {
                           g_message("can't create pixmap.");
                           return FAILURE;
                   }
                   gdk_draw_rectangle(drawmng.backsurf, drawarea->style->black_gc,
                       TRUE, 0, 0, rect.right, rect.bottom);
         }          }
         scrnmng.bpp = (BYTE)bitcolor;          scrnmng.bpp = (BYTE)bitcolor;
         drawmng.lpitch = lpitch;          drawmng.lpitch = lpitch;
Line 376  scrnmng_create(BYTE mode) Line 388  scrnmng_create(BYTE mode)
         drawmng.clipping = 0;          drawmng.clipping = 0;
         renewal_client_size();          renewal_client_size();
   
         drawmng.backsurf = gdk_pixmap_new(drawarea->window,  
             drawmng.scrw, drawmng.scrh, visual->depth);  
         if (drawmng.backsurf == NULL) {  
                 g_message("can't create pixmap.");  
                 return FAILURE;  
         }  
         gdk_draw_rectangle(drawmng.backsurf, drawarea->style->black_gc, TRUE,  
             0, 0, drawmng.scrw, drawmng.scrh);  
   
         return SUCCESS;          return SUCCESS;
 }  }
   
Line 471  void Line 474  void
 scrnmng_surfunlock(const SCRNSURF* surf)  scrnmng_surfunlock(const SCRNSURF* surf)
 {  {
         X11SCRNSURF *ss = (X11SCRNSURF *)surf;          X11SCRNSURF *ss = (X11SCRNSURF *)surf;
         GtkWidget *w = drawarea;          GdkDrawable *d = drawarea->window;
         GdkGC *gc = w->style->fg_gc[GTK_WIDGET_STATE(w)];          GdkGC *gc = drawarea->style->fg_gc[GTK_WIDGET_STATE(drawarea)];
         BYTE *delta = ss->renewal;          BYTE *delta = ss->renewal;
         RECT_T r;          RECT_T r;
         gint h, s;          gint h, s;
Line 482  scrnmng_surfunlock(const SCRNSURF* surf) Line 485  scrnmng_surfunlock(const SCRNSURF* surf)
         r.right = drawmng.rect.right;          r.right = drawmng.rect.right;
         r.bottom = drawmng.rect.bottom;          r.bottom = drawmng.rect.bottom;
   
         if (!(drawmng.scrnmode & SCRNMODE_ROTATE)) {          if (!drawmng.shared_pixmap) {
                 /* normal */                  if (!(drawmng.scrnmode & SCRNMODE_ROTATE)) {
                 for (s = h = 0; h < r.bottom; h++) {                          /* normal */
                         if ((renewal_line[h] != delta[h]) || (s == h))                          for (s = h = 0; h < r.bottom; h++) {
                                 continue;                                  if ((renewal_line[h] != delta[h]) || (s == h))
                                           continue;
                         gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,  
                             0, s, r.left, r.top + s, r.right, h - s);                                  gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,
                         s = h + 1;                                      0, s, r.left, r.top + s, r.right, h - s);
                 }                                  s = h + 1;
                 if (s != h) {                          }
                         gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,                          if (s != h) {
                             0, s, r.left, r.top + s, r.right, h - s);                                  gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,
                 }                                      0, s, r.left, r.top + s, r.right, h - s);
         } else if (!(drawmng.scrnmode & SCRNMODE_ROTATEDIR)) {                          }
                 /* rotate left */                  } else if (!(drawmng.scrnmode & SCRNMODE_ROTATEDIR)) {
                 for (s = h = 0; h < r.right; h++) {                          /* rotate left */
                         if ((renewal_line[h] != delta[h]) || (s == h))                          for (s = h = 0; h < r.right; h++) {
                                 continue;                                  if ((renewal_line[h] != delta[h]) || (s == h))
                                           continue;
                         gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,  
                             s, 0, r.left + s, r.top, h - s, r.bottom);                                  gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,
                         s = h + 1;                                      s, 0, r.left + s, r.top, h - s, r.bottom);
                 }                                  s = h + 1;
                 if (s != h) {                          }
                         gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,                          if (s != h) {
                             s, 0, r.left + s, r.top, h - s, r.bottom);                                  gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,
                 }                                      s, 0, r.left + s, r.top, h - s, r.bottom);
         } else {                          }
                 /* rotate right */                  } else {
                 for (s = h = 0; h < r.right; h++) {                          /* rotate right */
                         if ((renewal_line[h] != delta[h]) || (s == h))                          for (s = h = 0; h < r.right; h++) {
                                 continue;                                  if ((renewal_line[h] != delta[h]) || (s == h))
                                           continue;
                         gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,  
                             r.right - h, 0,                                  gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,
                             drawmng.scrn.right - h, r.top, h - s, r.bottom);                                      r.right - h, 0,
                         s = h + 1;                                      drawmng.scrn.right - h, r.top, h - s, r.bottom);
                 }                                  s = h + 1;
                 if (s != h) {                          }
                         gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,                          if (s != h) {
                             r.right - h, 0,                                  gdk_draw_image(drawmng.backsurf, gc, drawmng.surface,
                             drawmng.scrn.right - h, r.top, h - s, r.bottom);                                      r.right - h, 0,
                                       drawmng.scrn.right - h, r.top, h - s, r.bottom);
                           }
                 }                  }
         }          }
   
         scrnmng_update();  
 }  
   
 void  
 scrnmng_update(void)  
 {  
         GdkDrawable *d = (GdkDrawable *)drawarea->window;  
         GtkWidget *w = drawarea;  
         GdkGC *gc = w->style->fg_gc[GTK_WIDGET_STATE(w)];  
   
         if (scrnmng.palchanged) {          if (scrnmng.palchanged) {
                 scrnmng.palchanged = FALSE;                  scrnmng.palchanged = FALSE;
                 palette_set();                  palette_set();
Line 550  scrnmng_update(void) Line 545  scrnmng_update(void)
         {          {
                 if (scrnmng.allflash) {                  if (scrnmng.allflash) {
                         scrnmng.allflash = 0;                          scrnmng.allflash = 0;
                         clear_outscreen();                          if (np2oscfg.paddingx || np2oscfg.paddingy) {
                                   clear_outscreen();
                           }
                 }                  }
                 gdk_draw_pixmap(d, gc, drawmng.backsurf,                  gdk_draw_pixmap(d, gc, drawmng.backsurf,
                     0, 0, 0, 0, drawmng.scrw, drawmng.scrh);                      0, 0,                                       /* src */
                       drawmng.scrn.left, drawmng.scrn.top,        /* dest */
                       drawmng.rect.right, drawmng.rect.bottom);   /* w/h */
         }          }
 }  }

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


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