Revision: 1764
          http://geeqie.svn.sourceforge.net/geeqie/?rev=1764&view=rev
Author:   nadvornik
Date:     2009-06-27 15:47:50 +0000 (Sat, 27 Jun 2009)

Log Message:
-----------
improved overlay menu

- indicate overlay and histogram state in toggle and radio entries in
  the menu
- all entries have visible effect in all modes

Modified Paths:
--------------
    trunk/src/histogram.c
    trunk/src/histogram.h
    trunk/src/image-overlay.c
    trunk/src/image-overlay.h
    trunk/src/layout_util.c

Modified: trunk/src/histogram.c
===================================================================
--- trunk/src/histogram.c       2009-06-24 20:31:30 UTC (rev 1763)
+++ trunk/src/histogram.c       2009-06-27 15:47:50 UTC (rev 1764)
@@ -43,7 +43,7 @@
        Histogram *histogram;
 
        histogram = g_new0(Histogram, 1);
-       histogram->histogram_channel = HCHAN_RGB;
+       histogram->histogram_channel = HCHAN_DEFAULT;
        histogram->histogram_mode = 0;
 
        /* grid */

Modified: trunk/src/histogram.h
===================================================================
--- trunk/src/histogram.h       2009-06-24 20:31:30 UTC (rev 1763)
+++ trunk/src/histogram.h       2009-06-27 15:47:50 UTC (rev 1764)
@@ -20,6 +20,7 @@
 #define HCHAN_MAX 3
 #define HCHAN_RGB 4
 #define HCHAN_COUNT 5
+#define HCHAN_DEFAULT HCHAN_RGB
 
 
 Histogram *histogram_new(void);

Modified: trunk/src/image-overlay.c
===================================================================
--- trunk/src/image-overlay.c   2009-06-24 20:31:30 UTC (rev 1763)
+++ trunk/src/image-overlay.c   2009-06-27 15:47:50 UTC (rev 1764)
@@ -125,7 +125,7 @@
  */
 
 
-void image_osd_histogram_chan_toggle(ImageWindow *imd)
+void image_osd_histogram_toggle_channel(ImageWindow *imd)
 {
        OverlayStateData *osd = image_get_osd_data(imd);
 
@@ -135,7 +135,7 @@
        image_osd_update(imd);
 }
 
-void image_osd_histogram_log_toggle(ImageWindow *imd)
+void image_osd_histogram_toggle_mode(ImageWindow *imd)
 {
        OverlayStateData *osd = image_get_osd_data(imd);
 
@@ -145,6 +145,44 @@
        image_osd_update(imd);
 }
 
+void image_osd_histogram_set_channel(ImageWindow *imd, gint chan)
+{
+       OverlayStateData *osd = image_get_osd_data(imd);
+
+       if (!osd || !osd->histogram) return;
+
+       histogram_set_channel(osd->histogram, chan);
+       image_osd_update(imd);
+}
+
+void image_osd_histogram_set_mode(ImageWindow *imd, gint mode)
+{
+       OverlayStateData *osd = image_get_osd_data(imd);
+
+       if (!osd || !osd->histogram) return;
+
+       histogram_set_mode(osd->histogram, mode);
+       image_osd_update(imd);
+}
+
+gint image_osd_histogram_get_channel(ImageWindow *imd)
+{
+       OverlayStateData *osd = image_get_osd_data(imd);
+
+       if (!osd || !osd->histogram) return HCHAN_DEFAULT;
+
+       return histogram_get_channel(osd->histogram);
+}
+
+gint image_osd_histogram_get_mode(ImageWindow *imd)
+{
+       OverlayStateData *osd = image_get_osd_data(imd);
+
+       if (!osd || !osd->histogram) return 0;
+
+       return histogram_get_mode(osd->histogram);
+}
+
 void image_osd_toggle(ImageWindow *imd)
 {
        OsdShowFlags show;

Modified: trunk/src/image-overlay.h
===================================================================
--- trunk/src/image-overlay.h   2009-06-24 20:31:30 UTC (rev 1763)
+++ trunk/src/image-overlay.h   2009-06-27 15:47:50 UTC (rev 1764)
@@ -45,8 +45,12 @@
 
 void image_osd_icon(ImageWindow *imd, ImageOSDFlag flag, gint duration);
 
-void image_osd_histogram_chan_toggle(ImageWindow *);
-void image_osd_histogram_log_toggle(ImageWindow *);
+void image_osd_histogram_toggle_channel(ImageWindow *imd);
+void image_osd_histogram_toggle_mode(ImageWindow *imd);
+void image_osd_histogram_set_channel(ImageWindow *imd, gint chan);
+void image_osd_histogram_set_mode(ImageWindow *imd, gint mode);
+gint image_osd_histogram_get_channel(ImageWindow *imd);
+gint image_osd_histogram_get_mode(ImageWindow *imd);
 
 void image_osd_toggle(ImageWindow *imd);
 

Modified: trunk/src/layout_util.c
===================================================================
--- trunk/src/layout_util.c     2009-06-24 20:31:30 UTC (rev 1763)
+++ trunk/src/layout_util.c     2009-06-27 15:47:50 UTC (rev 1764)
@@ -27,6 +27,7 @@
 #include "filedata.h"
 #include "history_list.h"
 #include "image-overlay.h"
+#include "histogram.h"
 #include "img-view.h"
 #include "layout_image.h"
 #include "logwindow.h"
@@ -54,6 +55,7 @@
 
 static gboolean layout_bar_enabled(LayoutWindow *lw);
 static gboolean layout_bar_sort_enabled(LayoutWindow *lw);
+static void layout_util_sync_views(LayoutWindow *lw);
 
 /*
  *-----------------------------------------------------------------------------
@@ -647,27 +649,92 @@
 #endif
 }
 
-static void layout_menu_overlay_cb(GtkAction *action, gpointer data)
+static void layout_menu_overlay_toggle_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
 
        image_osd_toggle(lw->image);
+       layout_util_sync_views(lw);
 }
 
-static void layout_menu_histogram_chan_cb(GtkAction *action, gpointer data)
+
+static void layout_menu_overlay_cb(GtkToggleAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
+       GtkToggleAction *histogram_action = 
GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, 
"ImageHistogram"));
 
-       image_osd_histogram_chan_toggle(lw->image);
+       if (gtk_toggle_action_get_active(action))
+               {
+               OsdShowFlags flags = image_osd_get(lw->image);
+               
+               if (flags | OSD_SHOW_INFO | OSD_SHOW_STATUS != flags)
+                       image_osd_set(lw->image, flags | OSD_SHOW_INFO | 
OSD_SHOW_STATUS);
+               }
+       else
+               {
+               image_osd_set(lw->image, OSD_SHOW_NOTHING);
+               gtk_toggle_action_set_active(histogram_action, FALSE); /* this 
calls layout_menu_histogram_cb */
+               }
 }
 
