From nobody Mon Sep 17 00:00:00 2001 From: Jinghua Luo Date: Thu Jun 22 20:17:39 2006 +0800 Subject: [PATCH] freetype: Fake bitmap glyph on certain condition. --- src/cairo-ft-font.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) 495e64e4f1377a725541c385d2906da6b2ecb748 diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c index cd92182..683e465 100644 --- a/src/cairo-ft-font.c +++ b/src/cairo-ft-font.c @@ -1996,6 +1996,7 @@ _cairo_ft_scaled_glyph_init (void *abs FT_Glyph_Metrics *metrics; double x_factor, y_factor; cairo_bool_t vertical_layout = FALSE; + cairo_bool_t fake_bitmap_glyph = FALSE; cairo_status_t status = CAIRO_STATUS_SUCCESS; face = cairo_ft_scaled_font_lock_face (abstract_font); @@ -2009,6 +2010,16 @@ _cairo_ft_scaled_glyph_init (void *abs (info & CAIRO_SCALED_GLYPH_INFO_SURFACE) == 0) load_flags |= FT_LOAD_NO_BITMAP; + if (info & CAIRO_SCALED_GLYPH_INFO_SURFACE && + scaled_font->ft_options.base.hint_style != CAIRO_HINT_STYLE_NONE && + scaled_font->ft_options.base.antialias == CAIRO_ANTIALIAS_NONE) { + if ((scaled_font->ft_options.extra_flags & CAIRO_FT_OPTIONS_EMBOLDEN || + unscaled->have_shape) && unscaled->y_scale < 18) { + fake_bitmap_glyph = TRUE; + load_flags |= FT_LOAD_IGNORE_TRANSFORM; + } + } + /* * Don't pass FT_LOAD_VERTICAL_LAYOUT to FT_Load_Glyph here as * suggested by freetype people. @@ -2029,6 +2040,17 @@ _cairo_ft_scaled_glyph_init (void *abs glyph = face->glyph; + if (fake_bitmap_glyph && + glyph->format == FT_GLYPH_FORMAT_OUTLINE && + glyph->outline.n_points != 0) { + error = FT_Render_Glyph (glyph, FT_RENDER_MODE_MONO); + + if (error) { + status = CAIRO_STATUS_NO_MEMORY; + goto FAIL; + } + } + #if HAVE_FT_GLYPHSLOT_EMBOLDEN /* * embolden glyphs if requested -- 1.3.1