[giv] Fixed sync between menus and functionality. Added default options.



commit 75bb5211ea423c3bb6ce9cfeb7c26f9506d716cc
Author: Dov Grobgeld <dov grobgeld gmail com>
Date:   Mon Apr 23 00:25:57 2012 +0300

    Fixed sync between menus and functionality. Added default options.

 ChangeLog                                 |    5 +
 SConstruct                                |    6 +-
 configure.in                              |    2 +-
 notes.org                                 |   14 ++-
 src/giv-settings-editor.gob               |   82 +++++++++
 src/giv-settings.gob                      |   23 +++
 src/giv-widget.gob                        |   94 +++++++----
 src/giv-win.gob                           |  262 ++++++++++++-----------------
 src/glib-jsonrpc/json-glib/json-scanner.h |    4 +-
 src/gtkimageviewer/gtk-image-viewer.gob   |   86 ++--------
 src/menu-popup.xml                        |    1 -
 src/menu-top.xml                          |    1 -
 12 files changed, 307 insertions(+), 273 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index ce38d19..c2701d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-04-22  Dov Grobgeld  <dov grobgeld gmail com>
+
+        * giv-win.gob : Changed toggle of balloon to be a function of the internal 
+        giv-widget state.
+
 2012-03-04  Dov Grobgeld  <dov grobgeld gmail com>
 
         * Added private copy of glib-jsonrpc.
diff --git a/SConstruct b/SConstruct
index c33ff11..317013d 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1,10 +1,10 @@
 import re, os, glob
 
 if ARGUMENTS.get('debug', 0):
-    cppflags = ['-g', '-Wall','-fPIC']
+    cppflags = ['-g', '-Wall']
     variant = 'Debug'
 else:
-    cppflags = ['-O2','-fPIC']
+    cppflags = ['-O2']
     variant = 'Release'
 
 env = Environment(LIBPATH=[],
@@ -130,7 +130,7 @@ env.Append(CPPPATH=[],
                  'json-glib_local']
            )
 
-env.ParseConfig("${PKGCONFIG} --cflags --libs gtk+-2.0 glib-2.0 gio-2.0 gthread-2.0")
+env.ParseConfig("${PKGCONFIG} --cflags --libs gtk+-2.0 glib-2.0 gio-2.0 gmodule-2.0 gthread-2.0")
 
 SConscript(['src/SConscript',
             'doc/SConscript',
diff --git a/configure.in b/configure.in
index a5fc32d..1f4bacb 100644
--- a/configure.in
+++ b/configure.in
@@ -5,7 +5,7 @@ AM_CONFIG_HEADER(config.h)
 PACKAGE=givwidget
 GIVWIDGET_API_VERSION=2.0
 
-AM_INIT_AUTOMAKE(giv, 0.9.22)
+AM_INIT_AUTOMAKE(giv, 0.9.23beta)
 
 dnl Use libtool to get shared libraries
 LT_PREREQ
diff --git a/notes.org b/notes.org
index f65cf16..c66aff1 100644
--- a/notes.org
+++ b/notes.org
@@ -20,4 +20,16 @@
 * <2012-01-06 Fri>
 ** Done/Todo
    - [ ] Create a command line tool for windows with a parser like the one included in giv.
-   
+* <2012-04-22 Sun>
+** Done/Todo
+    - Changed the menu checkbuttons to reflect the internal giv-widget states:
+      - [X] balloon
+      - [X] horizontal-flip
+      - [X] vertical-flip
+      - [X] show marks
+      - [X] cross hair - erased as it doesn't work.
+    - Save the following settings:
+      - [X] Sub pixel coordinate.
+      - [ ] Auto resize.
+
+    
diff --git a/src/giv-settings-editor.gob b/src/giv-settings-editor.gob
index f6de51c..6db9fee 100644
--- a/src/giv-settings-editor.gob
+++ b/src/giv-settings-editor.gob
@@ -29,6 +29,9 @@ class Giv:Settings:Editor from Gtk:Dialog
 {
     private GObject *giv_settings = NULL destroy { if (giv_settings) g_object_unref(giv_settings); };
     private GtkWidget *w_button_same_file_type = NULL;
+    private GtkWidget *w_button_default_show_subpixel = NULL;
+    private GtkWidget *w_button_default_auto_resize = NULL;
+    private GtkWidget *w_button_default_auto_contrast = NULL;
 
     public GtkWidget*
     new (GivSettings *giv_settings)
@@ -72,6 +75,79 @@ class Giv:Settings:Editor from Gtk:Dialog
                          GtkAttachOptions(0),
                          0,0);
 
+        // Default sub-pixel
+        row++;
+        gtk_table_attach(GTK_TABLE(w_table),
+                         label_left_new("Default subpixel"),
+                         1, 2,
+                         row, row+1,
+                         GtkAttachOptions(GTK_FILL|GTK_EXPAND),
+                         GtkAttachOptions(0),
+                         0,0);
+        
+        selfp->w_button_default_show_subpixel = check_button_new_from_bool(giv_settings->default_show_subpixel);
+        g_object_set(selfp->w_button_default_show_subpixel,
+                     "tooltip-markup",
+                     "Whether to turn on sub pixel display by default",
+                     NULL);
+
+        gtk_table_attach(GTK_TABLE(w_table),
+                         selfp->w_button_default_show_subpixel,
+                         2, 3,
+                         row, row+1,
+                         GtkAttachOptions(GTK_FILL|GTK_EXPAND),
+                         GtkAttachOptions(0),
+                         0,0);
+
+        // Default auto_resize
+        row++;
+        gtk_table_attach(GTK_TABLE(w_table),
+                         label_left_new("Default auto-resize"),
+                         1, 2,
+                         row, row+1,
+                         GtkAttachOptions(GTK_FILL|GTK_EXPAND),
+                         GtkAttachOptions(0),
+                         0,0);
+        
+        selfp->w_button_default_auto_resize = check_button_new_from_bool(giv_settings->default_auto_resize);
+        g_object_set(selfp->w_button_default_auto_resize,
+                     "tooltip-markup",
+                     "Whether to do auto resize by default",
+                     NULL);
+
+        gtk_table_attach(GTK_TABLE(w_table),
+                         selfp->w_button_default_auto_resize,
+                         2, 3,
+                         row, row+1,
+                         GtkAttachOptions(GTK_FILL|GTK_EXPAND),
+                         GtkAttachOptions(0),
+                         0,0);
+
+        // Default auto_contrast
+        row++;
+        gtk_table_attach(GTK_TABLE(w_table),
+                         label_left_new("Default auto-contrast"),
+                         1, 2,
+                         row, row+1,
+                         GtkAttachOptions(GTK_FILL|GTK_EXPAND),
+                         GtkAttachOptions(0),
+                         0,0);
+        
+        selfp->w_button_default_auto_contrast = check_button_new_from_bool(giv_settings->default_auto_contrast);
+        g_object_set(selfp->w_button_default_auto_contrast,
+                     "tooltip-markup",
+                     "Whether to do auto resize by default",
+                     NULL);
+
+        gtk_table_attach(GTK_TABLE(w_table),
+                         selfp->w_button_default_auto_contrast,
+                         2, 3,
+                         row, row+1,
+                         GtkAttachOptions(GTK_FILL|GTK_EXPAND),
+                         GtkAttachOptions(0),
+                         0,0);
+
+
         // Buttons
         gtk_dialog_add_button(GTK_DIALOG(self),
                               GTK_STOCK_APPLY,
@@ -100,6 +176,12 @@ class Giv:Settings:Editor from Gtk:Dialog
     {
         GIV_SETTINGS(selfp->giv_settings)->do_same_filetype_on_next
             = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(selfp->w_button_same_file_type));
+        GIV_SETTINGS(selfp->giv_settings)->default_show_subpixel
+            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(selfp->w_button_default_show_subpixel));
+        GIV_SETTINGS(selfp->giv_settings)->default_auto_resize
+            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(selfp->w_button_default_auto_resize));
+        GIV_SETTINGS(selfp->giv_settings)->default_auto_contrast
+            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(selfp->w_button_default_auto_contrast));
     }
 
 }
