From dc66f4ba377d9a1da86349633f3bd89b0ebd7555 Mon Sep 17 00:00:00 2001 From: rcombs Date: Fri, 11 Nov 2022 15:56:14 -0600 Subject: ass_parse: take RenderContext in update_font() --- libass/ass_parse.c | 19 ++++++++++--------- libass/ass_parse.h | 4 +++- libass/ass_render.c | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/libass/ass_parse.c b/libass/ass_parse.c index 78f2fcd..1714b12 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -80,12 +80,12 @@ static inline int mystrcmp(char **p, const char *sample) /** * \brief Change current font, using setting from render_priv->state. */ -void ass_update_font(ASS_Renderer *render_priv) +void ass_update_font(RenderContext *state) { unsigned val; ASS_FontDesc desc; - desc.family = render_priv->state.family; + desc.family = state->family; if (!desc.family.str) return; if (desc.family.len && desc.family.str[0] == '@') { @@ -96,7 +96,7 @@ void ass_update_font(ASS_Renderer *render_priv) desc.vertical = 0; } - val = render_priv->state.bold; + val = state->bold; // 0 = normal, 1 = bold, >1 = exact weight if (val == 1 || val == -1) val = 700; // bold @@ -104,15 +104,15 @@ void ass_update_font(ASS_Renderer *render_priv) val = 400; // normal desc.bold = val; - val = render_priv->state.italic; + val = state->italic; if (val == 1) val = 100; // italic else if (val <= 0) val = 0; // normal desc.italic = val; - ass_cache_dec_ref(render_priv->state.font); - render_priv->state.font = ass_font_new(render_priv, &desc); + ass_cache_dec_ref(state->font); + state->font = ass_font_new(state->renderer, &desc); } /** @@ -283,6 +283,7 @@ static ASS_Style *lookup_style_strict(ASS_Track *track, char *name, size_t len) char *ass_parse_tags(ASS_Renderer *render_priv, char *p, char *end, double pwr, bool nested) { + RenderContext *state = &render_priv->state; for (char *q; p < end; p = q) { while (*p != '\\' && p != end) ++p; @@ -560,7 +561,7 @@ char *ass_parse_tags(ASS_Renderer *render_priv, char *p, char *end, double pwr, render_priv->state.family.str = render_priv->state.style->FontName; render_priv->state.family.len = strlen(render_priv->state.style->FontName); } - ass_update_font(render_priv); + ass_update_font(state); } else if (tag("alpha")) { int i; if (nargs) { @@ -824,13 +825,13 @@ char *ass_parse_tags(ASS_Renderer *render_priv, char *p, char *end, double pwr, if (!nargs || !(val == 0 || val == 1 || val >= 100)) val = render_priv->state.style->Bold; render_priv->state.bold = val; - ass_update_font(render_priv); + ass_update_font(state); } else if (tag("i")) { int32_t val = argtoi32(*args); if (!nargs || !(val == 0 || val == 1)) val = render_priv->state.style->Italic; render_priv->state.italic = val; - ass_update_font(render_priv); + ass_update_font(state); } else if (tag("kt")) { // v4++ double val = 0; diff --git a/libass/ass_parse.h b/libass/ass_parse.h index c40546b..a618486 100644 --- a/libass/ass_parse.h +++ b/libass/ass_parse.h @@ -19,6 +19,8 @@ #ifndef LIBASS_PARSE_H #define LIBASS_PARSE_H +#include "ass_render.h" + #define BLUR_MAX_RADIUS 100.0 #define _r(c) ((c) >> 24) @@ -26,7 +28,7 @@ #define _b(c) (((c) >> 8) & 0xFF) #define _a(c) ((c) & 0xFF) -void ass_update_font(ASS_Renderer *render_priv); +void ass_update_font(RenderContext *state); void ass_apply_transition_effects(ASS_Renderer *render_priv, ASS_Event *event); void ass_process_karaoke_effects(ASS_Renderer *render_priv); unsigned ass_get_next_char(ASS_Renderer *render_priv, char **str); diff --git a/libass/ass_render.c b/libass/ass_render.c index d7e6d6b..83e283d 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1052,7 +1052,7 @@ void ass_reset_render_context(ASS_Renderer *render_priv, ASS_Style *style) render_priv->state.treat_family_as_pattern = style->treat_fontname_as_pattern; render_priv->state.bold = style->Bold; render_priv->state.italic = style->Italic; - ass_update_font(render_priv); + ass_update_font(&render_priv->state); render_priv->state.border_style = style->BorderStyle; render_priv->state.border_x = style->Outline; -- cgit v1.2.3