]> granicus.if.org Git - libass/commitdiff
Eliminate advance.y from drawings and glyphs
authorDr.Smile <vabnick@gmail.com>
Thu, 8 Mar 2018 04:57:31 +0000 (07:57 +0300)
committerDr.Smile <vabnick@gmail.com>
Sun, 19 May 2019 17:18:51 +0000 (20:18 +0300)
Drawings always have advance.y = 0 and
FreeType guarantees that for horizontal writing.

libass/ass_cache.h
libass/ass_drawing.c
libass/ass_drawing.h
libass/ass_render.c

index 278eae40c4d4de6caf43a95407f134b7d9c5bea7..6c07370cf8827a3187af1ecf914bc111a0dc0e54 100644 (file)
@@ -46,7 +46,7 @@ typedef struct {
     ASS_Outline outline;
     ASS_Outline border[2];
     ASS_Rect bbox_scaled;       // bbox after scaling, but before rotation
-    ASS_Vector advance;         // 26.6, advance distance to the next outline in line
+    int advance;                // 26.6, advance distance to the next outline in line
     int asc, desc;              // ascender/descender
 } OutlineHashValue;
 
index 01547d8636440f22017efe92b9e0e3199e235dd7..c0ea5487d0bf76291e88b25de951a7b49214792f 100644 (file)
@@ -59,7 +59,7 @@ static void drawing_finish(ASS_Drawing *drawing, bool raw_mode)
     if (raw_mode)
         return;
 
-    drawing->advance.x = bbox.x_max - bbox.x_min;
+    drawing->advance = bbox.x_max - bbox.x_min;
 
     double pbo = drawing->pbo / (1 << (drawing->scale - 1));
     drawing->desc = double_to_d6(pbo * drawing->scale_y);
index 5fef7e0fe62643e0c0b984e8370652df23d78b76..2b08e77c87be6ed2b4ca1407e918f874857aaf7b 100644 (file)
@@ -50,7 +50,7 @@ typedef struct {
     int asc;             // ascender
     int desc;            // descender
     ASS_Outline outline; // target outline
-    ASS_Vector advance;  // advance (from cbox)
+    int advance;         // advance (from cbox)
 
     // private
     ASS_Library *library;
index 1f9bc813bc465aadca6fbd3f2fe931f57af079c6..5648aff81cf2afaaa954ef6f7cd78ead0fc80666 100644 (file)
@@ -914,9 +914,8 @@ static void free_render_context(ASS_Renderer *render_priv)
  */
 static void draw_opaque_box(ASS_Renderer *render_priv, GlyphInfo *info,
                             int asc, int desc, ASS_Outline *ol,
-                            ASS_Vector advance, int sx, int sy)
+                            int adv, int sx, int sy)
 {
-    int adv = advance.x;
     double scale_y = info->orig_scale_y;
     double scale_x = info->orig_scale_x;
 
@@ -1037,8 +1036,7 @@ get_outline_glyph(ASS_Renderer *priv, GlyphInfo *info)
                 ass_cache_dec_ref(val);
                 return;
             }
-            val->advance.x = drawing->advance.x;
-            val->advance.y = drawing->advance.y;
+            val->advance = drawing->advance;
             val->asc = drawing->asc;
             val->desc = drawing->desc;
         } else {
@@ -1056,10 +1054,8 @@ get_outline_glyph(ASS_Renderer *priv, GlyphInfo *info)
                     ass_cache_dec_ref(val);
                     return;
                 }
-                if (priv->settings.shaper == ASS_SHAPING_SIMPLE) {
-                    val->advance.x = d16_to_d6(glyph->advance.x);
-                    val->advance.y = d16_to_d6(glyph->advance.y);
-                }
+                if (priv->settings.shaper == ASS_SHAPING_SIMPLE)
+                    val->advance = d16_to_d6(glyph->advance.x);
                 FT_Done_Glyph(glyph);
                 ass_font_get_asc_desc(info->font, info->symbol,
                                       &val->asc, &val->desc);
@@ -1072,11 +1068,11 @@ get_outline_glyph(ASS_Renderer *priv, GlyphInfo *info)
         outline_get_cbox(&val->outline, &val->bbox_scaled);
 
         if (info->border_style == 3) {
-            ASS_Vector advance;
+            int advance;
             if (priv->settings.shaper == ASS_SHAPING_SIMPLE || info->drawing)
                 advance = val->advance;
             else
-                advance = info->advance;
+                advance = info->advance.x;
 
             draw_opaque_box(priv, info, val->asc, val->desc, &val->border[0], advance,
                             double_to_d6(info->border_x * priv->border_scale),
@@ -1112,8 +1108,8 @@ get_outline_glyph(ASS_Renderer *priv, GlyphInfo *info)
     info->border[1] = &val->border[1];
     info->bbox = val->bbox_scaled;
     if (info->drawing || priv->settings.shaper == ASS_SHAPING_SIMPLE) {
-        info->cluster_advance.x = info->advance.x = val->advance.x;
-        info->cluster_advance.y = info->advance.y = val->advance.y;
+        info->cluster_advance.x = info->advance.x = val->advance;
+        info->cluster_advance.y = info->advance.y = 0;
     }
     info->asc = val->asc;
     info->desc = val->desc;