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
This commit is contained in:
Florian Müllner
2010-06-30 00:43:56 +02:00
parent 01447d94d1
commit 7feeb72721
13 changed files with 184 additions and 86 deletions

View File

@ -27,6 +27,7 @@
#include <math.h>
#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