From 0b03539c8ffc72e1d515d15fc17ff80dc36f4652 Mon Sep 17 00:00:00 2001 From: Colin Clark Date: Sun, 22 May 2016 10:35:21 +0100 Subject: [PATCH] Image overlay configurable items GTK2 Supports GTK2 and GTK3 --- src/image-overlay.h | 1 + src/options.h | 16 ++++---- src/preferences.c | 96 +++++++++++++++++++++++++++++++++++++-------- 3 files changed, 89 insertions(+), 24 deletions(-) diff --git a/src/image-overlay.h b/src/image-overlay.h index bfcb5264..9ea83fca 100644 --- a/src/image-overlay.h +++ b/src/image-overlay.h @@ -33,6 +33,7 @@ typedef enum { void set_image_overlay_template_string(gchar **template_string, const gchar *value); void set_default_image_overlay_template_string(gchar **template_string); +void set_image_overlay_font_string(gchar **font_string, const gchar *value); void image_osd_set(ImageWindow *imd, OsdShowFlags show); OsdShowFlags image_osd_get(ImageWindow *imd); diff --git a/src/options.h b/src/options.h index eaa4fd18..12633c69 100644 --- a/src/options.h +++ b/src/options.h @@ -138,14 +138,14 @@ struct _ConfOptions gchar *template_string; gint x; gint y; - gint text_red; - gint text_green; - gint text_blue; - gint text_alpha; - gint background_red; - gint background_green; - gint background_blue; - gint background_alpha; + guint16 text_red; + guint16 text_green; + guint16 text_blue; + guint16 text_alpha; + guint16 background_red; + guint16 background_green; + guint16 background_blue; + guint16 background_alpha; gchar *font; } image_overlay; diff --git a/src/preferences.c b/src/preferences.c index 3167ae57..616fed40 100644 --- a/src/preferences.c +++ b/src/preferences.c @@ -1026,15 +1026,15 @@ static void image_overlay_help_cb(GtkWidget *widget, gpointer data) help_window_show("overlay"); } -#if GTK_CHECK_VERSION(3,4,0) static void image_overlay_set_font_cb(GtkWidget *widget, gpointer data) { - GenericDialog *dialog; +#if GTK_CHECK_VERSION(3,4,0) + GtkWidget *dialog; char *font; PangoFontDescription *font_desc; - dialog = gtk_font_chooser_dialog_new("Image Overlay Font", gtk_widget_get_toplevel(widget)); - gtk_font_chooser_set_font(dialog, options->image_overlay.font); + dialog = gtk_font_chooser_dialog_new("Image Overlay Font", GTK_WINDOW(gtk_widget_get_toplevel(widget))); + gtk_font_chooser_set_font(GTK_FONT_CHOOSER(dialog), options->image_overlay.font); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL) { @@ -1046,54 +1046,112 @@ static void image_overlay_set_font_cb(GtkWidget *widget, gpointer data) } gtk_widget_destroy(dialog); +#else + const char *font; + + font = gtk_font_button_get_font_name(GTK_FONT_BUTTON(widget)); + c_options->image_overlay.font = g_strdup(font); +#endif } static void image_overlay_set_text_colour_cb(GtkWidget *widget, gpointer data) { - GenericDialog *dialog; + GtkWidget *dialog; +#if GTK_CHECK_VERSION(3,4,0) GdkRGBA colour; - dialog = gtk_color_chooser_dialog_new("Image Overlay Text Colour", gtk_widget_get_toplevel(widget)); + dialog = gtk_color_chooser_dialog_new("Image Overlay Text Colour", GTK_WINDOW(gtk_widget_get_toplevel(widget))); colour.red = options->image_overlay.text_red; colour.green = options->image_overlay.text_green; colour.blue = options->image_overlay.text_blue; colour.alpha = options->image_overlay.text_alpha; - gtk_color_chooser_set_rgba(dialog, &colour); + gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(dialog), &colour); + gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(dialog), TRUE); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL) { - gtk_color_chooser_get_rgba(dialog, &colour); + gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(dialog), &colour); c_options->image_overlay.text_red = colour.red*255; c_options->image_overlay.text_green = colour.green*255; c_options->image_overlay.text_blue = colour.blue*255; c_options->image_overlay.text_alpha = colour.alpha*255; } + gtk_widget_destroy(dialog); +#else + GdkColor colour; + GtkColorSelection *colorsel; + + dialog = gtk_color_selection_dialog_new("Image Overlay Text Colour"); + gtk_window_set_keep_above(GTK_WINDOW(dialog),TRUE); + colour.red = options->image_overlay.text_red*257; + colour.green = options->image_overlay.text_green*257; + colour.blue = options->image_overlay.text_blue*257; + colorsel = GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(dialog))); + gtk_color_selection_set_has_opacity_control(colorsel, TRUE); + gtk_color_selection_set_current_color(colorsel, &colour); + gtk_color_selection_set_current_alpha(colorsel, options->image_overlay.text_alpha*257); + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) + { + gtk_color_selection_get_current_color(colorsel, &colour); + c_options->image_overlay.text_red = colour.red/257; + c_options->image_overlay.text_green = colour.green/257; + c_options->image_overlay.text_blue = colour.blue/257; + c_options->image_overlay.text_alpha = gtk_color_selection_get_current_alpha(colorsel)/257; + } gtk_widget_destroy (dialog); +#endif } + static void image_overlay_set_background_colour_cb(GtkWidget *widget, gpointer data) { - GenericDialog *dialog; + GtkWidget *dialog; +#if GTK_CHECK_VERSION(3,4,0) GdkRGBA colour; - dialog = gtk_color_chooser_dialog_new("Image Overlay Background Colour", gtk_widget_get_toplevel(widget)); + dialog = gtk_color_chooser_dialog_new("Image Overlay Background Colour", GTK_WINDOW(gtk_widget_get_toplevel(widget))); colour.red = options->image_overlay.background_red; colour.green = options->image_overlay.background_green; colour.blue = options->image_overlay.background_blue; colour.alpha = options->image_overlay.background_alpha; - gtk_color_chooser_set_rgba(dialog, &colour); + gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(dialog), &colour); + gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(dialog), TRUE); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL) { - gtk_color_chooser_get_rgba(dialog, &colour); + gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(dialog), &colour); c_options->image_overlay.background_red = colour.red*255; c_options->image_overlay.background_green = colour.green*255; c_options->image_overlay.background_blue = colour.blue*255; c_options->image_overlay.background_alpha = colour.alpha*255; } - gtk_widget_destroy (dialog); -} + gtk_widget_destroy(dialog); +#else + GdkColor colour; + GtkColorSelection *colorsel; + + dialog = gtk_color_selection_dialog_new("Image Overlay Background Colour"); + gtk_window_set_keep_above(GTK_WINDOW(dialog),TRUE); + colour.red = options->image_overlay.background_red*257; + colour.green = options->image_overlay.background_green*257; + colour.blue = options->image_overlay.background_blue*257; + colorsel = GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(dialog))); + gtk_color_selection_set_has_opacity_control(colorsel, TRUE); + gtk_color_selection_set_current_color(colorsel, &colour); + gtk_color_selection_set_current_alpha(colorsel, options->image_overlay.background_alpha*257); + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) + { + gtk_color_selection_get_current_color(colorsel, &colour); + c_options->image_overlay.background_red = colour.red/257; + c_options->image_overlay.background_green = colour.green/257; + c_options->image_overlay.background_blue = colour.blue/257; + c_options->image_overlay.background_alpha = gtk_color_selection_get_current_alpha(colorsel)/257; + } + gtk_widget_destroy(dialog); #endif +} static void accel_store_populate(void) { @@ -1534,7 +1592,14 @@ static void config_tab_windows(GtkWidget *notebook) #if GTK_CHECK_VERSION(3,4,0) button = pref_button_new(NULL, GTK_STOCK_SELECT_FONT, _("Font"), FALSE, G_CALLBACK(image_overlay_set_font_cb), notebook); - gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, NULL, 0); +#else + button = gtk_font_button_new(); + gtk_font_button_set_title(GTK_FONT_BUTTON(button), "Image Overlay Font"); + gtk_font_button_set_font_name(GTK_FONT_BUTTON(button), options->image_overlay.font); + g_signal_connect(G_OBJECT(button), "font-set", + G_CALLBACK(image_overlay_set_font_cb),NULL); +#endif + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_widget_show(button); button = pref_button_new(NULL, GTK_STOCK_COLOR_PICKER, _("Text"), FALSE, @@ -1547,7 +1612,6 @@ static void config_tab_windows(GtkWidget *notebook) gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_widget_show(button); image_overlay_set_text_colours(); -#endif button = pref_button_new(NULL, NULL, _("Defaults"), FALSE, G_CALLBACK(image_overlay_default_template_cb), image_overlay_template_view); -- 2.20.1