[sapwood] replace the GdkBitmap in sapwood_pixmap_render_rects_internal()
- From: Sven Herzberg <herzi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sapwood] replace the GdkBitmap in sapwood_pixmap_render_rects_internal()
- Date: Fri, 13 Aug 2010 11:40:46 +0000 (UTC)
commit 09dfdf9d041389bb7ce78e28ad02c468ca7fb834
Author: Sven Herzberg <herzi gnome-de org>
Date: Fri Aug 13 11:05:50 2010 +0200
replace the GdkBitmap in sapwood_pixmap_render_rects_internal()
* engine/sapwood-pixmap.c: and again, we're one step closer to
completely cairo based rendering
engine/sapwood-pixmap.c | 47 ++++++++++++++++++++++++-----------------------
1 files changed, 24 insertions(+), 23 deletions(-)
---
diff --git a/engine/sapwood-pixmap.c b/engine/sapwood-pixmap.c
index 3bccb3b..85aee17 100644
--- a/engine/sapwood-pixmap.c
+++ b/engine/sapwood-pixmap.c
@@ -271,7 +271,7 @@ sapwood_pixmap_get_pixmap (SapwoodPixmap *self,
* @drawable: the #GdkDrawable to draw to
* @draw_x: the horizontal offset on @drawable in pixels
* @draw_y: the vertical offset on @drawable in pixels
- * @mask: a #GdkBitmap mask to paint @self's bitmask to and to use when the 1-bit transparency should be honored
+ * @mask: a #cairo_surface_t mask to paint @self's bitmask to and to use when the 1-bit transparency should be honored
* @mask_x: the horizontal offset on @mask in pixels
* @mask_y: the vertical offset on @mask in pixels
* @mask_required: FIXME
@@ -282,19 +282,18 @@ sapwood_pixmap_get_pixmap (SapwoodPixmap *self,
* Render the areas of @self specified by @rect to @drawable.
*/
static void
-sapwood_pixmap_render_rects_internal (SapwoodPixmap* self,
- cairo_t * cr,
- gint draw_x,
- gint draw_y,
- GdkBitmap *mask,
- gint mask_x,
- gint mask_y,
- gboolean mask_required,
- GdkRectangle *clip_rect,
- gint n_rect,
- SapwoodRect *rect)
+sapwood_pixmap_render_rects_internal (SapwoodPixmap * self,
+ cairo_t * cr,
+ gint draw_x,
+ gint draw_y,
+ cairo_surface_t* mask,
+ gint mask_x,
+ gint mask_y,
+ gboolean mask_required,
+ GdkRectangle * clip_rect,
+ gint n_rect,
+ SapwoodRect * rect)
{
- cairo_t * mask_cr = NULL;
gint xofs;
gint yofs;
gint n;
@@ -307,7 +306,7 @@ sapwood_pixmap_render_rects_internal (SapwoodPixmap* self,
if (mask)
{
- mask_cr = gdk_cairo_create (mask);
+ cairo_t* mask_cr = cairo_create (mask);
cairo_set_operator (mask_cr, CAIRO_OPERATOR_SOURCE);
cairo_translate (mask_cr, -xofs, -yofs);
@@ -334,6 +333,7 @@ sapwood_pixmap_render_rects_internal (SapwoodPixmap* self,
have_mask = TRUE;
}
}
+ cairo_destroy (mask_cr);
}
for (n = 0; n < n_rect; n++)
@@ -358,17 +358,21 @@ sapwood_pixmap_render_rects_internal (SapwoodPixmap* self,
gdk_cairo_rectangle (cr, &area);
cairo_clip (cr);
- if (mask_cr)
+ if (mask)
{
+#if 0
cairo_pattern_t* pattern;
cairo_matrix_t matrix;
cairo_matrix_init_identity (&matrix);
cairo_matrix_init_translate (&matrix, -xofs, -yofs);
- pattern = cairo_pattern_create_for_surface (cairo_get_target (mask_cr));
+ pattern = cairo_pattern_create_for_surface (mask);
cairo_pattern_set_matrix (pattern, &matrix);
cairo_mask (cr, pattern);
cairo_pattern_destroy (pattern);
+#else
+ cairo_mask_surface (cr, mask, xofs, yofs);
+#endif
}
else
{
@@ -378,11 +382,6 @@ sapwood_pixmap_render_rects_internal (SapwoodPixmap* self,
cairo_restore (cr);
}
}
-
- if (mask_cr)
- {
- cairo_destroy (mask_cr);
- }
}
static void
@@ -490,7 +489,9 @@ sapwood_pixmap_render_rects (SapwoodPixmap* self,
*/
if (mask_required || (width >= self->width && height >= self->height))
{
- sapwood_pixmap_render_rects_internal (self, cr, draw_x, draw_y, mask, mask_x, mask_y, mask_required, clip_rect, n_rect, rect);
+ cairo_surface_t* mask_surface = mask ? sapwood_create_surface (mask) : NULL;
+ sapwood_pixmap_render_rects_internal (self, cr, draw_x, draw_y, mask_surface, mask_x, mask_y, mask_required, clip_rect, n_rect, rect);
+ cairo_surface_destroy (mask_surface);
cairo_destroy (cr);
return;
}
@@ -523,7 +524,7 @@ sapwood_pixmap_render_rects (SapwoodPixmap* self,
}
tmp_cr = cairo_create (tmp);
- sapwood_pixmap_render_rects_internal (self, tmp_cr, 0, 0, tmp_mask, 0, 0, mask_required, NULL, n_rect, rect);
+ sapwood_pixmap_render_rects_internal (self, tmp_cr, 0, 0, mask_cr ? cairo_get_target (mask_cr) : NULL, 0, 0, mask_required, NULL, n_rect, rect);
/* finally, render downscaled at draw_x,draw_y */
if (clip_rect)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]