-static void layout_menu_histogram_log_cb(GtkAction *action, gpointer data)
+static void layout_menu_histogram_cb(GtkToggleAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
+       GtkToggleAction *overlay_action = 
GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, 
"ImageOverlay"));
 
-       image_osd_histogram_log_toggle(lw->image);
+       if (gtk_toggle_action_get_active(action))
+               {
+               image_osd_set(lw->image, OSD_SHOW_INFO | OSD_SHOW_STATUS | 
OSD_SHOW_HISTOGRAM);
+               gtk_toggle_action_set_active(overlay_action, TRUE); /* this 
calls layout_menu_overlay_cb */
+               }
+       else
+               {
+               OsdShowFlags flags = image_osd_get(lw->image);
+               if (flags & OSD_SHOW_HISTOGRAM)
+                       image_osd_set(lw->image, flags & ~OSD_SHOW_HISTOGRAM);
+               }
 }
 
+static void layout_menu_histogram_toggle_channel_cb(GtkAction *action, 
gpointer data)
+{
+       LayoutWindow *lw = data;
+
+       image_osd_histogram_toggle_channel(lw->image);
+       layout_util_sync_views(lw);
+}
+
+static void layout_menu_histogram_toggle_mode_cb(GtkAction *action, gpointer 
data)
+{
+       LayoutWindow *lw = data;
+
+       image_osd_histogram_toggle_mode(lw->image);
+       layout_util_sync_views(lw);
+}
+
+static void layout_menu_histogram_channel_cb(GtkRadioAction *action, 
GtkRadioAction *current, gpointer data)
+{
+       LayoutWindow *lw = data;
+       gint channel = gtk_radio_action_get_current_value(action);
+       GtkToggleAction *histogram_action = 
GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, 
"ImageHistogram"));
+
+       if (channel < 0 || channel >= HCHAN_COUNT) return;
+       
+       gtk_toggle_action_set_active(histogram_action, TRUE); /* this calls 
layout_menu_histogram_cb */
+       image_osd_histogram_set_channel(lw->image, channel);
+}
+
+static void layout_menu_histogram_mode_cb(GtkRadioAction *action, 
GtkRadioAction *current, gpointer data)
+{
+       LayoutWindow *lw = data;
+       gint mode = gtk_radio_action_get_current_value(action);
+       GtkToggleAction *histogram_action = 
GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, 
"ImageHistogram"));
+
+       if (mode < 0 || mode > 1) return;
+       
+       gtk_toggle_action_set_active(histogram_action, TRUE); /* this calls 
layout_menu_histogram_cb */
+       image_osd_histogram_set_mode(lw->image, mode);
+}
+
 static void layout_menu_refresh_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
