From 215bb15c4ff15c31140aa3e527f2b8c55e512942 Mon Sep 17 00:00:00 2001 From: Colin Clark Date: Wed, 18 May 2016 20:36:07 +0100 Subject: [PATCH] Image overlay configurable colours User configurable options to set the colours of the Image Overlay text and background --- src/image-overlay.c | 7 ++-- src/options.c | 8 +++++ src/options.h | 8 +++++ src/preferences.c | 78 +++++++++++++++++++++++++++++++++++++++++++++ src/rcfile.c | 16 ++++++++++ 5 files changed, 114 insertions(+), 3 deletions(-) diff --git a/src/image-overlay.c b/src/image-overlay.c index 88ccb9c1..7d37c1cf 100644 --- a/src/image-overlay.c +++ b/src/image-overlay.c @@ -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)); diff --git a/src/options.c b/src/options.c index 99e4de78..7180a68a 100644 --- a/src/options.c +++ b/src/options.c @@ -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; diff --git a/src/options.h b/src/options.h index fbbd8f9c..ad0468fb 100644 --- a/src/options.h +++ b/src/options.h @@ -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; diff --git a/src/preferences.c b/src/preferences.c index 0f2426c0..1c20aa84 100644 --- a/src/preferences.c +++ b/src/preferences.c @@ -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: */ diff --git a/src/rcfile.c b/src/rcfile.c index 0aae6acf..f3c986d0 100644 --- a/src/rcfile.c +++ b/src/rcfile.c @@ -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 */ -- 2.20.1