summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2018-03-08 07:57:31 +0300
committerDr.Smile <vabnick@gmail.com>2019-05-19 20:18:51 +0300
commitea7cb5f75920a16c4101a23c47fb46122caf85d8 (patch)
tree2c5e55c865e5590fdc1f14204b80de92c0dc63ae
parentfcf1634387614439ceac1590c3861467f2a21c86 (diff)
downloadlibass-ea7cb5f75920a16c4101a23c47fb46122caf85d8.tar.bz2
libass-ea7cb5f75920a16c4101a23c47fb46122caf85d8.tar.xz
Eliminate advance.y from drawings and glyphs
Drawings always have advance.y = 0 and FreeType guarantees that for horizontal writing.
-rw-r--r--libass/ass_cache.h2
-rw-r--r--libass/ass_drawing.c2
-rw-r--r--libass/ass_drawing.h2
-rw-r--r--libass/ass_render.c20
4 files changed, 11 insertions, 15 deletions
diff --git a/libass/ass_cache.h b/libass/ass_cache.h
index 278eae4..6c07370 100644
--- a/libass/ass_cache.h
+++ b/libass/ass_cache.h
@@ -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;
diff --git a/libass/ass_drawing.c b/libass/ass_drawing.c
index 01547d8..c0ea548 100644
--- a/libass/ass_drawing.c
+++ b/libass/ass_drawing.c
@@ -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);
diff --git a/libass/ass_drawing.h b/libass/ass_drawing.h
index 5fef7e0..2b08e77 100644
--- a/libass/ass_drawing.h
+++ b/libass/ass_drawing.h
@@ -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;
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 1f9bc81..5648aff 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -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;