diff --git a/src/giv-settings.gob b/src/giv-settings.gob
index bc3519d..85c1303 100644
--- a/src/giv-settings.gob
+++ b/src/giv-settings.gob
@@ -17,6 +17,9 @@ requires 2.0.0
 
 class Giv:Settings from G:Object {
     public gboolean do_same_filetype_on_next = FALSE;
+    public gboolean default_show_subpixel = FALSE;
+    public gboolean default_auto_resize = FALSE;
+    public gboolean default_auto_contrast = FALSE;
     private char *keyfile_path = NULL destroy { g_free(keyfile_path); };
 
     public GObject *
@@ -38,6 +41,18 @@ class Giv:Settings from G:Object {
                                                                     "settings",
                                                                     "do_same_filetype_on_next",
                                                                     NULL);
+            self->default_show_subpixel = g_key_file_get_boolean(keyfile,
+                                                                 "settings",
+                                                                 "default_show_subpixel",
+                                                                 NULL);
+            self->default_auto_resize = g_key_file_get_boolean(keyfile,
+                                                                 "settings",
+                                                                 "default_auto_resize",
+                                                                 NULL);
+            self->default_auto_contrast = g_key_file_get_boolean(keyfile,
+                                                                 "settings",
+                                                                 "default_auto_contrast",
+                                                                 NULL);
         }
         else
             g_error_free(error);
@@ -56,6 +71,14 @@ class Giv:Settings from G:Object {
                                "settings",
                                "do_same_filetype_on_next",
                                self->do_same_filetype_on_next);
+        g_key_file_set_boolean(keyfile,
+                               "settings",
+                               "default_show_subpixel",
+                               self->default_show_subpixel);
+        g_key_file_set_boolean(keyfile,
+                               "settings",
+                               "default_auto_contrast",
+                               self->default_auto_contrast);
 
         gchar *data = g_key_file_to_data(keyfile,NULL, NULL);
         gchar *dirname = g_path_get_dirname(selfp->keyfile_path);
diff --git a/src/giv-widget.gob b/src/giv-widget.gob
index 6466d51..7534a2c 100644
--- a/src/giv-widget.gob
+++ b/src/giv-widget.gob
@@ -88,8 +88,8 @@ class Giv:Widget from Gtk:Image:Viewer
         };
                                   
     private bool is_dragging = FALSE;
-    private bool do_view_marks = TRUE;
-    private bool do_view_cross_hair = FALSE;
+    private bool do_show_marks = TRUE;
+    private bool do_show_cross_hair = FALSE;
     private bool do_show_balloon = FALSE;
     private bool do_no_transparency = FALSE;
     private bool do_show_grid = FALSE;
