Use gdk_window_get_background_pattern() to clear the background

gdk_window_get_back_pixmap() and gdk_window_get_background() have
been removed/deprecated. Use gdk_window_get_background_pattern()
as replacement.

https://bugzilla.gnome.org/show_bug.cgi?id=626583
This commit is contained in:
Florian Müllner 2010-08-16 19:20:44 +02:00
parent 08cfdcd802
commit 0839c100c0
2 changed files with 46 additions and 31 deletions

View File

@ -11,24 +11,7 @@
#if !GTK_CHECK_VERSION (2, 21, 1)
#define gdk_window_get_background(w,c) *c = GDK_WINDOW_OBJECT (w)->bg_color
#define gdk_visual_get_depth(v) GDK_VISUAL(v)->depth
#define gdk_window_get_back_pixmap(w,p,r) \
G_STMT_START { \
GdkWindowObject *priv = GDK_WINDOW_OBJECT (w); \
\
if (p != NULL) \
{ \
if (priv->bg_pixmap == GDK_PARENT_RELATIVE_BG || \
priv->bg_pixmap == GDK_NO_BG) \
*p = NULL; \
else \
*p = priv->bg_pixmap; \
} \
\
if (r != NULL) \
*r = (priv->bg_pixmap == GDK_PARENT_RELATIVE_BG); \
} G_STMT_END
#endif /*GTK_CHECK_VERSION */

View File

@ -2004,32 +2004,64 @@ meta_frames_destroy_event (GtkWidget *widget,
return TRUE;
}
#if !GTK_CHECK_VERSION(2,21,6)
/* Copied from GDK */
static cairo_pattern_t *
gdk_window_get_background_pattern (GdkWindow *window)
{
GdkWindowObject *private = (GdkWindowObject *) window;
cairo_pattern_t *pattern;
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
if (private->bg_pixmap == GDK_PARENT_RELATIVE_BG)
pattern = NULL;
else if (private->bg_pixmap != GDK_NO_BG &&
private->bg_pixmap != NULL)
{
static cairo_user_data_key_t key;
cairo_surface_t *surface;
surface = _gdk_drawable_ref_cairo_surface (private->bg_pixmap);
pattern = cairo_pattern_create_for_surface (surface);
cairo_surface_destroy (surface);
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
cairo_pattern_set_user_data (pattern,
&key,
g_object_ref (private->bg_pixmap),
g_object_unref);
}
else
pattern =
cairo_pattern_create_rgb (private->bg_color.red / 65535.,
private->bg_color.green / 65535.,
private->bg_color.blue / 65535.);
}
return pattern;
}
#endif
static void
setup_bg_cr (cairo_t *cr, GdkWindow *window, int x_offset, int y_offset)
{
GdkWindow *parent = gdk_window_get_parent (window);
GdkPixmap *back_pixmap;
gboolean parent_relative;
cairo_pattern_t *bg_pattern;
gdk_window_get_back_pixmap (window, &back_pixmap, &parent_relative);
if (parent_relative && parent)
bg_pattern = gdk_window_get_background_pattern (window);
if (bg_pattern == NULL && parent)
{
gint window_x, window_y;
gdk_window_get_position (window, &window_x, &window_y);
setup_bg_cr (cr, parent, x_offset + window_x, y_offset + window_y);
}
else if (back_pixmap)
else if (bg_pattern)
{
gdk_cairo_set_source_pixmap (cr, back_pixmap, x_offset, y_offset);
cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
}
else
{
GdkColor bg_color;
gdk_window_get_background (window, &bg_color);
gdk_cairo_set_source_color (cr, &bg_color);
cairo_translate (cr, - x_offset, - y_offset);
cairo_set_source (cr, bg_pattern);
cairo_translate (cr, x_offset, y_offset);
}
}