summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Oshmyan <chortos@inbox.lv>2014-01-08 00:48:36 +0200
committerOleg Oshmyan <chortos@inbox.lv>2014-01-08 03:24:32 +0200
commita37e3b3eb43f360693ee278bf2991f829b496b25 (patch)
tree75b4b946d5692d3dcb6ad2ef0c8cbb9ae1a21d2c
parent654e60220d2ae2b6c98681dcce24cbb9e3716755 (diff)
downloadlibass-a37e3b3eb43f360693ee278bf2991f829b496b25.tar.bz2
libass-a37e3b3eb43f360693ee278bf2991f829b496b25.tar.xz
Distinguish cached glyphs with different hspacing when border_style == 3
hspacing affects opaque box borders.
-rw-r--r--libass/ass_cache_template.h2
-rw-r--r--libass/ass_render.c6
2 files changed, 8 insertions, 0 deletions
diff --git a/libass/ass_cache_template.h b/libass/ass_cache_template.h
index f9aab77..3d8185f 100644
--- a/libass/ass_cache_template.h
+++ b/libass/ass_cache_template.h
@@ -96,6 +96,7 @@ START(glyph, glyph_hash_key)
FTVECTOR(outline) // border width, 16.16
GENERIC(unsigned, flags) // glyph decoration flags
GENERIC(unsigned, border_style)
+ GENERIC(int, hspacing) // 16.16
END(GlyphHashKey)
START(glyph_metrics, glyph_metrics_hash_key)
@@ -114,6 +115,7 @@ START(drawing, drawing_hash_key)
GENERIC(int, pbo)
FTVECTOR(outline)
GENERIC(unsigned, border_style)
+ GENERIC(int, hspacing)
GENERIC(int, scale)
GENERIC(unsigned, hash)
STRING(text)
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 5d91635..25a33e5 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -1042,6 +1042,10 @@ fill_glyph_hash(ASS_Renderer *priv, OutlineHashKey *outline_key,
key->outline.x = double_to_d16(info->border_x);
key->outline.y = double_to_d16(info->border_y);
key->border_style = info->border_style;
+ // hpacing only matters for opaque box borders (see draw_opaque_box),
+ // so for normal borders, maximize cache utility by ignoring it
+ key->hspacing =
+ info->border_style == 3 ? double_to_d16(info->hspacing) : 0;
key->hash = info->drawing->hash;
key->text = info->drawing->text;
key->pbo = info->drawing->pbo;
@@ -1061,6 +1065,8 @@ fill_glyph_hash(ASS_Renderer *priv, OutlineHashKey *outline_key,
key->outline.y = double_to_d16(info->border_y);
key->flags = info->flags;
key->border_style = info->border_style;
+ key->hspacing =
+ info->border_style == 3 ? double_to_d16(info->hspacing) : 0;
}
}