Image overlay configurable items GTK2
authorColin Clark <cclark@mcb.net>
Sun, 22 May 2016 09:35:21 +0000 (10:35 +0100)
committerColin Clark <cclark@mcb.net>
Sun, 22 May 2016 09:35:21 +0000 (10:35 +0100)
Supports GTK2 and GTK3

src/image-overlay.h
src/options.h
src/preferences.c

index bfcb526..9ea83fc 100644 (file)
@@ -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);
index eaa4fd1..12633c6 100644 (file)
@@ -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;
 
index 3167ae5..616fed4 100644 (file)
@@ -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);