pixbuf-engine: Make theme_pixbuf_render take a cairo_t

This is in preparation for the theme engine switch to Cairo. We keep the
old function around so that we can step-by-step upgrade all the vfuncs.
This commit is contained in:
Benjamin Otte
2010-08-17 04:37:03 +02:00
parent f7cfaee18a
commit 507f37b536
3 changed files with 47 additions and 33 deletions

View File

@ -130,7 +130,7 @@ draw_simple_image(GtkStyle *style,
{
if (image->background)
{
theme_pixbuf_render (image->background,
theme_pixbuf_render_no_cairo (image->background,
window, area,
draw_center ? COMPONENT_ALL : COMPONENT_ALL | COMPONENT_CENTER,
FALSE,
@ -138,7 +138,7 @@ draw_simple_image(GtkStyle *style,
}
if (image->overlay && draw_center)
theme_pixbuf_render (image->overlay,
theme_pixbuf_render_no_cairo (image->overlay,
window, area, COMPONENT_ALL,
TRUE,
x, y, width, height);
@ -299,19 +299,19 @@ draw_gap_image(GtkStyle *style,
}
if (image->background)
theme_pixbuf_render (image->background,
theme_pixbuf_render_no_cairo (image->background,
window, area, components, FALSE,
x, y, width, height);
if (image->gap_start)
theme_pixbuf_render (image->gap_start,
theme_pixbuf_render_no_cairo (image->gap_start,
window, area, COMPONENT_ALL, FALSE,
r1.x, r1.y, r1.width, r1.height);
if (image->gap)
theme_pixbuf_render (image->gap,
theme_pixbuf_render_no_cairo (image->gap,
window, area, COMPONENT_ALL, FALSE,
r2.x, r2.y, r2.width, r2.height);
if (image->gap_end)
theme_pixbuf_render (image->gap_end,
theme_pixbuf_render_no_cairo (image->gap_end,
window, area, COMPONENT_ALL, FALSE,
r3.x, r3.y, r3.width, r3.height);
@ -348,7 +348,7 @@ draw_hline (GtkStyle *style,
if (image)
{
if (image->background)
theme_pixbuf_render (image->background,
theme_pixbuf_render_no_cairo (image->background,
window, area, COMPONENT_ALL, FALSE,
x1, y, (x2 - x1) + 1, 2);
}
@ -384,7 +384,7 @@ draw_vline (GtkStyle *style,
if (image)
{
if (image->background)
theme_pixbuf_render (image->background,
theme_pixbuf_render_no_cairo (image->background,
window, area, COMPONENT_ALL, FALSE,
x, y1, 2, (y2 - y1) + 1);
}

View File

@ -352,8 +352,7 @@ replicate_cols (GdkPixbuf *src,
static void
pixbuf_render (GdkPixbuf *src,
guint hints,
GdkWindow *window,
GdkRectangle *clip_rect,
cairo_t *cr,
gint src_x,
gint src_y,
gint src_width,
@ -381,12 +380,6 @@ pixbuf_render (GdkPixbuf *src,
if (hints & THEME_MISSING)
return;
if (clip_rect)
{
if (!gdk_rectangle_intersect (clip_rect, &rect, &rect))
return;
}
if (dest_width == src_width && dest_height == src_height)
{
tmp_pixbuf = g_object_ref (src);
@ -471,9 +464,6 @@ pixbuf_render (GdkPixbuf *src,
if (tmp_pixbuf)
{
cairo_t *cr;
cr = gdk_cairo_create (window);
gdk_cairo_set_source_pixbuf (cr,
tmp_pixbuf,
-x_offset + rect.x,
@ -481,7 +471,6 @@ pixbuf_render (GdkPixbuf *src,
gdk_cairo_rectangle (cr, &rect);
cairo_fill (cr);
cairo_destroy (cr);
g_object_unref (tmp_pixbuf);
}
}
@ -726,10 +715,34 @@ theme_pixbuf_get_pixbuf (ThemePixbuf *theme_pb)
return theme_pb->pixbuf;
}
void
theme_pixbuf_render_no_cairo (ThemePixbuf *theme_pb,
GdkWindow *window,
GdkRectangle *clip_rect,
guint component_mask,
gboolean center,
gint x,
gint y,
gint width,
gint height)
{
cairo_t *cr;
cr = gdk_cairo_create (window);
if (clip_rect)
{
gdk_cairo_rectangle (cr, clip_rect);
cairo_clip (cr);
}
theme_pixbuf_render (theme_pb, cr,
component_mask, center,
x, y, width, height);
}
void
theme_pixbuf_render (ThemePixbuf *theme_pb,
GdkWindow *window,
GdkRectangle *clip_rect,
cairo_t *cr,
guint component_mask,
gboolean center,
gint x,
@ -785,7 +798,7 @@ theme_pixbuf_render (ThemePixbuf *theme_pb,
#define RENDER_COMPONENT(X1,X2,Y1,Y2) \
pixbuf_render (pixbuf, theme_pb->hints[Y1][X1], window, clip_rect, \
pixbuf_render (pixbuf, theme_pb->hints[Y1][X1], cr, \
src_x[X1], src_y[Y1], \
src_x[X2] - src_x[X1], src_y[Y2] - src_y[Y1], \
dest_x[X1], dest_y[Y1], \
@ -825,7 +838,7 @@ theme_pixbuf_render (ThemePixbuf *theme_pb,
x += (width - pixbuf_width) / 2;
y += (height - pixbuf_height) / 2;
pixbuf_render (pixbuf, 0, window, clip_rect,
pixbuf_render (pixbuf, 0, cr,
0, 0,
pixbuf_width, pixbuf_height,
x, y,
@ -833,19 +846,12 @@ theme_pixbuf_render (ThemePixbuf *theme_pb,
}
else
{
cairo_t *cr = gdk_cairo_create (window);
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
if (clip_rect)
gdk_cairo_rectangle (cr, clip_rect);
else
cairo_rectangle (cr, x, y, width, height);
cairo_rectangle (cr, x, y, width, height);
cairo_fill (cr);
cairo_destroy (cr);
}
}
}

View File

@ -200,7 +200,7 @@ G_GNUC_INTERNAL void theme_pixbuf_set_border (ThemePixbuf *theme_pb,
gint bottom);
G_GNUC_INTERNAL void theme_pixbuf_set_stretch (ThemePixbuf *theme_pb,
gboolean stretch);
G_GNUC_INTERNAL void theme_pixbuf_render (ThemePixbuf *theme_pb,
G_GNUC_INTERNAL void theme_pixbuf_render_no_cairo (ThemePixbuf *theme_pb,
GdkWindow *window,
GdkRectangle *clip_rect,
guint component_mask,
@ -209,6 +209,14 @@ G_GNUC_INTERNAL void theme_pixbuf_render (ThemePixbuf *theme_pb,
gint dest_y,
gint dest_width,
gint dest_height);
G_GNUC_INTERNAL void theme_pixbuf_render (ThemePixbuf *theme_pb,
cairo_t *cr,
guint component_mask,
gboolean center,
gint dest_x,
gint dest_y,
gint dest_width,
gint dest_height);