]> Pileus Git - ~andy/gtk/commitdiff
Fix build breakage on Windows caused by the region changes
authorTor Lillqvist <tml@iki.fi>
Mon, 5 Jul 2010 09:56:02 +0000 (12:56 +0300)
committerTor Lillqvist <tml@iki.fi>
Mon, 5 Jul 2010 09:57:13 +0000 (12:57 +0300)
Patches by Sam Thursfield, from bug #623476.

gdk/win32/gdkdrawable-win32.c
gdk/win32/gdkgc-win32.c
gdk/win32/gdkgeometry-win32.c
gdk/win32/gdkmain-win32.c
gdk/win32/gdkprivate-win32.h
gdk/win32/gdkwindow-win32.c

index 83d87273e57a810d2c7742266ceb049bed85a80d..19bb89a29d47ef2f4a3f00fdbacb2d484934ec18 100644 (file)
@@ -512,14 +512,14 @@ generic_draw (GdkDrawable    *drawable,
       const GdkGCValuesMask blitting_mask = 0;
       GdkGCValuesMask drawing_mask = GDK_GC_FOREGROUND;
       gint ts_x_origin = 0, ts_y_origin = 0;
+      cairo_rectangle_int_t region_extents;
 
-      gint width = region->extents.x2 - region->extents.x1;
-      gint height = region->extents.y2 - region->extents.y1;
+      cairo_region_get_extents (region, &region_extents);
 
       GdkPixmap *mask_pixmap =
-       gdk_pixmap_new (drawable, width, height, 1);
+       gdk_pixmap_new (drawable, region_extents.width, region_extents.height, 1);
       GdkPixmap *tile_pixmap =
-       gdk_pixmap_new (drawable, width, height, -1);
+       gdk_pixmap_new (drawable, region_extents.width, region_extents.height, -1);
       GdkPixmap *stipple_bitmap = NULL;
       GdkColor fg;
       
@@ -542,13 +542,13 @@ generic_draw (GdkDrawable    *drawable,
       if (gcwin32->values_mask & GDK_GC_TS_Y_ORIGIN)
        ts_y_origin = gc->ts_y_origin;
 
-      ts_x_origin -= region->extents.x1;
-      ts_y_origin -= region->extents.y1;
+      ts_x_origin -= region_extents.x;
+      ts_y_origin -= region_extents.y;
 
       /* Fill mask bitmap with zeros */
       gdk_gc_set_function (mask_gc, GDK_CLEAR);
       gdk_draw_rectangle (mask_pixmap, mask_gc, TRUE,
-                         0, 0, width, height);
+                         0, 0, region_extents.width, region_extents.height);
 
       /* Paint into mask bitmap, drawing ones */
       gdk_gc_set_function (mask_gc, GDK_COPY);
@@ -575,7 +575,7 @@ generic_draw (GdkDrawable    *drawable,
 
       mask_hdc = gdk_win32_hdc_get (mask_pixmap, mask_gc, drawing_mask);
       (*function) (GDK_GC_WIN32 (mask_gc), mask_hdc,
-                  region->extents.x1, region->extents.y1, args);
+                  region_extents.x, region_extents.y, args);
       gdk_win32_hdc_release (mask_pixmap, mask_gc, drawing_mask);
 
       if (fill_style == GDK_TILED)
@@ -584,21 +584,22 @@ generic_draw (GdkDrawable    *drawable,
          draw_tiles (tile_pixmap, tile_gc, SRCCOPY,
                      _gdk_gc_get_tile (gc),
                      0, 0, ts_x_origin, ts_y_origin,
-                     width, height);
+                     region_extents.width, region_extents.height);
        }
       else
        {
          /* Tile with stipple */
          GdkGC *stipple_gc;
 
-         stipple_bitmap = gdk_pixmap_new (NULL, width, height, 1);
+         stipple_bitmap =
+           gdk_pixmap_new (NULL, region_extents.width, region_extents.height, 1);
          stipple_gc = gdk_gc_new (stipple_bitmap);
 
          /* Tile stipple bitmap */
          draw_tiles (stipple_bitmap, stipple_gc, SRCCOPY,
                      _gdk_gc_get_stipple (gc),
                      0, 0, ts_x_origin, ts_y_origin,
-                     width, height);
+                     region_extents.width, region_extents.height);
 
          if (fill_style == GDK_OPAQUE_STIPPLED)
            {
@@ -606,7 +607,8 @@ generic_draw (GdkDrawable    *drawable,
              fg.pixel = _gdk_gc_get_bg_pixel (gc);
              gdk_gc_set_foreground (tile_gc, &fg);
              gdk_draw_rectangle (tile_pixmap, tile_gc, TRUE,
-                                 0, 0, width, height);
+                                 0, 0,
+                                 region_extents.width, region_extents.height);
            }
          g_object_unref (stipple_gc);
        }
