summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2011-08-25 03:45:54 +0200
committerGrigori Goronzy <greg@blackbox>2011-08-25 04:01:05 +0200
commit8351e4d6ec08831f2f2470631f0f5e7d9f3394c0 (patch)
tree9268fe459b4d715796df863d6facbcb1c426b1ac
parent5b0215abe427fe394da675dab1cc937ba6db350a (diff)
downloadlibass-8351e4d6ec08831f2f2470631f0f5e7d9f3394c0.tar.bz2
libass-8351e4d6ec08831f2f2470631f0f5e7d9f3394c0.tar.xz
harfbuzz: fix vertical advance
Make sure to use vertical advance under the right conditions - vertical font selected, requested glyph is non-latin.
-rw-r--r--libass/ass_font.c2
-rw-r--r--libass/ass_font.h2
-rw-r--r--libass/ass_shaper.c5
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;