[sapwood] replace the GdkBitmap in sapwood_pixmap_render_rects_internal()



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]