diff options
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | pango/pango-engine.c | 18 | ||||
-rw-r--r-- | pango/pangocairo-font.c | 8 | ||||
-rw-r--r-- | pango/shape.c | 2 |
4 files changed, 37 insertions, 4 deletions
@@ -1,5 +1,18 @@ 2007-06-04 Behdad Esfahbod <behdad@gnome.org> + * pango/shape.c (pango_shape): Zero glyphs->num_glyphs before + calling into shape engine. + + * pango/pango-engine.c (fallback_engine_shape): Improve, to support + clusters and what not. + + * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info): + Use "pango_script_get_sample_language (PANGO_SCRIPT_LATIN)" instead + of hardcoding "en". + Handle cairo_scaled_font_extents() failure. + +2007-06-04 Behdad Esfahbod <behdad@gnome.org> + * === Released 1.17.2 === * configure.in: Version 1.17.2 diff --git a/pango/pango-engine.c b/pango/pango-engine.c index c8461892..a21e5d84 100644 --- a/pango/pango-engine.c +++ b/pango/pango-engine.c @@ -103,8 +103,9 @@ fallback_engine_shape (PangoEngineShape *engine, PangoGlyphString *glyphs) { int n_chars; - int i; const char *p; + int cluster = 0; + int i; n_chars = text ? g_utf8_strlen (text, length) : 0; @@ -113,8 +114,19 @@ fallback_engine_shape (PangoEngineShape *engine, p = text; for (i = 0; i < n_chars; i++) { + gunichar wc; + PangoGlyph glyph; PangoRectangle logical_rect; - PangoGlyph glyph = g_utf8_get_char (p) | PANGO_GLYPH_UNKNOWN_FLAG; + + wc = g_utf8_get_char (p); + + if (g_unichar_type (wc) != G_UNICODE_NON_SPACING_MARK) + cluster = p - text; + + if (pango_is_zero_width (wc)) + glyph = PANGO_GLYPH_EMPTY; + else + glyph = PANGO_GET_UNKNOWN_GLYPH (wc); pango_font_get_glyph_extents (analysis->font, glyph, NULL, &logical_rect); @@ -124,7 +136,7 @@ fallback_engine_shape (PangoEngineShape *engine, glyphs->glyphs[i].geometry.y_offset = 0; glyphs->glyphs[i].geometry.width = logical_rect.width; - glyphs->log_clusters[i] = p - text; + glyphs->log_clusters[i] = cluster; p = g_utf8_next_char (p); } diff --git a/pango/pangocairo-font.c b/pango/pangocairo-font.c index a8d011f2..2595c0ef 100644 --- a/pango/pangocairo-font.c +++ b/pango/pangocairo-font.c @@ -241,7 +241,7 @@ _pango_cairo_font_get_hex_box_info (PangoCairoFont *cfont) context = pango_cairo_font_map_create_context ((PangoCairoFontMap *) (fontmap)); pango_context_set_matrix (context, &pango_ctm); - pango_context_set_language (context, pango_language_from_string ("en")); + pango_context_set_language (context, pango_script_get_sample_language (PANGO_SCRIPT_LATIN)); pango_cairo_context_set_font_options (context, font_options); mini_font = pango_font_map_load_font (fontmap, context, desc); @@ -265,6 +265,12 @@ _pango_cairo_font_get_hex_box_info (PangoCairoFont *cfont) } cairo_scaled_font_extents (scaled_font, &font_extents); + if (font_extents.ascent + font_extents.descent <= 0) + { + font_extents.ascent = PANGO_UNKNOWN_GLYPH_HEIGHT; + font_extents.descent = 0; + } + pad = (font_extents.ascent + font_extents.descent) / 43; pad = MIN (pad, mini_size); diff --git a/pango/shape.c b/pango/shape.c index 8e535aca..96bcb672 100644 --- a/pango/shape.c +++ b/pango/shape.c @@ -46,6 +46,8 @@ pango_shape (const gchar *text, int i; int last_cluster; + glyphs->num_glyphs = 0; + if (G_LIKELY (PANGO_IS_ENGINE_SHAPE (analysis->shape_engine) && PANGO_IS_FONT (analysis->font))) { _pango_engine_shape_shape (analysis->shape_engine, analysis->font, |