summaryrefslogtreecommitdiffstats
path: root/libass/ass_render.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-10-17 01:55:16 +0200
committerwm4 <wm4@nowhere>2014-10-17 02:05:40 +0200
commit210d3ea34272330c446d2b3f59e87e633b3a7fb9 (patch)
tree83fe648bcb29d0385679fb47bc2351881c906122 /libass/ass_render.c
parent1b8e673438793b6ccfa3d386a34e7955dad53f57 (diff)
downloadlibass-210d3ea34272330c446d2b3f59e87e633b3a7fb9.tar.bz2
libass-210d3ea34272330c446d2b3f59e87e633b3a7fb9.tar.xz
Provide slightly more fine-grained control over style overrides
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r--libass/ass_render.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 0cec412..8d942f6 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -773,15 +773,23 @@ static ASS_Style *handle_selective_style_overrides(ASS_Renderer *render_priv,
ASS_Style *script = render_priv->track->styles +
render_priv->state.event->Style;
ASS_Style *new = &render_priv->state.override_style_temp_storage;
- int override = !event_is_positioned(render_priv->state.event->Text);
+ int explicit = event_is_positioned(render_priv->state.event->Text);
+ int requested = render_priv->settings.selective_style_overrides;
double scale;
if (!rstyle)
rstyle = script;
render_priv->state.style = script;
+ render_priv->state.overrides = ASS_OVERRIDE_BIT_FONT_SIZE; // odd default
- if (!override || !render_priv->settings.selective_style_overrides)
+ if (explicit && (requested & ASS_OVERRIDE_BIT_FONT_SIZE))
+ render_priv->state.overrides &= ~(unsigned)ASS_OVERRIDE_BIT_FONT_SIZE;
+
+ if (!explicit && (requested & ASS_OVERRIDE_BIT_STYLE))
+ render_priv->state.overrides |= ASS_OVERRIDE_BIT_STYLE;
+
+ if (!(render_priv->state.overrides & ASS_OVERRIDE_BIT_STYLE))
return rstyle;
// Create a new style that contains a mix of the original style and
@@ -834,9 +842,11 @@ static void init_font_scale(ASS_Renderer *render_priv)
if (!settings_priv->storage_height)
render_priv->blur_scale = render_priv->border_scale;
- render_priv->font_scale *= settings_priv->font_size_coeff;
- render_priv->border_scale *= settings_priv->font_size_coeff;
- render_priv->blur_scale *= settings_priv->font_size_coeff;
+ if (render_priv->state.overrides & ASS_OVERRIDE_BIT_FONT_SIZE) {
+ render_priv->font_scale *= settings_priv->font_size_coeff;
+ render_priv->border_scale *= settings_priv->font_size_coeff;
+ render_priv->blur_scale *= settings_priv->font_size_coeff;
+ }
}
/**