From 8351e4d6ec08831f2f2470631f0f5e7d9f3394c0 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Thu, 25 Aug 2011 03:45:54 +0200 Subject: harfbuzz: fix vertical advance Make sure to use vertical advance under the right conditions - vertical font selected, requested glyph is non-latin. --- libass/ass_font.c | 2 -- libass/ass_font.h | 2 ++ libass/ass_shaper.c | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libass/ass_font.c b/libass/ass_font.c index 169de8d..f047a49 100644 --- a/libass/ass_font.c +++ b/libass/ass_font.c @@ -34,8 +34,6 @@ #include "ass_utils.h" #include "ass_shaper.h" -#define VERTICAL_LOWER_BOUND 0x02f1 - /** * Select a good charmap, prefer Microsoft Unicode charmaps. * Otherwise, let FreeType decide. diff --git a/libass/ass_font.h b/libass/ass_font.h index 725a7c1..481a630 100644 --- a/libass/ass_font.h +++ b/libass/ass_font.h @@ -27,6 +27,8 @@ #include "ass.h" #include "ass_types.h" +#define VERTICAL_LOWER_BOUND 0x02f1 + #define ASS_FONT_MAX_FACES 10 #define DECO_UNDERLINE 1 #define DECO_STRIKETHROUGH 2 diff --git a/libass/ass_shaper.c b/libass/ass_shaper.c index 4eb99f7..0a1075d 100644 --- a/libass/ass_shaper.c +++ b/libass/ass_shaper.c @@ -64,6 +64,7 @@ struct ass_shaper { struct ass_shaper_metrics_data { Cache *metrics_cache; GlyphMetricsHashKey hash_key; + int vertical; }; struct ass_shaper_font_data { @@ -233,6 +234,9 @@ cached_h_advance(hb_font_t *font, void *font_data, hb_codepoint_t glyph, if (!metrics) return 0; + if (metrics_priv->vertical && glyph > VERTICAL_LOWER_BOUND) + return metrics->metrics.vertAdvance; + return metrics->metrics.horiAdvance; } @@ -361,6 +365,7 @@ static hb_font_t *get_hb_font(ASS_Shaper *shaper, GlyphInfo *info) struct ass_shaper_metrics_data *metrics = font->shaper_priv->metrics_data[info->face_index]; metrics->metrics_cache = shaper->metrics_cache; + metrics->vertical = info->font->desc.vertical; hb_font_funcs_t *funcs = hb_font_funcs_create(); font->shaper_priv->font_funcs[info->face_index] = funcs; -- cgit v1.2.3