Commit 79b43ecd authored by Felix Paul Kühne's avatar Felix Paul Kühne

freetype: allow on-the-fly changes of relative font size, background opacity,...

freetype: allow on-the-fly changes of relative font size, background opacity, background color, outline thickness and text color
parent 5e57d17b
...@@ -147,6 +147,7 @@ typedef uint32_t uni_char_t; ...@@ -147,6 +147,7 @@ typedef uint32_t uni_char_t;
*****************************************************************************/ *****************************************************************************/
static int Create ( vlc_object_t * ); static int Create ( vlc_object_t * );
static void Destroy( vlc_object_t * ); static void Destroy( vlc_object_t * );
static int OptionCallback( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *);
#define FONT_TEXT N_("Font") #define FONT_TEXT N_("Font")
#define MONOSPACE_FONT_TEXT N_("Monospace Font") #define MONOSPACE_FONT_TEXT N_("Monospace Font")
...@@ -2779,7 +2780,7 @@ static int Create( vlc_object_t *p_this ) ...@@ -2779,7 +2780,7 @@ static int Create( vlc_object_t *p_this )
char *psz_fontfamily = NULL; char *psz_fontfamily = NULL;
char *psz_monofontfile = NULL; char *psz_monofontfile = NULL;
char *psz_monofontfamily = NULL; char *psz_monofontfamily = NULL;
int i_error = 0, fontindex = 0, monofontindex = 0; int i_error = 0, fontindex = 0;
/* Allocate structure */ /* Allocate structure */
p_filter->p_sys = p_sys = malloc( sizeof(*p_sys) ); p_filter->p_sys = p_sys = malloc( sizeof(*p_sys) );
...@@ -2795,6 +2796,14 @@ static int Create( vlc_object_t *p_this ) ...@@ -2795,6 +2796,14 @@ static int Create( vlc_object_t *p_this )
var_Create( p_filter, "freetype-rel-fontsize", var_Create( p_filter, "freetype-rel-fontsize",
VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Create( p_filter, "freetype-background-opacity",
VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Create( p_filter, "freetype-background-color",
VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Create( p_filter, "freetype-outline-thickness",
VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Create( p_filter, "freetype-color",
VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
psz_fontfamily = var_InheritString( p_filter, "freetype-font" ); psz_fontfamily = var_InheritString( p_filter, "freetype-font" );
psz_monofontfamily = var_InheritString( p_filter, "freetype-monofont" ); psz_monofontfamily = var_InheritString( p_filter, "freetype-monofont" );
...@@ -2938,6 +2947,12 @@ static int Create( vlc_object_t *p_this ) ...@@ -2938,6 +2947,12 @@ static int Create( vlc_object_t *p_this )
LoadFontsFromAttachments( p_filter ); LoadFontsFromAttachments( p_filter );
var_AddCallback(p_this, "freetype-rel-fontsize", OptionCallback, p_this);
var_AddCallback(p_this, "freetype-background-opacity", OptionCallback, p_this);
var_AddCallback(p_this, "freetype-background-color", OptionCallback, p_this);
var_AddCallback(p_this, "freetype-outline-thickness", OptionCallback, p_this);
var_AddCallback(p_this, "freetype-color", OptionCallback, p_this);
#ifdef HAVE_STYLES #ifdef HAVE_STYLES
free( psz_fontfile ); free( psz_fontfile );
free( psz_monofontfile ); free( psz_monofontfile );
...@@ -2968,6 +2983,12 @@ static void Destroy( vlc_object_t *p_this ) ...@@ -2968,6 +2983,12 @@ static void Destroy( vlc_object_t *p_this )
filter_t *p_filter = (filter_t *)p_this; filter_t *p_filter = (filter_t *)p_this;
filter_sys_t *p_sys = p_filter->p_sys; filter_sys_t *p_sys = p_filter->p_sys;
var_DelCallback(p_this, "freetype-rel-fontsize", OptionCallback, p_this);
var_DelCallback(p_this, "freetype-background-opacity", OptionCallback, p_this);
var_DelCallback(p_this, "freetype-background-color", OptionCallback, p_this);
var_DelCallback(p_this, "freetype-outline-thickness", OptionCallback, p_this);
var_DelCallback(p_this, "freetype-color", OptionCallback, p_this);
if( p_sys->pp_font_attachments ) if( p_sys->pp_font_attachments )
{ {
for( int k = 0; k < p_sys->i_font_attachments; k++ ) for( int k = 0; k < p_sys->i_font_attachments; k++ )
...@@ -2994,4 +3015,34 @@ static void Destroy( vlc_object_t *p_this ) ...@@ -2994,4 +3015,34 @@ static void Destroy( vlc_object_t *p_this )
free( p_sys ); free( p_sys );
} }
static int OptionCallback( vlc_object_t *p_this, char const *psz_var,
vlc_value_t oldval, vlc_value_t newval, void *p_data)
{
VLC_UNUSED(oldval);
VLC_UNUSED(p_data);
filter_t *p_filter = (filter_t *)p_this;
filter_sys_t *p_sys = p_filter->p_sys;
if( !strcmp(psz_var, "freetype-rel-fontsize") )
msg_Dbg( p_this, "changed relative font size to %lli", newval.i_int);
else if( !strcmp(psz_var, "freetype-color") ) {
p_sys->i_font_color = newval.i_int;
p_sys->i_font_color = VLC_CLIP( p_sys->i_font_color, 0, 0xFFFFFF );
} else if( !strcmp(psz_var, "freetype-background-opacity") ) {
p_sys->i_background_opacity = newval.i_int;
msg_Dbg( p_filter, "changed background opacity to %lli", newval.i_int);
} else if( !strcmp(psz_var, "freetype-outline-thickness") ) {
p_sys->f_outline_thickness = newval.i_int / 100.;
p_sys->f_outline_thickness = VLC_CLIP( p_sys->f_outline_thickness, 0.0, 0.5 );
msg_Dbg( p_filter, "changed outline thickness to %lli", newval.i_int);
} else if( !strcmp(psz_var, "freetype-background-color") ) {
p_sys->i_background_color = newval.i_int;
p_sys->i_background_color = VLC_CLIP( p_sys->i_background_color, 0, 0xFFFFFF );
msg_Dbg( p_filter, "changed background color to %lli", newval.i_int);
} else
return VLC_EGENERIC;
return VLC_SUCCESS;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment