]> granicus.if.org Git - libass/commitdiff
harfbuzz: fix vertical advance
authorGrigori Goronzy <greg@blackbox>
Thu, 25 Aug 2011 01:45:54 +0000 (03:45 +0200)
committerGrigori Goronzy <greg@blackbox>
Thu, 25 Aug 2011 02:01:05 +0000 (04:01 +0200)
Make sure to use vertical advance under the right conditions -
vertical font selected, requested glyph is non-latin.

libass/ass_font.c
libass/ass_font.h
libass/ass_shaper.c

index 169de8d8874e34c0d3c341dc75ab3e9c1cb69908..f047a497f588837e8d8be2f85e542698c12a710b 100644 (file)
@@ -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.
index 725a7c148be8e0ecaa59e80880bfec79a4ea2eaa..481a63015f32627c362e58b7c1174751e6d66015 100644 (file)
@@ -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
index 4eb99f793d81dc9980a378d71d202b2aa0550cc1..0a1075d26cc41bce978f316b2b4f94c204a0683f 100644 (file)
@@ -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;