diff options
-rw-r--r-- | libass/ass_font.c | 2 | ||||
-rw-r--r-- | libass/ass_font.h | 2 | ||||
-rw-r--r-- | 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; |