@@ -1229,6 +1296,7 @@
   { "ColorMenu",       NULL,                   N_("Color _Management"),        
        NULL,                   NULL,                                   NULL },
   { "ConnectZoomMenu", NULL,                   N_("_Connected Zoom"),          
        NULL,                   NULL,                                   NULL },
   { "SplitMenu",       NULL,                   N_("_Split"),                   
        NULL,                   NULL,                                   NULL },
+  { "OverlayMenu",     NULL,                   N_("_Image Overlay"),           
        NULL,                   NULL,                                   NULL },
   { "HelpMenu",                NULL,                   N_("_Help"),            
                NULL,                   NULL,                                   
NULL },
 
   { "FirstImage",      GTK_STOCK_GOTO_TOP,     N_("_First Image"),             
        "Home",                 N_("First Image"),                      
CB(layout_menu_image_first_cb) },
@@ -1315,9 +1383,9 @@
   { "FullScreenAlt2",  GTK_STOCK_FULLSCREEN,   N_("F_ull screen"),             
        "F11",                  N_("Full screen"),                      
CB(layout_menu_fullscreen_cb) },
   { "Escape",          GTK_STOCK_LEAVE_FULLSCREEN,N_("_Leave full screen"),    
        "Escape",               N_("Leave full screen"),                
CB(layout_menu_escape_cb) },
   { "EscapeAlt1",      GTK_STOCK_LEAVE_FULLSCREEN,N_("_Leave full screen"),    
        "Q",                    N_("Leave full screen"),                
CB(layout_menu_escape_cb) },
-  { "ImageOverlay",    NULL,                   N_("_Image Overlay"),           
        "I",                    N_("Image Overlay"),                    
CB(layout_menu_overlay_cb) },
-  { "HistogramChan",   NULL,                   N_("Histogram _channels"),      
        "K",                    N_("Histogram channels"),               
CB(layout_menu_histogram_chan_cb) },
-  { "HistogramLog",    NULL,                   N_("Histogram _log mode"),      
        "J",                    N_("Histogram log mode"),               
CB(layout_menu_histogram_log_cb) },
+  { "ImageOverlayCycle",NULL,                  N_("_Cycle through overlay 
modes"),     "I",                    N_("Cycle through Overlay modes"),      
CB(layout_menu_overlay_toggle_cb) },
+  { "HistogramChanCycle",NULL,                 N_("Cycle through histogram 
_channels"),"K",                    N_("Cycle through histogram channels"), 
CB(layout_menu_histogram_toggle_channel_cb) },
+  { "HistogramModeCycle",NULL,                 N_("Cycle through histogram 
_modes"),   "J",                    N_("Cycle through histogram modes"),    
CB(layout_menu_histogram_toggle_mode_cb) },
   { "HideTools",       NULL,                   N_("_Hide file list"),          
        "<control>H",           N_("Hide file list"),                   
CB(layout_menu_hide_cb) },
   { "SlideShowPause",  GTK_STOCK_MEDIA_PAUSE,  N_("_Pause slideshow"),         
        "P",                    N_("Pause slideshow"),                  
CB(layout_menu_slideshow_pause_cb) },
   { "Refresh",         GTK_STOCK_REFRESH,      N_("_Refresh"),                 
        "R",                    N_("Refresh"),                          
CB(layout_menu_refresh_cb) },
@@ -1342,6 +1410,8 @@
   { "UseColorProfiles",        GTK_STOCK_SELECT_COLOR, N_("Use _color 
profiles"),              NULL,                   N_("Use color profiles"),      
         CB(layout_color_menu_enable_cb), FALSE},
   { "UseImageProfile", NULL,                   N_("Use profile from _image"),  
        NULL,                   N_("Use profile from image"),           
CB(layout_color_menu_use_image_cb), FALSE},
   { "Grayscale",       NULL,                   N_("Toggle _grayscale"),        
        "<shift>G",             N_("Toggle grayscale"),                 
CB(layout_menu_alter_desaturate_cb), FALSE},
+  { "ImageOverlay",    NULL,                   N_("_Image Overlay"),           
        NULL,                   N_("Image Overlay"),                    
CB(layout_menu_overlay_cb),      FALSE },
+  { "ImageHistogram",  NULL,                   N_("_Show Histogram"),          
        NULL,                   N_("Show Histogram"),                   
CB(layout_menu_histogram_cb),    FALSE },
 };
 
 static GtkRadioActionEntry menu_radio_entries[] = {
@@ -1365,6 +1435,19 @@
   { "ColorProfile5",   NULL,                   N_("Input _5"),                 
        NULL,                   N_("Input 5"),                          
COLOR_PROFILE_FILE + 3 }
 };
 
+static GtkRadioActionEntry menu_histogram_channel[] = {
+  { "HistogramChanR",  NULL,                   N_("Histogram on _Red"),        
        NULL,                   N_("Histogram on Red"),         HCHAN_R },
+  { "HistogramChanG",  NULL,                   N_("Histogram on _Green"),      
        NULL,                   N_("Histogram on Green"),       HCHAN_G },
+  { "HistogramChanB",  NULL,                   N_("Histogram on _Blue"),       
        NULL,                   N_("Histogram on Blue"),        HCHAN_B },
+  { "HistogramChanRGB",        NULL,                   N_("Histogram on RGB"), 
                NULL,                   N_("Histogram on RGB"),         
HCHAN_RGB },
+  { "HistogramChanV",  NULL,                   N_("Histogram on Value"),       
        NULL,                   N_("Histogram on Value"),       HCHAN_MAX }
+};
+
+static GtkRadioActionEntry menu_histogram_mode[] = {
+  { "HistogramModeLin",        NULL,                   N_("Li_near 
Histogram"),                NULL,                   N_("Linear Histogram"),     
    0 },
+  { "HistogramModeLog",        NULL,                   N_("Lo_g Histogram"),   
                NULL,                   N_("Log Histogram"),            1 },
+};
+
 #undef CB
 
 static const gchar *menu_ui_description =
@@ -1509,9 +1592,22 @@
 "      </menu>"
 "      <placeholder name='DirSection'/>"
 "      <separator/>"
-"      <menuitem action='ImageOverlay'/>"
-"      <menuitem action='HistogramChan'/>"
-"      <menuitem action='HistogramLog'/>"
+"      <menu action='OverlayMenu'>"
+"        <menuitem action='ImageOverlay'/>"
+"        <menuitem action='ImageHistogram'/>"
+"        <menuitem action='ImageOverlayCycle'/>"
+"        <separator/>"
+"        <menuitem action='HistogramChanR'/>"
+"        <menuitem action='HistogramChanG'/>"
+"        <menuitem action='HistogramChanB'/>"
+"        <menuitem action='HistogramChanRGB'/>"
+"        <menuitem action='HistogramChanV'/>"
+"        <menuitem action='HistogramChanCycle'/>"
+"        <separator/>"
+"        <menuitem action='HistogramModeLin'/>"
+"        <menuitem action='HistogramModeLog'/>"
+"        <menuitem action='HistogramModeCycle'/>"
+"      </menu>"
 "      <menuitem action='FullScreen'/>"
 "      <placeholder name='OverlaySection'/>"
 "      <separator/>"
@@ -1832,6 +1928,12 @@
        gtk_action_group_add_radio_actions(lw->action_group,
                                           menu_color_radio_entries, 
COLOR_PROFILE_FILE + COLOR_PROFILE_INPUTS,
                                           0, 
G_CALLBACK(layout_color_menu_input_cb), lw);
+       gtk_action_group_add_radio_actions(lw->action_group,
+                                          menu_histogram_channel, 
G_N_ELEMENTS(menu_histogram_channel),
+                                          0, 
G_CALLBACK(layout_menu_histogram_channel_cb), lw);
+       gtk_action_group_add_radio_actions(lw->action_group,
+                                          menu_histogram_mode, 
G_N_ELEMENTS(menu_histogram_mode),
+                                          0, 
G_CALLBACK(layout_menu_histogram_mode_cb), lw);
 
 
        lw->ui_manager = gtk_ui_manager_new();
@@ -2163,6 +2265,7 @@
 static void layout_util_sync_views(LayoutWindow *lw)
 {
        GtkAction *action;
+       OsdShowFlags osd_flags = image_osd_get(lw->image);
 
        if (!lw->action_group) return;
 
@@ -2196,6 +2299,18 @@
        action = gtk_action_group_get_action(lw->action_group, "SlideShow");
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), 
layout_image_slideshow_active(lw));
 
+       action = gtk_action_group_get_action(lw->action_group, "ImageOverlay");
+       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), osd_flags != 
OSD_SHOW_NOTHING);
+
+       action = gtk_action_group_get_action(lw->action_group, 
"ImageHistogram");
+       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), osd_flags & 
OSD_SHOW_HISTOGRAM);
+
+       action = gtk_action_group_get_action(lw->action_group, 
"HistogramChanR");
+       radio_action_set_current_value(GTK_RADIO_ACTION(action), 
image_osd_histogram_get_channel(lw->image));
+
+       action = gtk_action_group_get_action(lw->action_group, 
"HistogramModeLin");
+       radio_action_set_current_value(GTK_RADIO_ACTION(action), 
image_osd_histogram_get_mode(lw->image));
+
        layout_util_sync_color(lw);
 }
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn

Reply via email to