]> Pileus Git - ~andy/gtk/blobdiff - gdk/gdkregion-generic.h
Use G_DEFINE_TYPE.
[~andy/gtk] / gdk / gdkregion-generic.h
index 659d44eb4cdcfb999fa685bfddfa7e91ed52a87b..bae8c9b77693abcf56223c8f91e80c82d149f953 100644 (file)
@@ -45,12 +45,7 @@ SOFTWARE.
 #ifndef __GDK_REGION_GENERIC_H__
 #define __GDK_REGION_GENERIC_H__
 
-typedef struct _GdkRegionBox GdkRegionBox;
-
-struct _GdkRegionBox
-{
-  int x1, x2, y1, y2;
-};
+typedef GdkSegment GdkRegionBox;
 
 /* 
  *   clip region
@@ -88,13 +83,22 @@ struct _GdkRegion
               (idRect)->extents.y2 = (r)->y2;\
         }
 
+#define GROWREGION(reg, nRects){                                                \
+         if ((reg)->rects == &(reg)->extents) {                                 \
+            (reg)->rects = g_new (GdkRegionBox, (nRects));                      \
+            (reg)->rects[0] = reg->extents;                                      \
+          }                                                                      \
+          else                                                                   \
+            (reg)->rects = g_renew (GdkRegionBox, (reg)->rects, (nRects));       \
+         (reg)->size = (nRects);                                                \
+       }                                
+
 /*
  *   Check to see if there is enough memory in the present region.
  */
 #define MEMCHECK(reg, rect, firstrect){                                                 \
         if ((reg)->numRects >= ((reg)->size - 1)) {                             \
-          (firstrect) = g_renew (GdkRegionBox, (firstrect), 2 * (reg)->size);    \
-          (reg)->size *= 2;                                                     \
+          GROWREGION(reg,2*(reg)->size);                                         \
           (rect) = &(firstrect)[(reg)->numRects];                               \
          }                                                                      \
        }