[Bug 891457] uneven emulated Bold/Slant for subsetted large fonts

bugzilla at redhat.com bugzilla at redhat.com
Sun Jan 13 02:57:19 UTC 2013


Product: Fedora
https://bugzilla.redhat.com/show_bug.cgi?id=891457

--- Comment #13 from Hin-Tak Leung <htl10 at users.sourceforge.net> ---
git bisect'ed, and found the first appearance of the "uneven" look is this:

---------
From: Adrian Johnson <ajohnson at redneon.com>
Date: Mon, 22 Nov 2010 22:46:54 +1030
Subject: [PATCH] Use fallback font for synthetic fonts

If the font has been synthesized we can't use the native subsetters as
the outlines won't be the same. Instead force the use of the fallback
subsetters so the synthesized outlines will used to generate the font.
---------
(this was branched off 1.10.0 and leading onto 1.11.2 then onto 1.12.x).

I also realized that the initial description of the problem was wrong: the
problem is that new feature of emulated bold (and slant) for large fonts
somehow does not work correctly on 32-bit cairo; before that commit, request
for bold style for a typeface which does not provide that style was silently
dropped, and substituted with the regular style. With that commit, emulated
bold is provided by freetype but somehow only works for 64-bit platforms.

The smallest change (which basically partially revert the above commit) is
this: 

--- a/src/cairo-truetype-subset.c
+++ b/src/cairo-truetype-subset.c
@@ -159,6 +159,6 @@ _cairo_truetype_font_create (cairo_scaled_font_subset_t 
*scaled_font_subset,
      *   return CAIRO_INT_STATUS_UNSUPPORTED;
      */

     /* We need to use a fallback font generated from the synthesized outlines.
*/
-    if (backend->is_synthetic && backend->is_synthetic
(scaled_font_subset->scaled_font))
+    if (0 && (backend->is_synthetic && backend->is_synthetic
(scaled_font_subset->scaled_font)))
        return CAIRO_INT_STATUS_UNSUPPORTED;


The same effect can be achieved by:

--- a/src/cairo-ft-font.c
+++ b/src/cairo-ft-font.c
@@ -2172,7 +2172,7 @@ _cairo_ft_scaled_glyph_init (void                
*abstract_font,
      * synthesize glyphs if requested
      */
 #if HAVE_FT_GLYPHSLOT_EMBOLDEN
-    if (scaled_font->ft_options.synth_flags & CAIRO_FT_SYNTHESIZE_BOLD)
+    if (0 && (scaled_font->ft_options.synth_flags & CAIRO_FT_SYNTHESIZE_BOLD))
        FT_GlyphSlot_Embolden (glyph);
 #endif

Anyway, it almost appears as if FT_GlyphSlot_Embolden() does not work correctly
for 32-bit platform, which is wierd, since freetype is much more well-tested on
32-bit platforms than 64-bit; so my current thought is that something leading
up to FT_GlyphSlot_Embolden (glyph) or some post-processing after is wrong.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
Unsubscribe from this bug https://bugzilla.redhat.com/token.cgi?t=hEY5mv9jge&a=cc_unsubscribe


More information about the fonts-bugs mailing list