From 7feeb7272191ebf944c558281687499308c59404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 30 Jun 2010 00:43:56 +0200 Subject: [PATCH] Use cairo_region_t when building with gtk+-3.0 GdkRegion has been removed from Gtk+. The replacement is a yet-unreleased cairo API, so use it only when building with Gtk+-3.0. https://bugzilla.gnome.org/show_bug.cgi?id=587991 --- configure.in | 1 + src/Makefile.am | 1 + src/compositor/mutter-shaped-texture.c | 10 ++--- src/compositor/mutter-shaped-texture.h | 6 ++- src/compositor/mutter-window-group.c | 17 +++++--- src/compositor/mutter-window-private.h | 10 +++-- src/compositor/mutter-window.c | 40 ++++++++--------- src/core/util.c | 24 +++++++++++ src/include/region.h | 60 ++++++++++++++++++++++++++ src/ui/frames.c | 59 ++++++++++++------------- src/ui/preview-widget.c | 22 +++++----- src/ui/preview-widget.h | 5 ++- src/ui/tabpopup.c | 15 ++++--- 13 files changed, 184 insertions(+), 86 deletions(-) create mode 100644 src/include/region.h diff --git a/configure.in b/configure.in index 860ffbef8..4f40ebbda 100644 --- a/configure.in +++ b/configure.in @@ -143,6 +143,7 @@ case "$with_gtk" in 3.0) GTK_API_VERSION=3.0 GTK_MIN_VERSION=2.90 CANBERRA_GTK=libcanberra-gtk3 + AC_DEFINE(USE_CAIRO_REGION, 1, [Use cairo_region_t instead of GdkRegion]) ;; esac diff --git a/src/Makefile.am b/src/Makefile.am index f9a29c9d2..c95723682 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -44,6 +44,7 @@ mutter_SOURCES= \ include/compositor.h \ include/mutter-plugin.h \ include/mutter-window.h \ + include/region.h \ include/compositor-mutter.h \ core/constraints.c \ core/constraints.h \ diff --git a/src/compositor/mutter-shaped-texture.c b/src/compositor/mutter-shaped-texture.c index 984374a88..68315dbe8 100644 --- a/src/compositor/mutter-shaped-texture.c +++ b/src/compositor/mutter-shaped-texture.c @@ -71,7 +71,7 @@ struct _MutterShapedTexturePrivate CoglHandle material_workaround; #endif - GdkRegion *clip_region; + MetaRegion *clip_region; guint mask_width, mask_height; @@ -300,7 +300,7 @@ mutter_shaped_texture_paint (ClutterActor *actor) ClutterActorBox alloc; CoglHandle material; - if (priv->clip_region && gdk_region_empty (priv->clip_region)) + if (priv->clip_region && meta_region_is_empty (priv->clip_region)) return; if (!CLUTTER_ACTOR_IS_REALIZED (CLUTTER_ACTOR (stex))) @@ -387,7 +387,7 @@ mutter_shaped_texture_paint (ClutterActor *actor) # define MAX_RECTS 16 /* Would be nice to be able to check the number of rects first */ - gdk_region_get_rectangles (priv->clip_region, &rects, &n_rects); + meta_region_get_rectangles (priv->clip_region, &rects, &n_rects); if (n_rects > MAX_RECTS) { g_free (rects); @@ -557,7 +557,7 @@ mutter_shaped_texture_add_rectangles (MutterShapedTexture *stex, */ void mutter_shaped_texture_set_clip_region (MutterShapedTexture *stex, - GdkRegion *clip_region) + MetaRegion *clip_region) { MutterShapedTexturePrivate *priv; @@ -567,7 +567,7 @@ mutter_shaped_texture_set_clip_region (MutterShapedTexture *stex, if (priv->clip_region) { - gdk_region_destroy (priv->clip_region); + meta_region_destroy (priv->clip_region); priv->clip_region = NULL; } diff --git a/src/compositor/mutter-shaped-texture.h b/src/compositor/mutter-shaped-texture.h index 82e58d2b3..dd2a7501d 100644 --- a/src/compositor/mutter-shaped-texture.h +++ b/src/compositor/mutter-shaped-texture.h @@ -26,12 +26,14 @@ #ifndef __MUTTER_SHAPED_TEXTURE_H__ #define __MUTTER_SHAPED_TEXTURE_H__ +#include + #include #ifdef HAVE_GLX_TEXTURE_PIXMAP #include #endif /* HAVE_GLX_TEXTURE_PIXMAP */ -#include +#include "region.h" G_BEGIN_DECLS @@ -94,7 +96,7 @@ void mutter_shaped_texture_add_rectangles (MutterShapedTexture *stex, /* Assumes ownership of clip_region */ void mutter_shaped_texture_set_clip_region (MutterShapedTexture *stex, - GdkRegion *clip_region); + MetaRegion *clip_region); G_END_DECLS diff --git a/src/compositor/mutter-window-group.c b/src/compositor/mutter-window-group.c index e89327e62..55c88461d 100644 --- a/src/compositor/mutter-window-group.c +++ b/src/compositor/mutter-window-group.c @@ -1,10 +1,13 @@ /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ +#include + #define _ISOC99_SOURCE /* for roundf */ #include #include "mutter-window-private.h" #include "mutter-window-group.h" +#include "region.h" struct _MutterWindowGroupClass { @@ -99,7 +102,7 @@ static void mutter_window_group_paint (ClutterActor *actor) { MutterWindowGroup *window_group = MUTTER_WINDOW_GROUP (actor); - GdkRegion *visible_region; + MetaRegion *visible_region; GdkRectangle screen_rect = { 0 }; GList *children, *l; @@ -116,7 +119,7 @@ mutter_window_group_paint (ClutterActor *actor) * optimization, however.) */ meta_screen_get_size (window_group->screen, &screen_rect.width, &screen_rect.height); - visible_region = gdk_region_rectangle (&screen_rect); + visible_region = meta_region_new_from_rectangle (&screen_rect); for (l = children; l; l = l->next) { @@ -132,22 +135,22 @@ mutter_window_group_paint (ClutterActor *actor) continue; /* Temporarily move to the coordinate system of the actor */ - gdk_region_offset (visible_region, - x, - y); + meta_region_translate (visible_region, - x, - y); mutter_window_set_visible_region (cw, visible_region); if (clutter_actor_get_paint_opacity (CLUTTER_ACTOR (cw)) == 0xff) { - GdkRegion *obscured_region = mutter_window_get_obscured_region (cw); + MetaRegion *obscured_region = mutter_window_get_obscured_region (cw); if (obscured_region) - gdk_region_subtract (visible_region, obscured_region); + meta_region_subtract (visible_region, obscured_region); } mutter_window_set_visible_region_beneath (cw, visible_region); - gdk_region_offset (visible_region, x, y); + meta_region_translate (visible_region, x, y); } - gdk_region_destroy (visible_region); + meta_region_destroy (visible_region); CLUTTER_ACTOR_CLASS (mutter_window_group_parent_class)->paint (actor); diff --git a/src/compositor/mutter-window-private.h b/src/compositor/mutter-window-private.h index 3c0d0f988..9b55f9823 100644 --- a/src/compositor/mutter-window-private.h +++ b/src/compositor/mutter-window-private.h @@ -3,9 +3,11 @@ #ifndef MUTTER_WINDOW_PRIVATE_H #define MUTTER_WINDOW_PRIVATE_H +#include + #include -#include #include "compositor-mutter.h" +#include "region.h" MutterWindow *mutter_window_new (MetaWindow *window); @@ -37,12 +39,12 @@ void mutter_window_update_opacity (MutterWindow *cw); void mutter_window_mapped (MutterWindow *cw); void mutter_window_unmapped (MutterWindow *cw); -GdkRegion *mutter_window_get_obscured_region (MutterWindow *cw); +MetaRegion *mutter_window_get_obscured_region (MutterWindow *cw); void mutter_window_set_visible_region (MutterWindow *cw, - GdkRegion *visible_region); + MetaRegion *visible_region); void mutter_window_set_visible_region_beneath (MutterWindow *cw, - GdkRegion *beneath_region); + MetaRegion *beneath_region); void mutter_window_reset_visible_regions (MutterWindow *cw); void mutter_window_effect_completed (MutterWindow *actor, diff --git a/src/compositor/mutter-window.c b/src/compositor/mutter-window.c index f25349483..377611fa7 100644 --- a/src/compositor/mutter-window.c +++ b/src/compositor/mutter-window.c @@ -42,10 +42,10 @@ struct _MutterWindowPrivate gchar * desc; /* If the window is shaped, a region that matches the shape */ - GdkRegion *shape_region; + MetaRegion *shape_region; /* A rectangular region with the unshaped extends of the window * texture */ - GdkRegion *bounding_region; + MetaRegion *bounding_region; gint freeze_count; @@ -1350,7 +1350,7 @@ mutter_window_clear_shape_region (MutterWindow *self) if (priv->shape_region) { - gdk_region_destroy (priv->shape_region); + meta_region_destroy (priv->shape_region); priv->shape_region = NULL; } } @@ -1362,7 +1362,7 @@ mutter_window_clear_bounding_region (MutterWindow *self) if (priv->bounding_region) { - gdk_region_destroy (priv->bounding_region); + meta_region_destroy (priv->bounding_region); priv->bounding_region = NULL; } } @@ -1377,7 +1377,7 @@ mutter_window_update_bounding_region (MutterWindow *self, mutter_window_clear_bounding_region (self); - priv->bounding_region = gdk_region_rectangle (&bounding_rectangle); + priv->bounding_region = meta_region_new_from_rectangle (&bounding_rectangle); } static void @@ -1390,11 +1390,11 @@ mutter_window_update_shape_region (MutterWindow *self, mutter_window_clear_shape_region (self); - priv->shape_region = gdk_region_new (); + priv->shape_region = meta_region_new (); for (i = 0; i < n_rects; i++) { GdkRectangle rect = { rects[i].x, rects[i].y, rects[i].width, rects[i].height }; - gdk_region_union_with_rect (priv->shape_region, &rect); + meta_region_union_rectangle (priv->shape_region, &rect); } } @@ -1408,7 +1408,7 @@ mutter_window_update_shape_region (MutterWindow *self, * Return value: (transfer none): the area obscured by the window, * %NULL is the same as an empty region. */ -GdkRegion * +MetaRegion * mutter_window_get_obscured_region (MutterWindow *self) { MutterWindowPrivate *priv = self->priv; @@ -1427,13 +1427,13 @@ mutter_window_get_obscured_region (MutterWindow *self) #if 0 /* Print out a region; useful for debugging */ static void -dump_region (GdkRegion *region) +dump_region (MetaRegion *region) { GdkRectangle *rects; int n_rects; int i; - gdk_region_get_rectangles (region, &rects, &n_rects); + meta_region_get_rectangles (region, &rects, &n_rects); g_print ("["); for (i = 0; i < n_rects; i++) { @@ -1457,10 +1457,10 @@ dump_region (GdkRegion *region) */ void mutter_window_set_visible_region (MutterWindow *self, - GdkRegion *visible_region) + MetaRegion *visible_region) { MutterWindowPrivate *priv = self->priv; - GdkRegion *texture_clip_region = NULL; + MetaRegion *texture_clip_region = NULL; /* Get the area of the window texture that would be drawn if * we weren't obscured at all @@ -1468,21 +1468,21 @@ mutter_window_set_visible_region (MutterWindow *self, if (priv->shaped) { if (priv->shape_region) - texture_clip_region = gdk_region_copy (priv->shape_region); + texture_clip_region = meta_region_copy (priv->shape_region); } else { if (priv->bounding_region) - texture_clip_region = gdk_region_copy (priv->bounding_region); + texture_clip_region = meta_region_copy (priv->bounding_region); } if (!texture_clip_region) - texture_clip_region = gdk_region_new (); + texture_clip_region = meta_region_new (); /* Then intersect that with the visible region to get the region * that we actually need to redraw. */ - gdk_region_intersect (texture_clip_region, visible_region); + meta_region_intersect (texture_clip_region, visible_region); /* Assumes ownership */ mutter_shaped_texture_set_clip_region (MUTTER_SHAPED_TEXTURE (priv->actor), @@ -1503,7 +1503,7 @@ mutter_window_set_visible_region (MutterWindow *self, */ void mutter_window_set_visible_region_beneath (MutterWindow *self, - GdkRegion *beneath_region) + MetaRegion *beneath_region) { MutterWindowPrivate *priv = self->priv; @@ -1511,7 +1511,7 @@ mutter_window_set_visible_region_beneath (MutterWindow *self, { GdkRectangle shadow_rect; ClutterActorBox box; - GdkOverlapType overlap; + MetaOverlapType overlap; /* We could compute an full clip region as we do for the window * texture, but the shadow is relatively cheap to draw, and @@ -1526,10 +1526,10 @@ mutter_window_set_visible_region_beneath (MutterWindow *self, shadow_rect.width = roundf (box.x2 - box.x1); shadow_rect.height = roundf (box.y2 - box.y1); - overlap = gdk_region_rect_in (beneath_region, &shadow_rect); + overlap = meta_region_contains_rectangle (beneath_region, &shadow_rect); tidy_texture_frame_set_needs_paint (TIDY_TEXTURE_FRAME (priv->shadow), - overlap != GDK_OVERLAP_RECTANGLE_OUT); + overlap != META_REGION_OVERLAP_OUT); } } diff --git a/src/core/util.c b/src/core/util.c index 5b1ccb1a8..507ffa73e 100644 --- a/src/core/util.c +++ b/src/core/util.c @@ -879,5 +879,29 @@ meta_later_remove (guint later_id) } } +#ifdef USE_CAIRO_REGION +#include "region.h" + +void +meta_region_get_rectangles (MetaRegion *region, + GdkRectangle **rectangles, + int *n_rectangles) +{ + int n = cairo_region_num_rectangles (region); + + if (n_rectangles != NULL) + *n_rectangles = n; + + if (rectangles != NULL) + { + int i; + + *rectangles = g_new (cairo_rectangle_int_t, n); + for (i = 0; i < n; i++) + cairo_region_get_rectangle (region, i, *rectangles + i); + } +} +#endif + /* eof util.c */ diff --git a/src/include/region.h b/src/include/region.h new file mode 100644 index 000000000..b91a0b924 --- /dev/null +++ b/src/include/region.h @@ -0,0 +1,60 @@ +#ifndef META_REGION_H +#define META_REGION_H + +#ifndef PACKAGE_NAME +#error " must be included before region.h" +#endif + +#include + +#ifdef USE_CAIRO_REGION +#include + +#define MetaRegion cairo_region_t + +typedef enum { + META_REGION_OVERLAP_IN = CAIRO_REGION_OVERLAP_IN, + META_REGION_OVERLAP_OUT = CAIRO_REGION_OVERLAP_OUT, + META_REGION_OVERLAP_PART = CAIRO_REGION_OVERLAP_PART +} MetaOverlapType; + +#define meta_region_new() cairo_region_create() +#define meta_region_new_from_rectangle(rect) cairo_region_create_rectangle(rect) +#define meta_region_copy(r) cairo_region_copy(r) +#define meta_region_destroy(r) cairo_region_destroy(r) +#define meta_region_is_empty(r) cairo_region_is_empty(r) +#define meta_region_union_rectangle(r, rect) cairo_region_union_rectangle(r, rect) +#define meta_region_subtract(r, other) cairo_region_subtract(r, other) +#define meta_region_translate(r, x, y) cairo_region_translate(r, x, y) +#define meta_region_intersect(r, other) cairo_region_intersect(r, other) +#define meta_region_contains_rectangle(r, rect) cairo_region_contains_rectangle(r, rect) + +void meta_region_get_rectangles (MetaRegion *region, + GdkRectangle **rectangles, + int *n_rectangles); + +#else + +#define MetaRegion GdkRegion + +typedef enum { + META_REGION_OVERLAP_IN = GDK_OVERLAP_RECTANGLE_IN, + META_REGION_OVERLAP_OUT = GDK_OVERLAP_RECTANGLE_OUT, + META_REGION_OVERLAP_PART = GDK_OVERLAP_RECTANGLE_PART +} MetaOverlapType; + +#define meta_region_new() gdk_region_new() +#define meta_region_new_from_rectangle(rect) gdk_region_rectangle(rect) +#define meta_region_copy(r) gdk_region_copy(r) +#define meta_region_destroy(r) gdk_region_destroy(r) +#define meta_region_is_empty(r) gdk_region_empty(r) +#define meta_region_union_rectangle(r, rect) gdk_region_union_with_rect(r, rect) +#define meta_region_subtract(r, other) gdk_region_subtract(r, other) +#define meta_region_translate(r, x, y) gdk_region_offset(r, x, y) +#define meta_region_intersect(r, other) gdk_region_intersect(r, other) +#define meta_region_contains_rectangle(r, rect) gdk_region_rect_in(r, rect) +#define meta_region_get_rectangles(r, rects, num) gdk_region_get_rectangles(r, rects, num) + +#endif /* HAVE_CAIRO_REGION */ + +#endif /* META_REGION_H */ diff --git a/src/ui/frames.c b/src/ui/frames.c index dce5f52a9..03f733c17 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -27,6 +27,7 @@ #include #include "boxes.h" #include "frames.h" +#include "region.h" #include "util.h" #include "core.h" #include "menu.h" @@ -75,7 +76,7 @@ static void meta_frames_attach_style (MetaFrames *frames, static void meta_frames_paint_to_drawable (MetaFrames *frames, MetaUIFrame *frame, GdkDrawable *drawable, - GdkRegion *region, + MetaRegion *region, int x_offset, int y_offset); @@ -2068,7 +2069,7 @@ generate_pixmap (MetaFrames *frames, MetaRectangle rect) { GdkRectangle rectangle; - GdkRegion *region; + MetaRegion *region; GdkPixmap *result; rectangle.x = rect.x; @@ -2081,12 +2082,12 @@ generate_pixmap (MetaFrames *frames, clear_backing (result, frame->window, rectangle.x, rectangle.y); - region = gdk_region_rectangle (&rectangle); + region = meta_region_new_from_rectangle (&rectangle); meta_frames_paint_to_drawable (frames, frame, result, region, -rectangle.x, -rectangle.y); - gdk_region_destroy (region); + meta_region_destroy (region); return result; } @@ -2170,11 +2171,11 @@ populate_cache (MetaFrames *frames, } static void -clip_to_screen (GdkRegion *region, MetaUIFrame *frame) +clip_to_screen (MetaRegion *region, MetaUIFrame *frame) { GdkRectangle frame_area; GdkRectangle screen_area = { 0, 0, 0, 0 }; - GdkRegion *tmp_region; + MetaRegion *tmp_region; /* Chop off stuff outside the screen; this optimization * is crucial to handle huge client windows, @@ -2189,35 +2190,35 @@ clip_to_screen (GdkRegion *region, MetaUIFrame *frame) META_CORE_GET_SCREEN_HEIGHT, &screen_area.height, META_CORE_GET_END); - gdk_region_offset (region, frame_area.x, frame_area.y); + meta_region_translate (region, frame_area.x, frame_area.y); - tmp_region = gdk_region_rectangle (&frame_area); - gdk_region_intersect (region, tmp_region); - gdk_region_destroy (tmp_region); + tmp_region = meta_region_new_from_rectangle (&frame_area); + meta_region_intersect (region, tmp_region); + meta_region_destroy (tmp_region); - gdk_region_offset (region, - frame_area.x, - frame_area.y); + meta_region_translate (region, - frame_area.x, - frame_area.y); } static void -subtract_from_region (GdkRegion *region, GdkDrawable *drawable, +subtract_from_region (MetaRegion *region, GdkDrawable *drawable, gint x, gint y) { GdkRectangle rect; - GdkRegion *reg_rect; + MetaRegion *reg_rect; gdk_drawable_get_size (drawable, &rect.width, &rect.height); rect.x = x; rect.y = y; - reg_rect = gdk_region_rectangle (&rect); - gdk_region_subtract (region, reg_rect); - gdk_region_destroy (reg_rect); + reg_rect = meta_region_new_from_rectangle (&rect); + meta_region_subtract (region, reg_rect); + meta_region_destroy (reg_rect); } static void cached_pixels_draw (CachedPixels *pixels, - GdkWindow *window, - GdkRegion *region) + GdkWindow *window, + MetaRegion *region) { GdkGC *gc; int i; @@ -2249,8 +2250,8 @@ meta_frames_expose_event (GtkWidget *widget, { MetaUIFrame *frame; MetaFrames *frames; - GdkRegion *region; CachedPixels *pixels; + MetaRegion *region; frames = META_FRAMES (widget); @@ -2267,7 +2268,7 @@ meta_frames_expose_event (GtkWidget *widget, populate_cache (frames, frame); - region = gdk_region_copy (event->region); + region = meta_region_copy (event->region); pixels = get_cache (frames, frame); @@ -2276,7 +2277,7 @@ meta_frames_expose_event (GtkWidget *widget, clip_to_screen (region, frame); meta_frames_paint_to_drawable (frames, frame, frame->window, region, 0, 0); - gdk_region_destroy (region); + meta_region_destroy (region); return TRUE; } @@ -2290,7 +2291,7 @@ static void meta_frames_paint_to_drawable (MetaFrames *frames, MetaUIFrame *frame, GdkDrawable *drawable, - GdkRegion *region, + MetaRegion *region, int x_offset, int y_offset) { @@ -2423,7 +2424,7 @@ meta_frames_paint_to_drawable (MetaFrames *frames, GdkRectangle area, *areas; int n_areas; int screen_width, screen_height; - GdkRegion *edges, *tmp_region; + MetaRegion *edges, *tmp_region; int top, bottom, left, right; /* Repaint each side of the frame */ @@ -2437,7 +2438,7 @@ meta_frames_paint_to_drawable (MetaFrames *frames, META_CORE_GET_SCREEN_HEIGHT, &screen_height, META_CORE_GET_END); - edges = gdk_region_copy (region); + edges = meta_region_copy (region); /* Punch out the client area */ @@ -2445,13 +2446,13 @@ meta_frames_paint_to_drawable (MetaFrames *frames, area.y = top; area.width = w; area.height = h; - tmp_region = gdk_region_rectangle (&area); - gdk_region_subtract (edges, tmp_region); - gdk_region_destroy (tmp_region); + tmp_region = meta_region_new_from_rectangle (&area); + meta_region_subtract (edges, tmp_region); + meta_region_destroy (tmp_region); /* Now draw remaining portion of region */ - gdk_region_get_rectangles (edges, &areas, &n_areas); + meta_region_get_rectangles (edges, &areas, &n_areas); for (i = 0; i < n_areas; i++) { @@ -2494,7 +2495,7 @@ meta_frames_paint_to_drawable (MetaFrames *frames, } g_free (areas); - gdk_region_destroy (edges); + meta_region_destroy (edges); } else diff --git a/src/ui/preview-widget.c b/src/ui/preview-widget.c index c023ca9eb..87229e062 100644 --- a/src/ui/preview-widget.c +++ b/src/ui/preview-widget.c @@ -455,11 +455,11 @@ meta_preview_get_mini_icon (void) return default_icon; } -GdkRegion * +MetaRegion * meta_preview_get_clip_region (MetaPreview *preview, gint new_window_width, gint new_window_height) { GdkRectangle xrect; - GdkRegion *corners_xregion, *window_xregion; + MetaRegion *corners_xregion, *window_xregion; gint flags; MetaFrameLayout *fgeom; MetaFrameStyle *frame_style; @@ -468,14 +468,14 @@ meta_preview_get_clip_region (MetaPreview *preview, gint new_window_width, gint flags = (META_PREVIEW (preview)->flags); - window_xregion = gdk_region_new (); + window_xregion = meta_region_new (); xrect.x = 0; xrect.y = 0; xrect.width = new_window_width; xrect.height = new_window_height; - gdk_region_union_with_rect (window_xregion, &xrect); + meta_region_union_rectangle (window_xregion, &xrect); if (preview->theme == NULL) return window_xregion; @@ -486,7 +486,7 @@ meta_preview_get_clip_region (MetaPreview *preview, gint new_window_width, gint fgeom = frame_style->layout; - corners_xregion = gdk_region_new (); + corners_xregion = meta_region_new (); if (fgeom->top_left_corner_rounded_radius != 0) { @@ -503,7 +503,7 @@ meta_preview_get_clip_region (MetaPreview *preview, gint new_window_width, gint xrect.width = width; xrect.height = 1; - gdk_region_union_with_rect (corners_xregion, &xrect); + meta_region_union_rectangle (corners_xregion, &xrect); } } @@ -521,7 +521,7 @@ meta_preview_get_clip_region (MetaPreview *preview, gint new_window_width, gint xrect.width = width; xrect.height = 1; - gdk_region_union_with_rect (corners_xregion, &xrect); + meta_region_union_rectangle (corners_xregion, &xrect); } } @@ -539,7 +539,7 @@ meta_preview_get_clip_region (MetaPreview *preview, gint new_window_width, gint xrect.width = width; xrect.height = 1; - gdk_region_union_with_rect (corners_xregion, &xrect); + meta_region_union_rectangle (corners_xregion, &xrect); } } @@ -557,12 +557,12 @@ meta_preview_get_clip_region (MetaPreview *preview, gint new_window_width, gint xrect.width = width; xrect.height = 1; - gdk_region_union_with_rect (corners_xregion, &xrect); + meta_region_union_rectangle (corners_xregion, &xrect); } } - gdk_region_subtract (window_xregion, corners_xregion); - gdk_region_destroy (corners_xregion); + meta_region_subtract (window_xregion, corners_xregion); + meta_region_destroy (corners_xregion); return window_xregion; } diff --git a/src/ui/preview-widget.h b/src/ui/preview-widget.h index 924b01104..4678dd6fc 100644 --- a/src/ui/preview-widget.h +++ b/src/ui/preview-widget.h @@ -21,7 +21,10 @@ * 02111-1307, USA. */ +#include + #include "theme.h" +#include "region.h" #include #ifndef META_PREVIEW_WIDGET_H @@ -77,7 +80,7 @@ void meta_preview_set_frame_flags (MetaPreview *preview, void meta_preview_set_button_layout (MetaPreview *preview, const MetaButtonLayout *button_layout); -GdkRegion * meta_preview_get_clip_region (MetaPreview *preview, +MetaRegion * meta_preview_get_clip_region (MetaPreview *preview, gint new_window_width, gint new_window_height); diff --git a/src/ui/tabpopup.c b/src/ui/tabpopup.c index 4aa1e984c..9351162db 100644 --- a/src/ui/tabpopup.c +++ b/src/ui/tabpopup.c @@ -32,6 +32,7 @@ */ #include "../core/workspace-private.h" #include "../core/frame-private.h" +#include "region.h" #include "draw-workspace.h" #include #include @@ -459,9 +460,9 @@ display_entry (MetaTabPopup *popup, TabEntry *te) { GdkRectangle rect; - GdkRegion *region; - GdkRegion *inner_region; GdkWindow *window; + MetaRegion *region; + MetaRegion *inner_region; if (popup->current_selected_entry) @@ -498,16 +499,16 @@ display_entry (MetaTabPopup *popup, gdk_window_set_background (window, >k_widget_get_style (popup->outline_window)->black); - region = gdk_region_rectangle (&rect); - inner_region = gdk_region_rectangle (&te->inner_rect); - gdk_region_subtract (region, inner_region); - gdk_region_destroy (inner_region); + region = meta_region_new_from_rectangle (&rect); + inner_region = meta_region_new_from_rectangle (&te->inner_rect); + meta_region_subtract (region, inner_region); + meta_region_destroy (inner_region); gdk_window_shape_combine_region (window, region, 0, 0); - gdk_region_destroy (region); + meta_region_destroy (region); /* This should piss off gtk a bit, but we don't want to raise * above the tab popup. So, instead of calling gtk_widget_show,