diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-06-04 13:42:47 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-06-04 13:42:47 +0200 |
commit | 71b279783975e3542e172e23b37583583cb2482b (patch) | |
tree | 3fd004ba6ddb15939a669bfddb18e824300c4342 | |
parent | 5a7a427e189eb15ca761eb7d3c8d22bad67e233f (diff) | |
download | gtk-vlc-player-71b279783975e3542e172e23b37583583cb2482b.tar.gz |
load default interactive format font and colors from config file and also save them
* pango attributes cannot be "cached" anymore and must be recreated every time the interactive format is configured
-rw-r--r-- | lib/gtk-experiment-widgets/gtk-experiment-transcript-formats.c | 67 | ||||
-rw-r--r-- | lib/gtk-experiment-widgets/gtk-experiment-transcript.c | 11 | ||||
-rw-r--r-- | lib/gtk-experiment-widgets/gtk-experiment-transcript.h | 8 | ||||
-rw-r--r-- | src/main.c | 40 |
4 files changed, 83 insertions, 43 deletions
diff --git a/lib/gtk-experiment-widgets/gtk-experiment-transcript-formats.c b/lib/gtk-experiment-widgets/gtk-experiment-transcript-formats.c index 3898e30..d5b2f5e 100644 --- a/lib/gtk-experiment-widgets/gtk-experiment-transcript-formats.c +++ b/lib/gtk-experiment-widgets/gtk-experiment-transcript-formats.c @@ -203,47 +203,12 @@ gtk_experiment_transcript_set_interactive_format(GtkExperimentTranscript *trans, const gchar *format_str, gboolean with_markup) { - static PangoAttrList *default_attribs = NULL; - GtkExperimentTranscriptFormat *fmt = &trans->priv->interactive_format; - gchar *pattern; - gboolean res = TRUE; - if (default_attribs == NULL) { - PangoAttribute *attrib; - PangoFontDescription *font; - PangoColor color; - - default_attribs = pango_attr_list_new(); + gchar *pattern; + PangoAttribute *attrib; -#ifdef DEFAULT_INTERACTIVE_FORMAT_FONT - font = pango_font_description_from_string(DEFAULT_INTERACTIVE_FORMAT_FONT); - if (font != NULL) { - attrib = pango_attr_font_desc_new(font); - attrib->end_index = 1; - pango_attr_list_insert(default_attribs, attrib); - pango_font_description_free(font); - } -#endif -#ifdef DEFAULT_INTERACTIVE_FORMAT_FGCOLOR - if (pango_color_parse(&color, DEFAULT_INTERACTIVE_FORMAT_FGCOLOR)) { - attrib = pango_attr_foreground_new(color.red, - color.green, - color.blue); - attrib->end_index = 1; - pango_attr_list_insert(default_attribs, attrib); - } -#endif -#ifdef DEFAULT_INTERACTIVE_FORMAT_BGCOLOR - if (pango_color_parse(&color, DEFAULT_INTERACTIVE_FORMAT_BGCOLOR)) { - attrib = pango_attr_background_new(color.red, - color.green, - color.blue); - attrib->end_index = 1; - pango_attr_list_insert(default_attribs, attrib); - } -#endif - } + gboolean res = TRUE; gtk_experiment_transcript_free_format(fmt); fmt->regexp = NULL; @@ -260,10 +225,34 @@ gtk_experiment_transcript_set_interactive_format(GtkExperimentTranscript *trans, } /* else if (!with_markup) */ - fmt->attribs = pango_attr_list_copy(default_attribs); + fmt->attribs = pango_attr_list_new(); if (fmt->attribs == NULL) goto redraw; + if (trans->interactive_format.default_font != NULL) { + attrib = pango_attr_font_desc_new(trans->interactive_format.default_font); + attrib->end_index = 1; + pango_attr_list_insert(fmt->attribs, attrib); + } + if (trans->interactive_format.default_text_color != NULL) { + GdkColor *color = trans->interactive_format.default_text_color; + + attrib = pango_attr_foreground_new(color->red, + color->green, + color->blue); + attrib->end_index = 1; + pango_attr_list_insert(fmt->attribs, attrib); + } + if (trans->interactive_format.default_bg_color != NULL) { + GdkColor *color = trans->interactive_format.default_bg_color; + + attrib = pango_attr_background_new(color->red, + color->green, + color->blue); + attrib->end_index = 1; + pango_attr_list_insert(fmt->attribs, attrib); + } + pattern = g_strconcat("(", format_str, ")", NULL); fmt->regexp = g_regex_new(pattern, FORMAT_REGEX_COMPILE_FLAGS, 0, NULL); g_free(pattern); diff --git a/lib/gtk-experiment-widgets/gtk-experiment-transcript.c b/lib/gtk-experiment-widgets/gtk-experiment-transcript.c index e5a9384..0c2b373 100644 --- a/lib/gtk-experiment-widgets/gtk-experiment-transcript.c +++ b/lib/gtk-experiment-widgets/gtk-experiment-transcript.c @@ -13,6 +13,8 @@ #include <glib.h> #include <glib/gprintf.h> +#include <gdk/gdk.h> + #include <gtk/gtk.h> #include <experiment-reader.h> @@ -85,6 +87,10 @@ gtk_experiment_transcript_init(GtkExperimentTranscript *klass) klass->speaker = NULL; klass->reverse = FALSE; + klass->interactive_format.default_font = NULL; + klass->interactive_format.default_text_color = NULL; + klass->interactive_format.default_bg_color = NULL; + klass->priv->time_adjustment = gtk_adjustment_new(0., 0., 0., 0., 0., 0.); g_object_ref_sink(klass->priv->time_adjustment); @@ -197,6 +203,11 @@ gtk_experiment_transcript_finalize(GObject *gobject) GtkExperimentTranscript *trans = GTK_EXPERIMENT_TRANSCRIPT(gobject); g_free(trans->speaker); + + pango_font_description_free(trans->interactive_format.default_font); + gdk_color_free(trans->interactive_format.default_text_color); + gdk_color_free(trans->interactive_format.default_bg_color); + experiment_reader_free_contributions(trans->priv->contribs); gtk_experiment_transcript_free_formats(trans->priv->formats); gtk_experiment_transcript_free_format(&trans->priv->interactive_format); diff --git a/lib/gtk-experiment-widgets/gtk-experiment-transcript.h b/lib/gtk-experiment-widgets/gtk-experiment-transcript.h index fa4b7ab..9d65863 100644 --- a/lib/gtk-experiment-widgets/gtk-experiment-transcript.h +++ b/lib/gtk-experiment-widgets/gtk-experiment-transcript.h @@ -8,6 +8,8 @@ #define __GTK_EXPERIMENT_TRANSCRIPT_H #include <glib-object.h> +#include <gdk/gdk.h> + #include <gtk/gtk.h> #include <experiment-reader.h> @@ -45,6 +47,12 @@ typedef struct _GtkExperimentTranscript { gchar *speaker; /**< Name of speaker whose contributions are displayed (\b read-only) */ gboolean reverse; /**< Reverse mode (\b read-write) */ + struct _GtkExperimentTranscriptInteractiveFormat { + PangoFontDescription *default_font; /**< Default interactive format font */ + GdkColor *default_text_color; /**< Default interactive format text color */ + GdkColor *default_bg_color; /**< Default interactive format background color */ + } interactive_format; + GtkExperimentTranscriptPrivate *priv; /**< @private Pointer to \b private instance attributes */ } GtkExperimentTranscript; @@ -16,6 +16,8 @@ #include <glib.h> #include <glib/gprintf.h> +#include <gdk/gdk.h> + #include <gtk/gtk.h> #include <gtk-vlc-player.h> @@ -250,6 +252,8 @@ int main(int argc, char *argv[]) { GtkBuilder *builder; + GtkExperimentTranscript *transcript_wizard, *transcript_proband; + GtkAdjustment *adj; PangoFontDescription *font_desc; GdkColor color; @@ -289,7 +293,9 @@ main(int argc, char *argv[]) BUILDER_INIT(builder, transcript_table); BUILDER_INIT(builder, transcript_wizard_widget); + transcript_wizard = GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget); BUILDER_INIT(builder, transcript_proband_widget); + transcript_proband = GTK_EXPERIMENT_TRANSCRIPT(transcript_proband_widget); BUILDER_INIT(builder, transcript_scroll_widget); BUILDER_INIT(builder, transcript_wizard_combo); @@ -316,8 +322,7 @@ main(int argc, char *argv[]) gtk_scale_button_set_adjustment(GTK_SCALE_BUTTON(volume_button), adj); /* configure transcript widgets */ - GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget)->speaker = - g_strdup(SPEAKER_WIZARD); + transcript_wizard->speaker = g_strdup(SPEAKER_WIZARD); font_desc = config_get_transcript_font(SPEAKER_WIZARD); if (font_desc != NULL) { gtk_widget_modify_font(transcript_wizard_widget, font_desc); @@ -330,8 +335,14 @@ main(int argc, char *argv[]) gtk_widget_modify_bg(transcript_wizard_widget, GTK_STATE_NORMAL, &color); - GTK_EXPERIMENT_TRANSCRIPT(transcript_proband_widget)->speaker = - g_strdup(SPEAKER_PROBAND); + transcript_wizard->interactive_format.default_font = + config_get_transcript_default_format_font(SPEAKER_WIZARD); + if (config_get_transcript_default_format_text_color(SPEAKER_WIZARD, &color)) + transcript_wizard->interactive_format.default_text_color = gdk_color_copy(&color); + if (config_get_transcript_default_format_bg_color(SPEAKER_WIZARD, &color)) + transcript_wizard->interactive_format.default_bg_color = gdk_color_copy(&color); + + transcript_proband->speaker = g_strdup(SPEAKER_PROBAND); font_desc = config_get_transcript_font(SPEAKER_PROBAND); if (font_desc != NULL) { gtk_widget_modify_font(transcript_proband_widget, font_desc); @@ -344,6 +355,13 @@ main(int argc, char *argv[]) gtk_widget_modify_bg(transcript_proband_widget, GTK_STATE_NORMAL, &color); + transcript_proband->interactive_format.default_font = + config_get_transcript_default_format_font(SPEAKER_PROBAND); + if (config_get_transcript_default_format_text_color(SPEAKER_PROBAND, &color)) + transcript_proband->interactive_format.default_text_color = gdk_color_copy(&color); + if (config_get_transcript_default_format_bg_color(SPEAKER_PROBAND, &color)) + transcript_proband->interactive_format.default_bg_color = gdk_color_copy(&color); + format_selection_init(); refresh_quickopen_menu(GTK_MENU(quickopen_menu)); @@ -360,6 +378,13 @@ main(int argc, char *argv[]) config_set_transcript_bg_color(SPEAKER_WIZARD, &transcript_wizard_widget->style->bg[GTK_STATE_NORMAL]); + config_set_transcript_default_format_font(SPEAKER_WIZARD, + transcript_wizard->interactive_format.default_font); + config_set_transcript_default_format_text_color(SPEAKER_WIZARD, + transcript_wizard->interactive_format.default_text_color); + config_set_transcript_default_format_bg_color(SPEAKER_WIZARD, + transcript_wizard->interactive_format.default_bg_color); + config_set_transcript_font(SPEAKER_PROBAND, transcript_proband_widget->style->font_desc); config_set_transcript_text_color(SPEAKER_PROBAND, @@ -367,6 +392,13 @@ main(int argc, char *argv[]) config_set_transcript_bg_color(SPEAKER_PROBAND, &transcript_proband_widget->style->bg[GTK_STATE_NORMAL]); + config_set_transcript_default_format_font(SPEAKER_PROBAND, + transcript_proband->interactive_format.default_font); + config_set_transcript_default_format_text_color(SPEAKER_PROBAND, + transcript_proband->interactive_format.default_text_color); + config_set_transcript_default_format_bg_color(SPEAKER_PROBAND, + transcript_proband->interactive_format.default_bg_color); + config_save_key_file(); return 0; |