@@ -662,14 +664,18 @@ generic_draw (GdkDrawable    *drawable,
           * Reading bottom-up: 11100010 = 0xE2. PSDK docs say this is
           * known as DSPDxax, with hex value 0x00E20746.
           */
-         GDI_CALL (BitBlt, (tile_hdc, 0, 0, width, height,
-                            stipple_hdc, 0, 0, ROP3_DSPDxax));
+         GDI_CALL (BitBlt, (tile_hdc, 0, 0,
+                            region_extents.width, region_extents.height,
+                            stipple_hdc, 0, 0,
+                            ROP3_DSPDxax));
 
          if (fill_style == GDK_STIPPLED)
            {
              /* Punch holes in mask where stipple is zero */
-             GDI_CALL (BitBlt, (mask_hdc, 0, 0, width, height,
-                                stipple_hdc, 0, 0, SRCAND));
+             GDI_CALL (BitBlt, (mask_hdc, 0, 0,
+                                region_extents.width, region_extents.height,
+                                stipple_hdc, 0, 0,
+                                SRCAND));
            }
 
          GDI_CALL (SelectObject, (tile_hdc, old_tile_brush));
@@ -683,8 +689,8 @@ generic_draw (GdkDrawable    *drawable,
        * the areas where mask is one. (It is filled with said pattern.)
        */
 
-      GDI_CALL (MaskBlt, (hdc, region->extents.x1, region->extents.y1,
-                         width, height,
+      GDI_CALL (MaskBlt, (hdc, region_extents.x, region_extents.y,
+                         region_extents.width, region_extents.height,
                          tile_hdc, 0, 0,
                          GDK_PIXMAP_HBITMAP (mask_pixmap), 0, 0,
                          MAKEROP4 (rop2_to_rop3 (gcwin32->rop2), ROP3_D)));
index 6b802692366cec33161a5cc8f7fce7d899b0554b..578cd5d274e8982edbee697b19e2dd3e3b9cf4f2 100644 (file)
@@ -543,9 +543,9 @@ gdk_win32_gc_set_dashes (GdkGC *gc,
 }
 
 void
-_gdk_windowing_gc_set_clip_region (GdkGC           *gc,
+_gdk_windowing_gc_set_clip_region (GdkGC                *gc,
                                    const cairo_region_t *region,
-                                  gboolean         reset_origin)
+                                  gboolean              reset_origin)
 {
   GdkGCWin32 *win32_gc = GDK_GC_WIN32 (gc);
 
@@ -556,9 +556,9 @@ _gdk_windowing_gc_set_clip_region (GdkGC           *gc,
     {
       GDK_NOTE (GC, g_print ("gdk_gc_set_clip_region: %p: %s\n",
                             win32_gc,
-                            _gdk_win32_gdkregion_to_string (region)));
+                            _gdk_win32_cairo_region_to_string (region)));
 
-      win32_gc->hcliprgn = _gdk_win32_gdkregion_to_hrgn (region, 0, 0);
+      win32_gc->hcliprgn = _gdk_win32_cairo_region_to_hrgn (region, 0, 0);
       win32_gc->values_mask |= GDK_GC_CLIP_MASK;
     }
   else
@@ -1055,16 +1055,16 @@ _gdk_win32_bitmap_to_hrgn (GdkPixmap *pixmap)
 }
 
 HRGN
-_gdk_win32_gdkregion_to_hrgn (const cairo_region_t *region,
-                             gint             x_origin,
-                             gint             y_origin)
+_gdk_win32_cairo_region_to_hrgn (const cairo_region_t *region,
+                                gint                  x_origin,
+                                gint                  y_origin)
 {
   HRGN hrgn;
   RGNDATA *rgndata;
   RECT *rect;
-  cairo_region_tBox *boxes = region->rects;
-  guint nbytes =
-    sizeof (RGNDATAHEADER) + (sizeof (RECT) * region->numRects);
+  cairo_rectangle_int_t cairo_rect;
+  guint nbytes = sizeof (RGNDATAHEADER)
+                  + (sizeof (RECT) * cairo_region_num_rectangles (region));
   int i;
 
   rgndata = g_malloc (nbytes);
@@ -1074,14 +1074,15 @@ _gdk_win32_gdkregion_to_hrgn (const cairo_region_t *region,
   SetRect (&rgndata->rdh.rcBound,
           G_MAXLONG, G_MAXLONG, G_MINLONG, G_MINLONG);
 
-  for (i = 0; i < region->numRects; i++)
+  for (i = 0; i < cairo_region_num_rectangles (region); i++)
     {
       rect = ((RECT *) rgndata->Buffer) + rgndata->rdh.nCount++;
+      cairo_region_get_rectangle (region, i, &cairo_rect);
 
-      rect->left = boxes[i].x1 + x_origin;
-      rect->right = boxes[i].x2 + x_origin;
-      rect->top = boxes[i].y1 + y_origin;
-      rect->bottom = boxes[i].y2 + y_origin;
+      rect->left = cairo_rect.x + x_origin;
+      rect->right = cairo_rect.x + cairo_rect.width + x_origin;
+      rect->top = cairo_rect.y + y_origin;
+      rect->bottom = cairo_rect.y + cairo_rect.height + y_origin;
 
       if (rect->left < rgndata->rdh.rcBound.left)
        rgndata->rdh.rcBound.left = rect->left;
index ca28b28a2410ba447abc8914391a5bf1fb7ef96a..a94b81ea92888068701b800d46f044e247424df8 100644 (file)
@@ -282,7 +282,7 @@ gdk_window_post_scroll (GdkWindow    *window,
 {
   GDK_NOTE (EVENTS,
            g_print ("gdk_window_clip_changed: invalidating region: %s\n",
-                    _gdk_win32_gdkregion_to_string (new_clip_region)));
+                    _gdk_win32_cairo_region_to_string (new_clip_region)));
 
   gdk_window_invalidate_region (window, new_clip_region, FALSE);
   g_print ("gdk_window_post_scroll\n");
index e8258f45363a1248a4455628efd8565bbb11a6c9..8c684d02231a34863705bc6e098c97713056854f 100644 (file)
@@ -517,7 +517,6 @@ _gdk_win32_gcvalues_mask_to_string (GdkGCValuesMask mask)
 
   BIT (FOREGROUND);
   BIT (BACKGROUND);
-  BIT (FONT);
   BIT (FUNCTION);
   BIT (FILL);
   BIT (TILE);
@@ -1158,12 +1157,13 @@ _gdk_win32_gdkrectangle_to_string (const GdkRectangle *rect)
 }
 
 gchar *
-_gdk_win32_gdkregion_to_string (const cairo_region_t *rgn)
+_gdk_win32_cairo_region_to_string (const cairo_region_t *rgn)
 {
+  cairo_rectangle_int_t extents;
+  cairo_region_get_extents (rgn, &extents);
   return static_printf ("%dx%d@%+d%+d",
-                       (rgn->extents.x2 - rgn->extents.x1),
-                       (rgn->extents.y2 - rgn->extents.y1),
-                       rgn->extents.x1, rgn->extents.y1);
+                       extents.width, extents.height,
+                       extents.x, extents.y);
 }
 
 gchar *
index 39a9f9a33a03c23366d778c555adccfcfeb549cc..0945d6e20f6047556ec1a0e579f3b7177557c84b 100644 (file)
@@ -267,9 +267,9 @@ COLORREF  _gdk_win32_colormap_color     (GdkColormap *colormap,
 
 HRGN     _gdk_win32_bitmap_to_hrgn     (GdkPixmap   *bitmap);
 
-HRGN     _gdk_win32_gdkregion_to_hrgn  (const cairo_region_t *region,
-                                        gint             x_origin,
-                                        gint             y_origin);
+HRGN     _gdk_win32_cairo_region_to_hrgn (const cairo_region_t *region,
+                                          gint                  x_origin,
+                                          gint                  y_origin);
 
 cairo_region_t *_gdk_win32_hrgn_to_region    (HRGN hrgn);
 
@@ -321,7 +321,7 @@ gchar *_gdk_win32_data_to_string       (const guchar*data,
 gchar *_gdk_win32_rect_to_string       (const RECT  *rect);
 
 gchar *_gdk_win32_gdkrectangle_to_string (const GdkRectangle *rect);
-gchar *_gdk_win32_gdkregion_to_string    (const cairo_region_t    *box);
+gchar *_gdk_win32_cairo_region_to_string (const cairo_region_t    *box);
 
 void   _gdk_win32_print_event            (const GdkEvent     *event);
 
index 83e467e05ab8cad41c9e9ea4c210b970ed0dd04e..53676b736459724a5347d70f3c43df77770d93f9 100644 (file)
@@ -3149,7 +3149,7 @@ gdk_win32_window_shape_combine_region (GdkWindow       *window,
     {
       HRGN hrgn;
 
-      hrgn = _gdk_win32_gdkregion_to_hrgn (shape_region, 0, 0);
+      hrgn = _gdk_win32_cairo_region_to_hrgn (shape_region, 0, 0);
       
       GDK_NOTE (MISC, g_print ("gdk_win32_window_shape_combine_region: %p: %p\n",
                               GDK_WINDOW_HWND (window),
@@ -3269,11 +3269,11 @@ static gboolean
 _gdk_win32_window_queue_antiexpose (GdkWindow *window,
                                    cairo_region_t *area)
 {
-  HRGN hrgn = _gdk_win32_gdkregion_to_hrgn (area, 0, 0);
+  HRGN hrgn = _gdk_win32_cairo_region_to_hrgn (area, 0, 0);
 
   GDK_NOTE (EVENTS, g_print ("_gdk_windowing_window_queue_antiexpose: ValidateRgn %p %s\n",
                             GDK_WINDOW_HWND (window),
-                            _gdk_win32_gdkregion_to_string (area)));
+                            _gdk_win32_cairo_region_to_string (area)));
 
   ValidateRgn (GDK_WINDOW_HWND (window), hrgn);
 
@@ -3306,7 +3306,7 @@ _gdk_win32_window_queue_translation (GdkWindow *window,
   else if (ret != NULLREGION)
     {
       /* Get current updateregion, move any part of it that intersects area by dx,dy */
-      HRGN update = _gdk_win32_gdkregion_to_hrgn (area, 0, 0);
+      HRGN update = _gdk_win32_cairo_region_to_hrgn (area, 0, 0);
       ret = CombineRgn (update, hrgn, update, RGN_AND);
       if (ret == ERROR)
         WIN32_API_FAILED ("CombineRgn");