[cairo-commit] src/cairo-surface.c

Behdad Esfahbod behdad at kemper.freedesktop.org
Mon Dec 18 02:36:26 UTC 2017


 src/cairo-surface.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

New commits:
commit 903b0de539844c144c63ea57c30e84a23360c290
Author: Matthias Clasen <mclasen at redhat.com>
Date:   Sun Dec 17 21:24:53 2017 -0500

    Fix a logic error in color glyph compositing
    
    When a color glyph is completely clipped away, we
    get the non-zero status 'nothing to do'. In that case,
    we must not exit early, since there might still be work
    to do for the other color glyphs.
    
    This bug was showing up as color glyphs stopping to render
    in GTK+ entries that are scrolled to the right, and also
    as color glyphs not rendering inside the selection sometimes.
    
    See https://bugzilla.gnome.org/show_bug.cgi?id=790255 and
    https://bugzilla.gnome.org/show_bug.cgi?id=788071.

diff --git a/src/cairo-surface.c b/src/cairo-surface.c
index 961894a1..18f63df3 100644
--- a/src/cairo-surface.c
+++ b/src/cairo-surface.c
@@ -2742,7 +2742,7 @@ composite_color_glyphs (cairo_surface_t             *surface,
 
                 status = composite_one_color_glyph (surface, op, source, clip,
                                                     &glyphs[gp], scaled_glyph);
-                if (unlikely (status))
+                if (unlikely (status && status != CAIRO_INT_STATUS_NOTHING_TO_DO))
                     goto UNLOCK;
             }
 
@@ -2776,7 +2776,7 @@ composite_color_glyphs (cairo_surface_t             *surface,
 
            status = composite_one_color_glyph (surface, op, source, clip,
                                                &glyphs[glyph_pos], scaled_glyph);
-           if (unlikely (status))
+           if (unlikely (status && status != CAIRO_INT_STATUS_NOTHING_TO_DO))
                goto UNLOCK;
         }
 
@@ -2854,7 +2854,7 @@ _cairo_surface_show_text_glyphs (cairo_surface_t	    *surface,
                                          scaled_font,
                                          clip);
 
-        if (unlikely (status))
+        if (unlikely (status && status != CAIRO_INT_STATUS_NOTHING_TO_DO))
             goto DONE;
 
         if (num_glyphs == 0)


More information about the cairo-commit mailing list