changeset 2334:e38178f556f6

Image overlay configurable font User configurable option to set the font of the Image Overlay text
author Colin Clark <cclark@mcb.net>
date Wed, 18 May 2016 12:13:12 +0100
parents 45f39f959bf9
children aa2e9d37193b
files src/image-overlay.c src/options.c src/options.h src/preferences.c src/rcfile.c
diffstat 5 files changed, 45 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/image-overlay.c	Mon May 16 11:45:51 2016 +0100
+++ b/src/image-overlay.c	Wed May 18 12:13:12 2016 +0100
@@ -100,6 +100,14 @@
 	set_image_overlay_template_string(template_string, DEFAULT_OVERLAY_INFO);
 }
 
+void set_image_overlay_font_string(gchar **font_string, const gchar *value)
+{
+	g_assert(font_string);
+
+	g_free(*font_string);
+	*font_string = g_strdup(value);
+}
+
 static OverlayStateData *image_get_osd_data(ImageWindow *imd)
 {
 	OverlayStateData *osd;
@@ -493,6 +501,7 @@
 	const HistMap *histmap = NULL;
 	ImageWindow *imd = osd->imd;
 	FileData *fd = image_get_fd(imd);
+	PangoFontDescription *font_desc;
 
 	if (!fd) return NULL;
 
@@ -653,7 +662,10 @@
 			}
 	}
 
+	font_desc = pango_font_description_from_string(options->image_overlay.font);
 	layout = gtk_widget_create_pango_layout(imd->pr, NULL);
+	pango_layout_set_font_description(layout, font_desc);
+
 	pango_layout_set_markup(layout, text, -1);
 	g_free(text);
 
--- a/src/options.c	Mon May 16 11:45:51 2016 +0100
+++ b/src/options.c	Wed May 18 12:13:12 2016 +0100
@@ -88,6 +88,7 @@
 	options->image_overlay.template_string = NULL;
 	options->image_overlay.x = 10;
 	options->image_overlay.y = -10;
+	options->image_overlay.font = NULL;
 
 	options->lazy_image_sync = FALSE;
 	options->mousewheel_scrolls = FALSE;
--- a/src/options.h	Mon May 16 11:45:51 2016 +0100
+++ b/src/options.h	Wed May 18 12:13:12 2016 +0100
@@ -138,6 +138,7 @@
 		gchar *template_string;
 		gint x;
 		gint y;
+		gchar *font;
 	} image_overlay;
 
 	/* properties dialog */
--- a/src/preferences.c	Mon May 16 11:45:51 2016 +0100
+++ b/src/preferences.c	Wed May 18 12:13:12 2016 +0100
@@ -284,7 +284,9 @@
 	if (c_options->image_overlay.template_string)
 		set_image_overlay_template_string(&options->image_overlay.template_string,
 						  c_options->image_overlay.template_string);
-
+	if (c_options->image_overlay.font)
+		set_image_overlay_font_string(&options->image_overlay.font,
+						  c_options->image_overlay.font);
 	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;
@@ -1015,6 +1017,27 @@
 	help_window_show("overlay");
 }
 
+static void image_overlay_set_font_cb(GtkWidget *widget, gpointer data)
+{
+	GenericDialog *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);
+
+	if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL)
+		{
+		font_desc = gtk_font_chooser_get_font_desc(GTK_FONT_CHOOSER(dialog));
+		font = pango_font_description_to_string(font_desc);
+		g_free(c_options->image_overlay.font);
+		c_options->image_overlay.font = g_strdup(font);
+		g_free(font);
+		}
+
+	gtk_widget_destroy(dialog);
+}
+
 static void accel_store_populate(void)
 {
 	LayoutWindow *lw;
@@ -1451,6 +1474,11 @@
 
 	hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_BUTTON_GAP);
 
+	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);
+	gtk_widget_show(button);
+
 	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);
--- a/src/rcfile.c	Mon May 16 11:45:51 2016 +0100
+++ b/src/rcfile.c	Wed May 18 12:13:12 2016 +0100
@@ -354,6 +354,7 @@
 
 	WRITE_NL(); WRITE_INT(*options, image_overlay.x);
 	WRITE_NL(); WRITE_INT(*options, image_overlay.y);
+	WRITE_NL(); WRITE_CHAR(*options, image_overlay.font);
 
 	/* Slideshow Options */
 	WRITE_NL(); WRITE_INT_UNIT(*options, slideshow.delay, SLIDESHOW_SUBSECOND_PRECISION);
@@ -615,6 +616,7 @@
 		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_CHAR(*options, image_overlay.font)) continue;
 
 		/* Slideshow options */
 		if (READ_INT_UNIT(*options, slideshow.delay, SLIDESHOW_SUBSECOND_PRECISION)) continue;