@@ -111,7 +111,7 @@ class Giv:Widget from Gtk:Image:Viewer
     {
         GivWidget *self = GET_NEW;
         if (pixbuf)
-            gdk_pixbuf_ref(pixbuf);
+            g_object_ref(pixbuf);
         selfp->img_org = pixbuf;
         selfp->giv_parser = giv_parser_new();
         giv_parser_set_reference_callback(selfp->giv_parser,
@@ -259,15 +259,13 @@ class Giv:Widget from Gtk:Image:Viewer
         printf("min_x min_y max_x max_y = %f %f %f %f\n",
                min_x, min_y, max_x, max_y);
 #endif
-        double scroll_x_dist, scroll_y_dist, scroll_x_center, scroll_y_center;
-        double scroll_min_x, scroll_min_y, scroll_max_x, scroll_max_y;
         double margin = 0;
         const GdkPixbuf *pb = gtk_image_viewer_get_image(GTK_IMAGE_VIEWER(self));
         
         if (pb) {
             int img_w = gdk_pixbuf_get_width(pb);
             int img_h = gdk_pixbuf_get_height(pb);
-            // gdk_pixbuf_unref(pb);
+            // g_object_unref(pb);
             
             min_x = min_y = 0;
             max_x = img_w;
@@ -276,16 +274,6 @@ class Giv:Widget from Gtk:Image:Viewer
         else {
             margin= 10;
             
-            scroll_x_dist = max_x - min_x;
-            scroll_y_dist = max_y - min_y;
-            scroll_x_center = 0.5*(max_x + min_x);
-            scroll_y_center = 0.5*(max_y + min_y);
-            
-            scroll_min_x = scroll_x_center - scroll_x_dist * 0.5;
-            scroll_max_x = scroll_x_center + scroll_x_dist * 0.5;
-            scroll_min_y = scroll_y_center - scroll_y_dist * 0.5;
-            scroll_max_y = scroll_y_center + scroll_y_dist * 0.5;
-            
             // The following is a hack around the problem of too thin
             // data in x or y... It should be solved in the gtk_image_viewer.
             if (max_x - min_x < max_y-min_y) {
@@ -328,15 +316,15 @@ class Giv:Widget from Gtk:Image:Viewer
                    GdkPixbuf *img)
     {
         if (selfp->img_org)
-            gdk_pixbuf_unref(selfp->img_org);
+            g_object_unref(selfp->img_org);
         if (selfp->img_display) {
-            gdk_pixbuf_unref(selfp->img_display);
+            g_object_unref(selfp->img_display);
             selfp->img_display = NULL;
         }
 
         selfp->img_org = img;
         if (selfp->img_org) {
-            gdk_pixbuf_ref(selfp->img_org);
+            g_object_ref(selfp->img_org);
             apply_color_map(self);
         }
 
@@ -402,7 +390,7 @@ class Giv:Widget from Gtk:Image:Viewer
             gtk_image_viewer_redraw(GTK_IMAGE_VIEWER(self), true);
             return 1;
         case 'm':
-            giv_widget_set_show_marks(self, !selfp->do_view_marks);
+            giv_widget_set_show_marks(self, !selfp->do_show_marks);
             gtk_image_viewer_redraw(GTK_IMAGE_VIEWER(self), true);
             return 1;
         case 'g':
@@ -410,7 +398,7 @@ class Giv:Widget from Gtk:Image:Viewer
             gtk_image_viewer_redraw(GTK_IMAGE_VIEWER(self), true);
             return 1;
         case 'x':
-            giv_widget_set_show_cross_hair(self, !selfp->do_view_cross_hair);
+            giv_widget_set_show_cross_hair(self, !selfp->do_show_cross_hair);
             gtk_image_viewer_redraw(GTK_IMAGE_VIEWER(self), true);
             return 1;
         case 'f':
@@ -501,26 +489,61 @@ class Giv:Widget from Gtk:Image:Viewer
                              do_show_balloon);
     }
 
+    public bool get_show_balloon(self)
+    {
+        return selfp->do_show_balloon;
+    }
+
+    public void toggle_show_balloon(self)
+    {
+        giv_widget_set_show_balloon(self,!selfp->do_show_balloon);
+    }
+
     public void set_show_marks(self,
                                gboolean do_show_marks)
     {
-        gboolean need_signal = selfp->do_view_marks != do_show_marks;
-        selfp->do_view_marks = do_show_marks;
-        if (need_signal)
-            emit_bool_signal(self,
-                             VIEW_MARKS_CHANGED_SIGNAL,
-                             do_show_marks);
+        gboolean need_signal = selfp->do_show_marks != do_show_marks;
+        selfp->do_show_marks = do_show_marks;
+        if (need_signal) {
+            giv_widget_show_marks_changed(self,do_show_marks);
+            gtk_image_viewer_redraw(GTK_IMAGE_VIEWER(self),TRUE);
+        }
+    }
+
+    public bool get_show_marks(self)
+    {
+        return selfp->do_show_marks;
+    }
+
+    public void toggle_show_marks(self)
+    {
+        giv_widget_set_show_marks(self,!selfp->do_show_marks);
     }
 
     public void set_show_cross_hair(self,
                                     gboolean do_show_cross_hair)
     {
-        gboolean need_signal = selfp->do_view_cross_hair != do_show_cross_hair;
-        selfp->do_view_cross_hair = do_show_cross_hair;
+        gboolean need_signal = selfp->do_show_cross_hair != do_show_cross_hair;
+        selfp->do_show_cross_hair = do_show_cross_hair;
         if (need_signal)
+            giv_widget_cross_hair_changed(self,
+                                          do_show_cross_hair);
+#if 0
             emit_bool_signal(self,
                              CROSS_HAIR_CHANGED_SIGNAL,
                              do_show_cross_hair);
+#endif
+        
+    }
+
+    public bool get_show_cross_hair(self)
+    {
+        return selfp->do_show_cross_hair;
+    }
+
+    public void toggle_show_cross_hair(self)
+    {
+        giv_widget_set_show_cross_hair(self,!selfp->do_show_cross_hair);
     }
 
     signal last NONE (INT)
@@ -532,11 +555,12 @@ class Giv:Widget from Gtk:Image:Viewer
                             gboolean show_cross_hair);
 
     signal last NONE (INT)
-    void view_marks_changed(self,
+    void show_marks_changed(self,
                             gboolean show_marks);
 
     signal last NONE (POINTER)
     void file_reference(self, const gchar *filename);
+
 }
 
 %{
@@ -572,14 +596,14 @@ cb_image_annotate(GivWidget *self,
                          shift_x, shift_y,
                          width, height);
     renderer.set_do_no_transparency(selfp->do_no_transparency);
-    if (!selfp->is_dragging && selfp->do_view_marks)
+    if (!selfp->is_dragging && selfp->do_show_marks)
         renderer.paint();
 
     gint li_width, li_height;
     gdk_window_get_size(GTK_WIDGET(self)->window, 
                         &li_width, &li_height
                         );
-    if (selfp->do_view_cross_hair && selfp->img_org) {
+    if (selfp->do_show_cross_hair && selfp->img_org) {
         int w = gdk_pixbuf_get_width(selfp->img_org);
         int h = gdk_pixbuf_get_height(selfp->img_org);
 
@@ -647,7 +671,7 @@ cb_image_annotate(GivWidget *self,
         gint li_shift_x, li_shift_y;
         gdouble li_scale_x, li_scale_y;
         if (selfp->w_label_image)
-            gdk_pixbuf_unref(selfp->w_label_image);
+            g_object_unref(selfp->w_label_image);
 
         selfp->w_label_image = gdk_pixbuf_new(GDK_COLORSPACE_RGB,
                                               TRUE,
@@ -718,13 +742,13 @@ apply_color_map(GivWidget *self)
     if (!selfp->img_org)
         return;
     if (selfp->img_display)
-        gdk_pixbuf_unref(selfp->img_display);
+        g_object_unref(selfp->img_display);
 
     if (selfp->colormap == GIV_PSEUDO_COLOR_OFF
         //        || !selfp->img_is_mono
         ) {
         selfp->img_display = selfp->img_org;
-        gdk_pixbuf_ref(selfp->img_display);
+        g_object_ref(selfp->img_display);
     }
     else {
         int width = gdk_pixbuf_get_width(selfp->img_org);
diff --git a/src/giv-win.gob b/src/giv-win.gob
index bc517ca..5441b10 100644
--- a/src/giv-win.gob
+++ b/src/giv-win.gob
@@ -103,7 +103,6 @@ static void cb_view_sub_pixel (GtkAction *action, gpointer data);
 static void cb_view_hflip (GtkAction *action, gpointer data);
 static void cb_view_vflip (GtkAction *action, gpointer data);
 static void cb_view_colormap (GtkAction *action, gpointer data);
-static void cb_view_cross_hair (GtkAction *action, gpointer data);
 static void cb_view_pixel_grid (GtkAction *action, gpointer data);
 static void cb_view_auto_resize (GtkAction *action, gpointer data);
 static void cb_view_auto_contrast (GtkAction *action, gpointer data);
@@ -130,7 +129,6 @@ static void cb_menu_print (GtkAction *action, gpointer data);
 static void cb_menu_mark_browser (GtkAction *action, gpointer data);
 static void cb_menu_contrast_view (GtkAction *action, gpointer data);
 static void cb_menu_info_dialog (GtkAction *action, gpointer data);
-static gboolean giv_check_img_for_mono(GdkPixbuf *im);
 static gboolean giv_check_img_for_mono(GivImage *im);
 static void cb_change_pseudo_color(GtkRadioAction* action,
                                    GtkRadioAction*,
@@ -138,10 +136,15 @@ static void cb_change_pseudo_color(GtkRadioAction* action,
 static void cb_image_reference(GtkWidget *widget,
                                const char *filename,
                                gpointer user_data);
-static void cb_set_orientation(giv_parser_orientation_t hflip,
-                               giv_parser_orientation_t vflip,
-                               gpointer self);
 static void menu_add_widget (GtkUIManager *ui, GtkWidget *widget, GtkContainer *container);
+static void
+cb_balloon_changed(GtkWidget *widget,
+                   bool show_balloon,
+                   gpointer data);
+static void
+cb_marks_changed(GtkWidget *widget,
+                 bool show_balloon,
+                 gpointer data);
 
 static void
 cb_file_list_drag_data_received (GtkWidget          *widget,
@@ -374,11 +377,6 @@ static GtkToggleActionEntry toggle_entries[] =
     "Colormap Bar", NULL,    
     "Colormap Bar",
     G_CALLBACK (cb_view_colormap), FALSE },
-  { "ViewCrossHair",
-    NULL,
-    "View Cross Hair", NULL,    
-    "View Cross hair",
-    G_CALLBACK (cb_view_cross_hair), FALSE },
   { "ViewPixelGrid",
     NULL,
     "View Pixel Grid", NULL,    
@@ -470,13 +468,13 @@ class Giv:Win from Gtk:Window
 //    private GdkPixbuf *img_org = NULL
 //        destroy {
 //            if (img_org) {
-//                gdk_pixbuf_unref(img_org);
+//                g_object_unref(img_org);
 //            };
 //        };
     private GdkPixbuf *img_display = NULL
         destroy {
             if (img_display) {
-                gdk_pixbuf_unref(img_display);
+                g_object_unref(img_display);
             };
         };
         
@@ -485,18 +483,14 @@ class Giv:Win from Gtk:Window
     private GdkPixbuf *w_label_image = NULL
         destroy {
             if (w_label_image) {
-                gdk_pixbuf_unref(w_label_image);
+                g_object_unref(w_label_image);
             };
         };
     private gint cb_annotate_id;
     private bool do_view_marks = true;
     private bool do_view_colormap = false;
     private bool img_is_mono = false;
-    private bool do_show_balloon = false;
     private bool do_show_sub_pixel = false;
-    private bool do_flip_horizontal = false;
-    private bool do_flip_vertical = false;
-    private bool do_view_cross_hair = false;
     private bool do_square_aspect_ratio = true;
     private bool do_auto_fit_marks = TRUE;
     private bool do_auto_reload = FALSE;
@@ -724,7 +718,7 @@ class Giv:Win from Gtk:Window
         
         gtk_window_set_icon (GTK_WINDOW(self),
                              pixbuf_icon);
-        gdk_pixbuf_unref(pixbuf_icon);
+        g_object_unref(pixbuf_icon);
 
         num_top_levels++;
         g_signal_connect (G_OBJECT(self), "destroy",
@@ -825,6 +819,14 @@ class Giv:Win from Gtk:Window
                          "image-annotate",
                          G_CALLBACK(cb_image_annotate),
                          self);
+        g_signal_connect(selfp->w_imgv,
+                         "balloon-changed",
+                         G_CALLBACK(cb_balloon_changed),
+                         self);
+        g_signal_connect(selfp->w_imgv,
+                         "show-marks-changed",
+                         G_CALLBACK(cb_marks_changed),
+                         self);
 
         // Scrolling is like moving
         g_signal_connect(selfp->w_imgv, "scroll-event",
@@ -924,6 +926,18 @@ class Giv:Win from Gtk:Window
 
         gdk_flush();
 
+        // Apply settings
+        gtk_check_menu_item_set_active(
+          GTK_CHECK_MENU_ITEM(
+            gtk_ui_manager_get_widget(selfp->menu_manager,
+                                      "/menubar/ViewMenu/Sub-pixel")),
+          selfp->giv_settings->default_show_subpixel);
+        gtk_check_menu_item_set_active(
+          GTK_CHECK_MENU_ITEM(
+            gtk_ui_manager_get_widget(selfp->menu_manager,
+                                      "/menubar/ViewMenu/AutoResize")),
+          selfp->giv_settings->default_auto_resize);
+
         // Handle the command line
         if (argc == argp+1) {
             char *filename = argv[argp++];
@@ -1093,7 +1107,7 @@ class Giv:Win from Gtk:Window
         if (selfp->img_org)
             giv_image_unref(selfp->img_org);
         if (selfp->img_display) {
-            gdk_pixbuf_unref(selfp->img_display);
+            g_object_unref(selfp->img_display);
             selfp->img_display = NULL;
         }
 
@@ -1250,7 +1264,7 @@ class Giv:Win from Gtk:Window
                 selfp->img_org = NULL;
             }
             if (selfp->img_display) {
-                gdk_pixbuf_unref(selfp->img_display);
+                g_object_unref(selfp->img_display);
                 selfp->img_display = NULL;
             }
 
@@ -1394,7 +1408,7 @@ class Giv:Win from Gtk:Window
         if (selfp->img_org)
             giv_image_unref(selfp->img_org);
         if (selfp->img_display)
-            gdk_pixbuf_ref(selfp->img_display);
+            g_object_ref(selfp->img_display);
         selfp->img_org = image;
         apply_color_map(self);
         gtk_image_viewer_set_image(GTK_IMAGE_VIEWER(selfp->w_imgv),
@@ -1603,6 +1617,48 @@ menu_add_widget (GtkUIManager *ui, GtkWidget *widget, GtkContainer *container)
     gtk_widget_show (widget);
 }
 
+static void
+cb_balloon_changed(GtkWidget *widget,
+                   bool show_balloon,
+                   gpointer data)
+{
+    GivWin *self = GIV_WIN(data);
+
+    gtk_check_menu_item_set_active(
+        GTK_CHECK_MENU_ITEM(
+            gtk_ui_manager_get_widget(selfp->popup_manager,
+                                      "/popup/ViewMenu/Balloons")),
+        show_balloon);
+
+    gtk_check_menu_item_set_active(
+        GTK_CHECK_MENU_ITEM(
+            gtk_ui_manager_get_widget(selfp->menu_manager,
+                                      "/menubar/ViewMenu/Balloons")),
+        show_balloon);
+
+}
+
+static void
+cb_marks_changed(GtkWidget *widget,
+                 bool show_marks,
+                 gpointer data)
+{
+    GivWin *self = GIV_WIN(data);
+
+    gtk_check_menu_item_set_active(
+        GTK_CHECK_MENU_ITEM(
+            gtk_ui_manager_get_widget(selfp->popup_manager,
+                                      "/popup/ViewMenu/Marks")),
+        show_marks);
+
+    gtk_check_menu_item_set_active(
+        GTK_CHECK_MENU_ITEM(
+            gtk_ui_manager_get_widget(selfp->menu_manager,
+                                      "/menubar/ViewMenu/Marks")),
+        show_marks);
+}
+
+
 static gint
 cb_button_press_event (GtkWidget * widget,
                        GdkEventButton * event,
@@ -1698,6 +1754,8 @@ cb_key_press_event (GtkWidget * widget,
                     gpointer user_data)
 {
     GivWin *self = (GivWin *)user_data;
+    gboolean handled = FALSE;
+
     gint k = event->keyval;
     if (k == 'a') {
         selfp->do_no_transparency = !selfp->do_no_transparency;
@@ -1833,33 +1891,6 @@ cb_key_press_event (GtkWidget * widget,
             }
         }
     }
-    if (k == 'm') {
-        // Toggle the marks by pressing the toggle button in the menu.
-        // Is there a better way?
-        gtk_check_menu_item_set_active(
-            GTK_CHECK_MENU_ITEM(
-                gtk_ui_manager_get_widget(selfp->menu_manager,
-                                          "/menubar/ViewMenu/Marks")),
-            !selfp->do_view_marks);
-    }
-    if (k == 'c') {
-        // Toggle the marks by pressing the toggle button in the menu.
-        // Is there a better way?
-        gtk_check_menu_item_set_active(
-            GTK_CHECK_MENU_ITEM(
-                gtk_ui_manager_get_widget(selfp->menu_manager,
-                                          "/menubar/ViewMenu/CrossHair")),
-            !selfp->do_view_cross_hair);
-    }
-    if (k == 'b') {
-        // Toggle the marks by pressing the toggle button in the menu.
-        // Is there a better way?
-        gtk_check_menu_item_set_active(
-            GTK_CHECK_MENU_ITEM(
-                gtk_ui_manager_get_widget(selfp->menu_manager,
-                                          "/menubar/ViewMenu/Balloons")),
-            !selfp->do_show_balloon);
-    }
     if (k == 'i') {
 #if 0
         // TBD: create a popup window
@@ -1870,7 +1901,7 @@ cb_key_press_event (GtkWidget * widget,
 #endif
     }
     
-    return 0;
+    return handled;
 }
 
 static gint
@@ -2038,109 +2069,52 @@ static void cb_view_menu_bar (GtkAction *action, gpointer data)
 static void cb_view_marks (GtkAction *action, gpointer data)
 {
     GivWin *self = GIV_WIN(data);
-    GSList *proxies = NULL;
-    GSList *p;
-
-    if (action)
-        proxies = gtk_action_get_proxies(action);
-    selfp->do_view_marks = !selfp->do_view_marks;
-
-    // Block to prevent an infinite loop of activating and deactivating.
-    p = proxies;
-    while(p) {
-        gtk_action_block_activate_from(action, GTK_WIDGET(p->data));
-        p = p->next;
-    }
-                                   
-    gtk_check_menu_item_set_active(
-        GTK_CHECK_MENU_ITEM(
-            gtk_ui_manager_get_widget(selfp->menu_manager,
-                                      "/menubar/ViewMenu/Marks")),
-        selfp->do_view_marks);
-    gtk_check_menu_item_set_active(
-        GTK_CHECK_MENU_ITEM(
-            gtk_ui_manager_get_widget(selfp->popup_manager,
-                                      "/popup/ViewMenu/Marks")),
-        selfp->do_view_marks);
-    
-    p = proxies;
-    while(p) {
-        gtk_action_unblock_activate_from(action, GTK_WIDGET(p->data));
-        p = p->next;
-    }
-    
-    giv_win_redraw(self);
+    gboolean do_view_marks = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+    giv_widget_set_show_marks(GIV_WIDGET(selfp->w_imgv),do_view_marks);
 }
 
 static void cb_view_balloons (GtkAction *action, gpointer data)
 {
     GivWin *self = GIV_WIN(data);
-    GSList *proxies = NULL;
-    GSList *p;
-
-    if (action)
-        proxies = gtk_action_get_proxies(action);
-    selfp->do_show_balloon = !selfp->do_show_balloon;
-
-    // Block to prevent an infinite loop of activating and deactivating.
-    p = proxies;
-    while(p) {
-        gtk_action_block_activate_from(action, GTK_WIDGET(p->data));
-        p = p->next;
-    }
-                                   
-    gtk_check_menu_item_set_active(
-        GTK_CHECK_MENU_ITEM(
-            gtk_ui_manager_get_widget(selfp->menu_manager,
-                                      "/menubar/ViewMenu/Balloons")),
-        selfp->do_show_balloon);
-    gtk_check_menu_item_set_active(
-        GTK_CHECK_MENU_ITEM(
-            gtk_ui_manager_get_widget(selfp->popup_manager,
-                                      "/popup/ViewMenu/Balloons")),
-        selfp->do_show_balloon);
-    
-    p = proxies;
-    while(p) {
-        gtk_action_unblock_activate_from(action, GTK_WIDGET(p->data));
-        p = p->next;
-    }
+    giv_widget_set_show_balloon(GIV_WIDGET(selfp->w_imgv),
+                                gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)));
 
-    // Force redraw to calculate the label image
-    giv_win_popdown_balloon(self);
-    if (selfp->do_show_balloon) {
-        // Force redraw to calculate the label image
-        giv_win_redraw(self);
-        giv_widget_show_balloon(GIV_WIDGET(selfp->w_imgv),
-                                (int)selfp->last_cx, (int)selfp->last_cy);
-    }
 }
 
 static void cb_view_sub_pixel (GtkAction *action, gpointer data)
 {
     GivWin *self = GIV_WIN(data);
 
-    selfp->do_show_sub_pixel = !selfp->do_show_sub_pixel;
+    selfp->do_show_sub_pixel = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
 }
 
 static void cb_view_hflip (GtkAction *action, gpointer data)
 {
     GivWin *self = GIV_WIN(data);
+    gboolean do_vertical_flip, do_horizontal_flip;
+    gtk_image_viewer_get_flip(GTK_IMAGE_VIEWER(selfp->w_imgv),
+                              &do_horizontal_flip,
+                              &do_vertical_flip);
+    do_horizontal_flip = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
 
-    selfp->do_flip_horizontal = !selfp->do_flip_horizontal;
     gtk_image_viewer_set_flip(GTK_IMAGE_VIEWER(selfp->w_imgv),
-                              selfp->do_flip_horizontal,
-                              selfp->do_flip_vertical);
+                              do_horizontal_flip,
+                              do_vertical_flip);
 }
 
 static void cb_view_vflip (GtkAction *action, gpointer data)
 {
     GivWin *self = GIV_WIN(data);
 
-    selfp->do_flip_vertical = !selfp->do_flip_vertical;
+    gboolean do_vertical_flip, do_horizontal_flip;
+    gtk_image_viewer_get_flip(GTK_IMAGE_VIEWER(selfp->w_imgv),
+                              &do_horizontal_flip,
+                              &do_vertical_flip);
+    do_vertical_flip = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+
     gtk_image_viewer_set_flip(GTK_IMAGE_VIEWER(selfp->w_imgv),
-                              selfp->do_flip_horizontal,
-                              selfp->do_flip_vertical);
+                              do_horizontal_flip,
+                              do_vertical_flip);
 }
 
 static void cb_view_colormap (GtkAction *action, gpointer data)
@@ -2158,25 +2132,11 @@ static void cb_view_colormap (GtkAction *action, gpointer data)
         gtk_widget_hide(selfp->w_color_map_bar);
 }
 
-static void cb_view_cross_hair (GtkAction *action, gpointer data)
-{
-    GivWin *self = GIV_WIN(data);
-
-    selfp->do_view_cross_hair = !selfp->do_view_cross_hair;
-    gtk_check_menu_item_set_active(
-        GTK_CHECK_MENU_ITEM(
-            gtk_ui_manager_get_widget(selfp->menu_manager,
-                                      "/menubar/ViewMenu/CrossHair")),
-        selfp->do_view_cross_hair);
-
-    giv_win_redraw(self);
-}
-
 static void cb_view_pixel_grid (GtkAction *action, gpointer data)
 {
     GivWin *self = GIV_WIN(data);
     GtkWidget *menu_widget = gtk_ui_manager_get_widget(selfp->menu_manager,
-                                                       "/menubar/ViewMenu/CrossHair");
+                                                       "/menubar/ViewMenu/ViewPixelGrid");
 
     gboolean old_val = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu_widget));
     giv_widget_set_show_grid(GIV_WIDGET(selfp->w_imgv), !old_val);
@@ -2554,7 +2514,7 @@ cb_menu_clear (GtkAction *action, gpointer data)
     giv_widget_clear_giv(GIV_WIDGET(selfp->w_imgv));
     giv_image_unref(selfp->img_org);
     selfp->img_org = NULL;
-    gdk_pixbuf_unref(selfp->img_display);
+    g_object_unref(selfp->img_display);
     selfp->img_display = NULL;
     gtk_image_viewer_set_image(GTK_IMAGE_VIEWER(selfp->w_imgv), NULL);
     
@@ -2856,8 +2816,8 @@ void draw_to_cairo(cairo_t *cr,
     cairo_set_source_surface(cr, img_srf, 0, 0);
     cairo_paint(cr);
     cairo_surface_destroy(img_srf);
-    gdk_pixbuf_unref(cimg);
-    gdk_pixbuf_unref(img_scaled);
+    g_object_unref(cimg);
+    g_object_unref(img_scaled);
 #else
     if (selfp->img_display) {
         // Draw img_display
@@ -2881,7 +2841,7 @@ void draw_to_cairo(cairo_t *cr,
         cairo_paint(cr);
         cairo_restore(cr);
         cairo_surface_destroy(img_srf);
-        gdk_pixbuf_unref(cimg);
+        g_object_unref(cimg);
     }
 
     if (selfp->do_view_marks) {
@@ -3099,10 +3059,6 @@ cb_flip_changed(GtkImageViewer *imgv,
                 gpointer data)
 {
     GivWin *self = GIV_WIN(data);
-#if 0
-    selfp->do_flip_vertical = do_flip_vertical;
-    selfp->do_flip_horizontal = do_flip_horizontal;
-#endif
 
     gtk_check_menu_item_set_active(
         GTK_CHECK_MENU_ITEM(
@@ -3297,14 +3253,14 @@ apply_color_map(GivWin *self)
                                                  min, max);
     
     if (selfp->img_display)
-        gdk_pixbuf_unref(selfp->img_display);
+        g_object_unref(selfp->img_display);
 
     const guint8 *tmap = NULL;
     if (selfp->colormap == PSEUDO_COLOR_OFF
         //        || !selfp->img_is_mono
         ) {
         selfp->img_display = org_pixbuf;
-        gdk_pixbuf_ref(selfp->img_display);
+        g_object_ref(selfp->img_display);
     }
     else {
         int width = gdk_pixbuf_get_width(org_pixbuf);
@@ -3406,7 +3362,7 @@ apply_color_map(GivWin *self)
     gtk_image_viewer_set_image(GTK_IMAGE_VIEWER(selfp->w_imgv),
                                selfp->img_display);
 #endif
-    gdk_pixbuf_unref(org_pixbuf);
+    g_object_unref(org_pixbuf);
 
     // Notify the colorbar
     giv_color_map_set_rgb_colormap(GIV_COLOR_MAP(selfp->w_color_map_bar),
@@ -3955,7 +3911,7 @@ draw_caliper(GivWin *self,
     if (lasso_context == DOVTK_LASSO_CONTEXT_LABEL)
         return;
 
-#if 0 
+#if _WIN32
     // This is stil broken!
 
     // As I can't get pango cairo to work under Windows, I use the specific windows
diff --git a/src/glib-jsonrpc/json-glib/json-scanner.h b/src/glib-jsonrpc/json-glib/json-scanner.h
index 49d7b1e..e3df02c 100644
--- a/src/glib-jsonrpc/json-glib/json-scanner.h
+++ b/src/glib-jsonrpc/json-glib/json-scanner.h
@@ -34,9 +34,7 @@
 #ifndef __JSON_SCANNER_H__
 #define __JSON_SCANNER_H__
 
-#include <glib/gdataset.h>
-#include <glib/ghash.h>
-#include <glib/gscanner.h>
+#include <glib.h>
 
 G_BEGIN_DECLS
 
diff --git a/src/gtkimageviewer/gtk-image-viewer.gob b/src/gtkimageviewer/gtk-image-viewer.gob
index 8b2d566..04b5671 100644
--- a/src/gtkimageviewer/gtk-image-viewer.gob
+++ b/src/gtkimageviewer/gtk-image-viewer.gob
@@ -1098,12 +1098,6 @@ class Gtk:Image:Viewer from Gtk:Widget
            selfp->frozen);
 #endif
     if (!selfp->frozen) {
-        GValue ___param_values[6];
-        GValue ___return_val;
-        int i;
-
-        int signal_shift_x = offs_x;
-        int signal_shift_y = offs_y;
         double signal_scale_x = scale_x;
         double signal_scale_y = scale_y;
 
@@ -1112,43 +1106,13 @@ class Gtk:Image:Viewer from Gtk:Widget
           signal_scale_x = -signal_scale_x;
         if (selfp->do_flip_vertical)
           signal_scale_y = -signal_scale_y;
-              
-        memset (&___return_val, 0, sizeof (___return_val));
-        memset (&___param_values, 0, sizeof (___param_values));
-        
-        ___param_values[0].g_type = 0;
-        g_value_init (&___param_values[0], G_TYPE_FROM_INSTANCE (self));
-        g_value_set_instance (&___param_values[0], (gpointer) self);
-        
-        ___param_values[1].g_type = 0;
-        g_value_init (&___param_values[1], G_TYPE_POINTER);
-        g_value_set_pointer (&___param_values[1], img_scaled);
-        
-        ___param_values[2].g_type = 0;
-        g_value_init (&___param_values[2], G_TYPE_INT);
-        g_value_set_int (&___param_values[2], -signal_shift_x);
-        
-        ___param_values[3].g_type = 0;
-        g_value_init (&___param_values[3], G_TYPE_INT);
-        g_value_set_int (&___param_values[3], -signal_shift_y);
-        
-        ___param_values[4].g_type = 0;
-        g_value_init (&___param_values[4], G_TYPE_DOUBLE);
-        g_value_set_double (&___param_values[4], signal_scale_x);
-        
-        ___param_values[5].g_type = 0;
-        g_value_init (&___param_values[5], G_TYPE_DOUBLE);
-        g_value_set_double (&___param_values[5], signal_scale_y);
-        
-        //        printf("Emitting!\n");
-        g_signal_emitv (___param_values,
-                        object_signals[IMAGE_ANNOTATE_SIGNAL],
-                        0 /* detail */,
-                        &___return_val);
-        
-        //printf("Done emitting!\n");
-        for (i=0; i<6; i++)
-            g_value_unset (&___param_values[i]);
+
+        gtk_image_viewer_image_annotate(self,
+                                        img_scaled,
+                                        -offs_x,
+                                        -offs_y,
+                                        signal_scale_x,
+                                        signal_scale_y);
     }
 
     // Add checkerboard below images that have alpha channel
@@ -1778,39 +1742,11 @@ class Gtk:Image:Viewer from Gtk:Widget
       need_signal =TRUE;
     }
 
-    if (need_signal)
-      {
-        // Emit flip signal
-        {
-          GValue ___param_values[3];
-          GValue ___return_val;
-          int i;
-          
-          memset (&___return_val, 0, sizeof (___return_val));
-          memset (&___param_values, 0, sizeof (___param_values));
-          
-          ___param_values[0].g_type = 0;
-          g_value_init (&___param_values[0], G_TYPE_FROM_INSTANCE (self));
-          g_value_set_instance (&___param_values[0], (gpointer) self);
-          
-          ___param_values[1].g_type = 0;
-          g_value_init (&___param_values[1], G_TYPE_INT);
-          g_value_set_int (&___param_values[1], selfp->do_flip_horizontal);
-          
-          ___param_values[2].g_type = 0;
-          g_value_init (&___param_values[2], G_TYPE_INT);
-          g_value_set_int (&___param_values[2], selfp->do_flip_vertical);
-          
-          g_signal_emitv (___param_values,
-                          object_signals[FLIP_CHANGED_SIGNAL],
-                          0 /* detail */,
-                          &___return_val);
-          
-          for (i=0; i<3; i++)
-            g_value_unset (&___param_values[i]);
-          
+    if (need_signal) {
+          gtk_image_viewer_flip_changed(self,
+                                        selfp->do_flip_horizontal,
+                                        selfp->do_flip_vertical);
           gtk_image_viewer_redraw(self, TRUE);
-        }
       }
   }
 
diff --git a/src/menu-popup.xml b/src/menu-popup.xml
index cdfa2c8..2bf2d58 100644
--- a/src/menu-popup.xml
+++ b/src/menu-popup.xml
@@ -17,7 +17,6 @@
       <menuitem name="Balloons" action="ViewBalloonAction" />
       <menuitem name="HorizontalFlip" action="ViewHorizontalFlip" />
       <menuitem name="VerticalFlip" action="ViewVerticalFlip" />
-      <menuitem name="CrossHair" action="ViewCrossHair" />
       <menuitem name="AutoResize" action="AutoResize" />
       <menu name="ColorTableMenu" action="ColorTableMenuAction">
         <menuitem name="PseudoColorOff" action="PseudoColorNone" />
diff --git a/src/menu-top.xml b/src/menu-top.xml
index 0273c16..5636d26 100644
--- a/src/menu-top.xml
+++ b/src/menu-top.xml
@@ -16,7 +16,6 @@
       <menuitem name="Balloons" action="ViewBalloonAction" />
       <menuitem name="HorizontalFlip" action="ViewHorizontalFlip" />
       <menuitem name="VerticalFlip" action="ViewVerticalFlip" />
-      <menuitem name="CrossHair" action="ViewCrossHair" />
       <menuitem name="Pixel-grid" action="ViewPixelGrid" />
       <menuitem name="ColorMapBar" action="ViewColorMap" />
       <menuitem name="AutoResize" action="AutoResize" />



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]