aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-06-04 13:42:47 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-06-04 13:42:47 +0200
commit71b279783975e3542e172e23b37583583cb2482b (patch)
tree3fd004ba6ddb15939a669bfddb18e824300c4342
parent5a7a427e189eb15ca761eb7d3c8d22bad67e233f (diff)
downloadgtk-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.c67
-rw-r--r--lib/gtk-experiment-widgets/gtk-experiment-transcript.c11
-rw-r--r--lib/gtk-experiment-widgets/gtk-experiment-transcript.h8
-rw-r--r--src/main.c40
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;
diff --git a/src/main.c b/src/main.c
index f11334f..f036e5b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;