summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrcombs <rcombs@rcombs.me>2022-11-11 15:56:14 -0600
committerrcombs <rcombs@rcombs.me>2022-11-15 21:14:37 -0600
commitdc66f4ba377d9a1da86349633f3bd89b0ebd7555 (patch)
treea7a767c712666ad2fa33d89a7358d737008c4af3
parentdb2f527f2bc5976a439c369b219cc0f31f80d354 (diff)
downloadlibass-dc66f4ba377d9a1da86349633f3bd89b0ebd7555.tar.bz2
libass-dc66f4ba377d9a1da86349633f3bd89b0ebd7555.tar.xz
ass_parse: take RenderContext in update_font()
-rw-r--r--libass/ass_parse.c19
-rw-r--r--libass/ass_parse.h4
-rw-r--r--libass/ass_render.c2
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;