Image overlay configurable colours
authorColin Clark <cclark@mcb.net>
Wed, 18 May 2016 19:36:07 +0000 (20:36 +0100)
committerColin Clark <cclark@mcb.net>
Wed, 18 May 2016 19:36:07 +0000 (20:36 +0100)
User configurable options to set the colours of the Image Overlay text
and background

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

index 88ccb9c..7d37c1c 100644 (file)
@@ -686,9 +686,9 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
 
        if (width > 0 && height > 0)
                {
-               /* TODO: make osd color configurable --Zas */
                pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, width, height);
-               pixbuf_set_rect_fill(pixbuf, 3, 3, width-6, height-6, 240, 240, 240, 210);
+               pixbuf_set_rect_fill(pixbuf, 3, 3, width-6, height-6, options->image_overlay.background_red, options->image_overlay.background_green,
+                                                                                                                       options->image_overlay.background_blue, options->image_overlay.background_alpha);
                pixbuf_set_rect(pixbuf, 0, 0, width, height, 240, 240, 240, 80, 1, 1, 1, 1);
                pixbuf_set_rect(pixbuf, 1, 1, width-2, height-2, 240, 240, 240, 130, 1, 1, 1, 1);
                pixbuf_set_rect(pixbuf, 2, 2, width-4, height-4, 240, 240, 240, 180, 1, 1, 1, 1);
@@ -706,7 +706,8 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
                        pixbuf_set_rect_fill(pixbuf, x, y, w, HISTOGRAM_HEIGHT, 220, 220, 220, 210);
                        histogram_draw(osd->histogram, histmap, pixbuf, x, y, w, HISTOGRAM_HEIGHT);
                        }
-               pixbuf_draw_layout(pixbuf, layout, imd->pr, 5, 5, 0, 0, 0, 255);
+               pixbuf_draw_layout(pixbuf, layout, imd->pr, 5, 5, options->image_overlay.text_red, options->image_overlay.text_green,
+                                                                                                                       options->image_overlay.text_blue, options->image_overlay.text_alpha);
        }
 
        g_object_unref(G_OBJECT(layout));
index 99e4de7..7180a68 100644 (file)
@@ -89,6 +89,14 @@ ConfOptions *init_options(ConfOptions *options)
        options->image_overlay.x = 10;
        options->image_overlay.y = -10;
        options->image_overlay.font = NULL;
+       options->image_overlay.text_red = 0;
+       options->image_overlay.text_green = 0;
+       options->image_overlay.text_blue = 0;
+       options->image_overlay.text_alpha = 255;
+       options->image_overlay.background_red = 240;
+       options->image_overlay.background_green = 240;
+       options->image_overlay.background_blue = 240;
+       options->image_overlay.background_alpha = 210;
 
        options->lazy_image_sync = FALSE;
        options->mousewheel_scrolls = FALSE;
index fbbd8f9..ad0468f 100644 (file)
@@ -138,6 +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;
                gchar *font;
        } image_overlay;
 
index 0f2426c..1c20aa8 100644 (file)
@@ -44,6 +44,7 @@
 #define EDITOR_NAME_MAX_LENGTH 32
 #define EDITOR_COMMAND_MAX_LENGTH 1024
 
+static void image_overlay_set_text_colours();
 
 typedef struct _ThumbSize ThumbSize;
 struct _ThumbSize
@@ -287,6 +288,14 @@ static void config_window_apply(void)
        if (c_options->image_overlay.font)
                set_image_overlay_font_string(&options->image_overlay.font,
                                                  c_options->image_overlay.font);
+       options->image_overlay.text_red = c_options->image_overlay.text_red;
+       options->image_overlay.text_green = c_options->image_overlay.text_green;
+       options->image_overlay.text_blue = c_options->image_overlay.text_blue;
+       options->image_overlay.text_alpha = c_options->image_overlay.text_alpha;
+       options->image_overlay.background_red = c_options->image_overlay.background_red;
+       options->image_overlay.background_green = c_options->image_overlay.background_green;
+       options->image_overlay.background_blue = c_options->image_overlay.background_blue;
+       options->image_overlay.background_alpha = c_options->image_overlay.background_alpha;
        options->update_on_time_change = c_options->update_on_time_change;
        options->image.exif_rotate_enable = c_options->image.exif_rotate_enable;
        options->image.exif_proof_rotate_enable = c_options->image.exif_proof_rotate_enable;
@@ -1038,6 +1047,52 @@ static void image_overlay_set_font_cb(GtkWidget *widget, gpointer data)
        gtk_widget_destroy(dialog);
 }
 
