[Sorry for sending again.
 Hopefully with 'simpler' mail-client text will be shown
 and not hidden by 'Message as HTML' link]

Attached is a home-made patch to allow
printing of pixel info to standard output.

regards -- yotam
diff --git a/src/layout.c b/src/layout.c
index b0958f6..7e5e90f 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -2269,6 +2269,8 @@ void layout_write_attributes(LayoutOptions *layout, GString *outstr, gint indent
 
 	WRITE_NL(); WRITE_BOOL(*layout, toolbar_hidden);
 	WRITE_NL(); WRITE_BOOL(*layout, show_info_pixel);
+	WRITE_NL(); write_bool_option(outstr, indent, "output_pixel_info",
+	                              options->image.output_pixel_info);
 
 	WRITE_NL(); WRITE_UINT(*layout, image_overlay.state);
 	WRITE_NL(); WRITE_INT(*layout, image_overlay.histogram_channel);
@@ -2340,6 +2342,11 @@ void layout_load_attributes(LayoutOptions *layout, const gchar **attribute_names
 		if (READ_BOOL(*layout, tools_hidden)) continue;
 		if (READ_BOOL(*layout, toolbar_hidden)) continue;
 		if (READ_BOOL(*layout, show_info_pixel)) continue;
+		if (read_bool_option(option, "output_pixel_info",  value,
+		                     &options->image.output_pixel_info))
+		    {
+		        continue;
+		    }
 
 		if (READ_UINT(*layout, image_overlay.state)) continue;
 		if (READ_INT(*layout, image_overlay.histogram_channel)) continue;
diff --git a/src/layout_image.c b/src/layout_image.c
index c6db03e..6c62326 100644
--- a/src/layout_image.c
+++ b/src/layout_image.c
@@ -1352,6 +1352,11 @@ static void layout_image_button_cb(ImageWindow *imd, GdkEventButton *event, gpoi
 	LayoutWindow *lw = data;
 	GtkWidget *menu;
 
+	if (options->image.output_pixel_info)
+	{
+	    return;
+	}
+
 	switch (event->button)
 		{
 		case MOUSE_BUTTON_LEFT:
diff --git a/src/layout_util.c b/src/layout_util.c
index 491194e..bdaf8fc 100644
--- a/src/layout_util.c
+++ b/src/layout_util.c
@@ -47,6 +47,7 @@
 #include "metadata.h"
 #include "rcfile.h"
 #include "desktop_file.h"
+#include "options.h"
 
 #include <gdk/gdkkeysyms.h> /* for keyboard values */
 
@@ -800,6 +801,16 @@ static void layout_menu_info_pixel_cb(GtkToggleAction *action, gpointer data)
 	layout_info_pixel_set(lw, !lw->options.show_info_pixel);
 }
 
+static void layout_menu_output_pixel_cb(GtkToggleAction *action, gpointer data)
+{
+	LayoutWindow *lw = data;
+
+	if (options->image.output_pixel_info != gtk_toggle_action_get_active(action))
+		{
+		    options->image.output_pixel_info = !options->image.output_pixel_info;
+		}
+}
+
 /* NOTE: these callbacks are called also from layout_util_sync_views */
 static void layout_menu_bar_cb(GtkToggleAction *action, gpointer data)
 {
@@ -1362,6 +1373,7 @@ static GtkToggleActionEntry menu_toggle_entries[] = {
   { "Thumbnails",	PIXBUF_INLINE_ICON_THUMB,N_("Show _Thumbnails"),		"T",			N_("Show Thumbnails"),			CB(layout_menu_thumb_cb),	 FALSE },
   { "ShowMarks",        NULL,			N_("Show _Marks"),			"M",			N_("Show Marks"),			CB(layout_menu_marks_cb),	 FALSE  },
   { "ShowInfoPixel",	GTK_STOCK_COLOR_PICKER,	N_("Pi_xel Info"),			NULL,			N_("Show Pixel Info"),			CB(layout_menu_info_pixel_cb),	 FALSE  },
+  { "OutputPixelInfo",	NULL,           	N_("Pixel _Output"),			NULL,			N_("Output Pixel Info"),		CB(layout_menu_output_pixel_cb), FALSE  },
   { "FloatTools",	PIXBUF_INLINE_ICON_FLOAT,N_("_Float file list"),		"L",			N_("Float file list"),			CB(layout_menu_float_cb),	 FALSE  },
   { "HideToolbar",	NULL,			N_("Hide tool_bar"),			NULL,			N_("Hide toolbar"),			CB(layout_menu_toolbar_cb),	 FALSE  },
   { "SBar",		NULL,			N_("_Info sidebar"),			"<control>K",		N_("Info sidebar"),			CB(layout_menu_bar_cb),		 FALSE  },
@@ -1585,6 +1597,7 @@ static const gchar *menu_ui_description =
 "      <menuitem action='SBar'/>"
 "      <menuitem action='SBarSort'/>"
 "      <menuitem action='ShowInfoPixel'/>"
+"      <menuitem action='OutputPixelInfo'/>"
 "      <placeholder name='ToolsSection'/>"
 "      <separator/>"
 "      <menuitem action='SlideShow'/>"
@@ -2350,6 +2363,9 @@ static void layout_util_sync_views(LayoutWindow *lw)
 	action = gtk_action_group_get_action(lw->action_group, "ShowInfoPixel");
 	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.show_info_pixel);
 
+	action = gtk_action_group_get_action(lw->action_group, "OutputPixelInfo");
+	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), options->image.output_pixel_info);
+
 	action = gtk_action_group_get_action(lw->action_group, "ShowMarks");
 	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.show_marks);
 
diff --git a/src/options.c b/src/options.c
index ea652c3..4d0fffc 100644
--- a/src/options.c
+++ b/src/options.c
@@ -81,6 +81,7 @@ ConfOptions *init_options(ConfOptions *options)
 	options->image.zoom_mode = ZOOM_RESET_NONE;
 	options->image.zoom_quality = GDK_INTERP_BILINEAR;
 	options->image.zoom_to_fit_allow_expand = FALSE;
+	options->image.output_pixel_info = FALSE;
 
 	options->image_overlay.template_string = NULL;
 	options->image_overlay.x = 10;
diff --git a/src/options.h b/src/options.h
index da59a44..762de4c 100644
--- a/src/options.h
+++ b/src/options.h
@@ -67,6 +67,7 @@ struct _ConfOptions
 		gboolean zoom_to_fit_allow_expand;
 		guint zoom_quality;
 		gint zoom_increment;	/* 10 is 1.0, 5 is 0.05, 20 is 2.0, etc. */
+                gboolean output_pixel_info;
 
 		gboolean use_custom_border_color_in_fullscreen;
 		gboolean use_custom_border_color;
diff --git a/src/pixbuf-renderer.c b/src/pixbuf-renderer.c
index c553f59..dd94e50 100644
--- a/src/pixbuf-renderer.c
+++ b/src/pixbuf-renderer.c
@@ -19,7 +19,6 @@
 #include "pixbuf-renderer.h"
 
 #include "intl.h"
-#include "layout.h"
 
 #include <gtk/gtk.h>
 
@@ -3922,6 +3921,20 @@ static gboolean pr_mouse_release_cb(GtkWidget *widget, GdkEventButton *bevent, g
 
 	pr = PIXBUF_RENDERER(widget);
 
+	if (options->image.output_pixel_info)
+		{
+		    gint x_pixel, y_pixel;
+		    pixbuf_renderer_get_mouse_position(pr, &x_pixel, &y_pixel);
+		    if (x_pixel >= 0 && y_pixel >= 0)
+		    {
+		        gint r_mouse, g_mouse, b_mouse;
+		        pixbuf_renderer_get_pixel_colors(pr, x_pixel, y_pixel,
+		                                         &r_mouse, &g_mouse, &b_mouse);
+		        printf("%d %d [rgb %02x %02x %02x]\n",
+		               x_pixel, y_pixel, r_mouse, g_mouse, b_mouse);
+		    }
+		}
+
 	if (pr->scroller_id)
 		{
 		pr_scroller_stop(pr);
------------------------------------------------------------------------------
_______________________________________________
Geeqie-devel mailing list
Geeqie-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geeqie-devel

Reply via email to