mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-08 20:47:44 +00:00
43 lines
1.5 KiB
Diff
43 lines
1.5 KiB
Diff
From: Jonathan Kew <jkew@mozilla.com>
|
|
bug 715798 pt 2 - fall back to show_text_glyphs even at huge sizes if scaled_font_glyph_path didn't work. r=jrmuizel
|
|
|
|
diff --git a/gfx/cairo/cairo/src/cairo-gstate.c b/gfx/cairo/cairo/src/cairo-gstate.c
|
|
--- a/gfx/cairo/cairo/src/cairo-gstate.c
|
|
+++ b/gfx/cairo/cairo/src/cairo-gstate.c
|
|
@@ -2002,23 +2002,34 @@ cairo_status_t
|
|
cairo_path_fixed_t path;
|
|
|
|
_cairo_path_fixed_init (&path);
|
|
|
|
status = _cairo_scaled_font_glyph_path (gstate->scaled_font,
|
|
transformed_glyphs, num_glyphs,
|
|
&path);
|
|
|
|
- if (status == CAIRO_STATUS_SUCCESS) {
|
|
+ if (status == CAIRO_STATUS_SUCCESS && !_cairo_path_fixed_fill_is_empty (&path)) {
|
|
status = _cairo_surface_fill (gstate->target, op, pattern,
|
|
&path,
|
|
CAIRO_FILL_RULE_WINDING,
|
|
gstate->tolerance,
|
|
gstate->scaled_font->options.antialias,
|
|
_gstate_get_clip (gstate, &clip));
|
|
+ } else {
|
|
+ /* if _cairo_scaled_font_glyph_path() failed, maybe the font doesn't support
|
|
+ * returning paths, so try the _cairo_surface_show_text_glyphs() option
|
|
+ */
|
|
+ status = _cairo_surface_show_text_glyphs (gstate->target, op, pattern,
|
|
+ utf8, utf8_len,
|
|
+ transformed_glyphs, num_glyphs,
|
|
+ transformed_clusters, num_clusters,
|
|
+ cluster_flags,
|
|
+ gstate->scaled_font,
|
|
+ _gstate_get_clip (gstate, &clip));
|
|
}
|
|
|
|
_cairo_path_fixed_fini (&path);
|
|
}
|
|
|
|
_cairo_clip_fini (&clip);
|
|
|
|
CLEANUP_GLYPHS:
|