+static void image_overlay_set_text_colour_cb(GtkWidget *widget, gpointer data)
+{
+       GenericDialog *dialog;
+       GdkRGBA colour;
+
+       dialog = gtk_color_chooser_dialog_new("Image Overlay Text Colour", 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);
+
+       if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL)
+               {
+               gtk_color_chooser_get_rgba(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);
+}
+
+static void image_overlay_set_background_colour_cb(GtkWidget *widget, gpointer data)
+{
+       GenericDialog *dialog;
+       GdkRGBA colour;
+
+       dialog = gtk_color_chooser_dialog_new("Image Overlay Background Colour", 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);
+
+       if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL)
+               {
+               gtk_color_chooser_get_rgba(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);
+}
+
 static void accel_store_populate(void)
 {
        LayoutWindow *lw;
@@ -1479,6 +1534,17 @@ static void config_tab_windows(GtkWidget *notebook)
        gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, NULL, 0);
        gtk_widget_show(button);
 
+       button = pref_button_new(NULL, GTK_STOCK_COLOR_PICKER, _("Text"), FALSE,
+                                G_CALLBACK(image_overlay_set_text_colour_cb), NULL);
+       gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+       gtk_widget_show(button);
+
+       button = pref_button_new(NULL, GTK_STOCK_COLOR_PICKER, _("Background"), FALSE,
+                                G_CALLBACK(image_overlay_set_background_colour_cb), NULL);
+       gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+       gtk_widget_show(button);
+       image_overlay_set_text_colours();
+
        button = pref_button_new(NULL, NULL, _("Defaults"), FALSE,
                                 G_CALLBACK(image_overlay_default_template_cb), image_overlay_template_view);
        gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
@@ -2306,4 +2372,16 @@ void show_about_window(void)
 
        gtk_widget_show(about);
 }
+
+static void image_overlay_set_text_colours()
+{
+       c_options->image_overlay.text_red = options->image_overlay.text_red;
+       c_options->image_overlay.text_green = options->image_overlay.text_green;
+       c_options->image_overlay.text_blue = options->image_overlay.text_blue;
+       c_options->image_overlay.text_alpha = options->image_overlay.text_alpha;
+       c_options->image_overlay.background_red = options->image_overlay.background_red;
+       c_options->image_overlay.background_green = options->image_overlay.background_green;
+       c_options->image_overlay.background_blue = options->image_overlay.background_blue;
+       c_options->image_overlay.background_alpha = options->image_overlay.background_alpha;
+}
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 0aae6ac..f3c986d 100644 (file)
@@ -354,6 +354,14 @@ static void write_global_attributes(GString *outstr, gint indent)
 
        WRITE_NL(); WRITE_INT(*options, image_overlay.x);
        WRITE_NL(); WRITE_INT(*options, image_overlay.y);
+       WRITE_NL(); WRITE_INT(*options, image_overlay.text_red);
+       WRITE_NL(); WRITE_INT(*options, image_overlay.text_green);
+       WRITE_NL(); WRITE_INT(*options, image_overlay.text_blue);
+       WRITE_NL(); WRITE_INT(*options, image_overlay.text_alpha);
+       WRITE_NL(); WRITE_INT(*options, image_overlay.background_red);
+       WRITE_NL(); WRITE_INT(*options, image_overlay.background_green);
+       WRITE_NL(); WRITE_INT(*options, image_overlay.background_blue);
+       WRITE_NL(); WRITE_INT(*options, image_overlay.background_alpha);
        WRITE_NL(); WRITE_CHAR(*options, image_overlay.font);
 
        /* Slideshow Options */
@@ -616,6 +624,14 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                if (READ_CHAR(*options, image_overlay.template_string)) continue;
                if (READ_INT(*options, image_overlay.x)) continue;
                if (READ_INT(*options, image_overlay.y)) continue;
+               if (READ_INT(*options, image_overlay.text_red)) continue;
+               if (READ_INT(*options, image_overlay.text_green)) continue;
+               if (READ_INT(*options, image_overlay.text_blue)) continue;
+               if (READ_INT(*options, image_overlay.text_alpha)) continue;
+               if (READ_INT(*options, image_overlay.background_red)) continue;
+               if (READ_INT(*options, image_overlay.background_green)) continue;
+               if (READ_INT(*options, image_overlay.background_blue)) continue;
+               if (READ_INT(*options, image_overlay.background_alpha)) continue;
                if (READ_CHAR(*options, image_overlay.font)) continue;
 
                /* Slideshow options */