[PATCH] gl: Fix creation of the source operand for text rendering

Martin Robinson <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
Subject: [PATCH] gl: Fix creation of the source operand for text rendering

Support both cairo_pattern_t and cairo_surface_t arguments to
_render_glyphs. The latter is for rendering directly via the
traps compositor and the former is for rendering that happens
through render_glyphs_via_mask.
---
 src/cairo-gl-glyphs.c           |   36 +++++++++++++++++++++---------------
 src/cairo-gl-private.h          |    6 ++++++
 src/cairo-gl-spans-compositor.c |    6 ------
 src/cairo-gl-traps-compositor.c |    6 ------
 4 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/src/cairo-gl-glyphs.c b/src/cairo-gl-glyphs.c
index ee5c543..2324922 100644
--- a/src/cairo-gl-glyphs.c
+++ b/src/cairo-gl-glyphs.c
@@ -214,12 +214,13 @@ _cairo_gl_font_fini (cairo_scaled_font_private_t *_priv,
 }
 
 static cairo_status_t
-render_glyphs (cairo_gl_surface_t	*dst,
+render_glyphs (cairo_gl_surface_t *dst,
 	       int dst_x, int dst_y,
-	       cairo_operator_t	 op,
-	       const cairo_pattern_t	*source,
+	       cairo_operator_t op,
+	       const cairo_pattern_t *source_pattern,
+	       const cairo_surface_t *source_surface,
 	       cairo_composite_glyphs_info_t *info,
-	       cairo_bool_t		*has_component_alpha)
+	       cairo_bool_t *has_component_alpha)
 {
     cairo_format_t last_format = CAIRO_FORMAT_INVALID;
     cairo_gl_glyph_cache_t *cache = NULL;
@@ -238,15 +239,20 @@ render_glyphs (cairo_gl_surface_t	*dst,
     if (unlikely (status))
 	goto FINISH;
 
-    status = _cairo_gl_composite_set_source (&setup, source,
-                                             info->extents.x,
-					     info->extents.y,
-                                             dst_x, dst_y,
-                                             info->extents.width,
-                                             info->extents.height);
-    if (unlikely (status))
-	goto FINISH;
-
+    if (source_pattern) {
+	status = _cairo_gl_composite_set_source (&setup,
+						 source_pattern,
+						 info->extents.x,
+						 info->extents.y,
+						 dst_x, dst_y,
+						 info->extents.width,
+						 info->extents.height);
+	if (unlikely (status))
+	    goto FINISH;
+    } else {
+	_cairo_gl_composite_set_source_operand (&setup,
+	    &((cairo_gl_source_t *) source_surface)->operand);
+    }
 
     //_cairo_gl_composite_set_clip_region (&setup, _cairo_clip_get_region (extents->clip));
 
@@ -368,7 +374,7 @@ render_glyphs_via_mask (cairo_gl_surface_t	*dst,
 
     status = render_glyphs ((cairo_gl_surface_t *) mask, 0, 0,
 			    CAIRO_OPERATOR_ADD,
-			    &_cairo_pattern_white.base,
+			    &_cairo_pattern_white.base, NULL,
 			    info, &has_component_alpha);
     if (likely (status == CAIRO_STATUS_SUCCESS)) {
 	/* XXX composite */
@@ -449,7 +455,7 @@ _cairo_gl_composite_glyphs (void			*_dst,
 	return render_glyphs_via_mask (dst, op, _src, info);
     } else {
 	return render_glyphs (dst, dst_x, dst_y,
-			      op, _src, info,
+			      op, NULL, _src, info,
 			      &has_component_alpha);
     }
 }
diff --git a/src/cairo-gl-private.h b/src/cairo-gl-private.h
index cd7c8ae..758f33e 100644
--- a/src/cairo-gl-private.h
+++ b/src/cairo-gl-private.h
@@ -333,6 +333,12 @@ typedef struct _cairo_gl_font {
     cairo_list_t			link;
 } cairo_gl_font_t;
 
+typedef struct cairo_gl_source {
+    cairo_surface_t base;
+
+    cairo_gl_operand_t operand;
+} cairo_gl_source_t;
+
 cairo_private extern const cairo_surface_backend_t _cairo_gl_surface_backend;
 
 static cairo_always_inline GLenum
diff --git a/src/cairo-gl-spans-compositor.c b/src/cairo-gl-spans-compositor.c
index 3e52f28..ba89dbd 100644
--- a/src/cairo-gl-spans-compositor.c
+++ b/src/cairo-gl-spans-compositor.c
@@ -279,12 +279,6 @@ FAIL:
     return status;
 }
 
-typedef struct cairo_gl_source {
-    cairo_surface_t base;
-
-    cairo_gl_operand_t operand;
-} cairo_gl_source_t;
-
 static cairo_status_t
 _cairo_gl_source_finish (void *abstract_surface)
 {
diff --git a/src/cairo-gl-traps-compositor.c b/src/cairo-gl-traps-compositor.c
index afc74d0..d999959 100644
--- a/src/cairo-gl-traps-compositor.c
+++ b/src/cairo-gl-traps-compositor.c
@@ -150,12 +150,6 @@ FAIL:
     return status;
 }
 
-typedef struct cairo_gl_source {
-    cairo_surface_t base;
-
-    cairo_gl_operand_t operand;
-} cairo_gl_source_t;
-
 static cairo_status_t
 _cairo_gl_source_finish (void *abstract_surface)
 {
-- 
1.7.5.4

--
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.