summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2009-07-25 03:59:58 +0200
committerGrigori Goronzy <greg@blackbox>2009-07-25 14:56:16 +0200
commit311ec23031e257a8edde5153b09a5d0c2d6b0f6b (patch)
tree31b8d7c0dab41fc8b2b8385efb14754c14d16e09
parenta9f204bdde79bdacb63672482f5666b1e64f4479 (diff)
downloadlibass-311ec23031e257a8edde5153b09a5d0c2d6b0f6b.tar.bz2
libass-311ec23031e257a8edde5153b09a5d0c2d6b0f6b.tar.xz
Remove shift vector in ass_render_event
The shift is not calculated when fetching a glyph anymore. Instead, it is calculated right before rasterizing a glyph. Remove the shift vector and make get_outline_glyph, the glyph cache and ass_font_set_transform work without supplying a shift vector.
-rw-r--r--libass/ass_cache_template.h1
-rw-r--r--libass/ass_font.c6
-rw-r--r--libass/ass_font.h2
-rw-r--r--libass/ass_render.c12
4 files changed, 8 insertions, 13 deletions
diff --git a/libass/ass_cache_template.h b/libass/ass_cache_template.h
index eae9807..d7eedaf 100644
--- a/libass/ass_cache_template.h
+++ b/libass/ass_cache_template.h
@@ -90,7 +90,6 @@ START(glyph, glyph_hash_key_s)
GENERIC(int, italic)
GENERIC(unsigned, scale_x) // 16.16
GENERIC(unsigned, scale_y) // 16.16
- FTVECTOR(advance) // subpixel shift vector
FTVECTOR(outline) // border width, 16.16
GENERIC(unsigned, drawing_hash) // hashcode of a drawing
GENERIC(unsigned, flags) // glyph decoration flags
diff --git a/libass/ass_font.c b/libass/ass_font.c
index 9518b70..3502ef7 100644
--- a/libass/ass_font.c
+++ b/libass/ass_font.c
@@ -208,8 +208,10 @@ void ass_font_set_transform(ass_font_t *font, double scale_x,
{
font->scale_x = scale_x;
font->scale_y = scale_y;
- font->v.x = v->x;
- font->v.y = v->y;
+ if (v) {
+ font->v.x = v->x;
+ font->v.y = v->y;
+ }
update_transform(font);
}
diff --git a/libass/ass_font.h b/libass/ass_font.h
index 8fe4c1e..ecba153 100644
--- a/libass/ass_font.h
+++ b/libass/ass_font.h
@@ -54,7 +54,7 @@ ass_font_t *ass_font_new(void *font_cache, ass_library_t *library,
FT_Library ftlibrary, void *fc_priv,
ass_font_desc_t *desc);
void ass_font_set_transform(ass_font_t *font, double scale_x,
- double scale_y, FT_Vector * v);
+ double scale_y, FT_Vector *v);
void ass_font_set_size(ass_font_t *font, double size);
void ass_font_get_asc_desc(ass_font_t *font, uint32_t ch, int *asc,
int *desc);
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 94556f9..212a158 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -2131,7 +2131,6 @@ static void stroke_outline_glyph(ass_renderer_t *render_priv,
* \brief Get normal and outline (border) glyphs
* \param symbol ucs4 char
* \param info out: struct filled with extracted data
- * \param advance subpixel shift vector used for cache lookup
* Tries to get both glyphs from cache.
* If they can't be found, gets a glyph from font face, generates outline with FT_Stroker,
* and add them to cache.
@@ -2139,8 +2138,7 @@ static void stroke_outline_glyph(ass_renderer_t *render_priv,
*/
static void
get_outline_glyph(ass_renderer_t *render_priv, int symbol,
- glyph_info_t *info, FT_Vector *advance,
- ass_drawing_t *drawing)
+ glyph_info_t *info, ass_drawing_t *drawing)
{
glyph_hash_val_t *val;
glyph_hash_key_t key;
@@ -2149,7 +2147,6 @@ get_outline_glyph(ass_renderer_t *render_priv, int symbol,
if (drawing->hash) {
key.scale_x = double_to_d16(render_priv->state.scale_x);
key.scale_y = double_to_d16(render_priv->state.scale_y);
- key.advance = *advance;
key.outline.x = render_priv->state.border_x * 0xFFFF;
key.outline.y = render_priv->state.border_y * 0xFFFF;
key.drawing_hash = drawing->hash;
@@ -2161,7 +2158,6 @@ get_outline_glyph(ass_renderer_t *render_priv, int symbol,
key.italic = render_priv->state.italic;
key.scale_x = double_to_d16(render_priv->state.scale_x);
key.scale_y = double_to_d16(render_priv->state.scale_y);
- key.advance = *advance;
key.outline.x = render_priv->state.border_x * 0xFFFF;
key.outline.y = render_priv->state.border_y * 0xFFFF;
key.flags = render_priv->state.flags;
@@ -2705,7 +2701,6 @@ ass_render_event(ass_renderer_t *render_priv, ass_event_t *event,
unsigned code;
double_bbox_t bbox;
int i, j;
- FT_Vector shift = { .x = 0, .y = 0};
int MarginL, MarginR, MarginV;
int last_break;
int alignment, halign, valign;
@@ -2784,11 +2779,10 @@ ass_render_event(ass_renderer_t *render_priv, ass_event_t *event,
ass_font_set_transform(render_priv->state.font,
render_priv->state.scale_x *
render_priv->font_scale_x,
- render_priv->state.scale_y, &shift);
+ render_priv->state.scale_y, NULL);
get_outline_glyph(render_priv, code,
- text_info->glyphs + text_info->length, &shift,
- drawing);
+ text_info->glyphs + text_info->length, drawing);
text_info->glyphs[text_info->length].pos.x = pen.x;
text_info->glyphs[text_info->length].pos.y = pen.y;