[gimp] app: add gimp_rectangle_options_connect() and _disconnect()



commit 2f0963589bf3e7f90587e7130d31e72ebc6f4a56
Author: Michael Natterer <mitch gimp org>
Date:   Mon Jun 26 18:32:05 2017 +0200

    app: add gimp_rectangle_options_connect() and _disconnect()
    
    and use the new function from GimpRectangleTool. We need this also in
    the new GimpToolWidget-base code, so it has to move out of
    gimprectangletool.c.

 app/tools/gimprectangleoptions.c |  107 ++++++++++++++++++++++++++++++++++++++
 app/tools/gimprectangleoptions.h |    8 +++
 app/tools/gimprectangletool.c    |   98 ++++-------------------------------
 3 files changed, 126 insertions(+), 87 deletions(-)
---
diff --git a/app/tools/gimprectangleoptions.c b/app/tools/gimprectangleoptions.c
index e1b5daa..492980a 100644
--- a/app/tools/gimprectangleoptions.c
+++ b/app/tools/gimprectangleoptions.c
@@ -28,6 +28,7 @@
 
 #include "tools-types.h"
 
+#include "core/gimpimage.h"
 #include "core/gimptooloptions.h"
 
 #include "widgets/gimppropwidgets.h"
@@ -1057,6 +1058,112 @@ gimp_rectangle_options_gui (GimpToolOptions *tool_options)
   return vbox;
 }
 
+void
+gimp_rectangle_options_connect (GimpRectangleOptions *options,
+                                GimpImage            *image,
+                                GCallback             shrink_callback,
+                                gpointer              shrink_object)
+{
+  GimpRectangleOptionsPrivate *options_private;
+  gdouble                      xres;
+  gdouble                      yres;
+
+  g_return_if_fail (GIMP_IS_RECTANGLE_OPTIONS (options));
+  g_return_if_fail (GIMP_IS_IMAGE (image));
+  g_return_if_fail (shrink_callback != NULL);
+  g_return_if_fail (shrink_object != NULL);
+
+  options_private = GIMP_RECTANGLE_OPTIONS_GET_PRIVATE (options);
+
+  gimp_image_get_resolution (image, &xres, &yres);
+
+  if (options_private->fixed_width_entry)
+    {
+      GtkWidget *entry = options_private->fixed_width_entry;
+
+      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, xres, FALSE);
+      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
+                                0, gimp_image_get_width (image));
+    }
+
+  if (options_private->fixed_height_entry)
+    {
+      GtkWidget *entry = options_private->fixed_height_entry;
+
+      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, yres, FALSE);
+      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
+                                0, gimp_image_get_height (image));
+    }
+
+  if (options_private->x_entry)
+    {
+      GtkWidget *entry = options_private->x_entry;
+
+      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, xres, FALSE);
+      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
+                                0, gimp_image_get_width (image));
+    }
+
+  if (options_private->y_entry)
+    {
+      GtkWidget *entry = options_private->y_entry;
+
+      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, yres, FALSE);
+      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
+                                0, gimp_image_get_height (image));
+    }
+
+  if (options_private->width_entry)
+    {
+      GtkWidget *entry = options_private->width_entry;
+
+      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, xres, FALSE);
+      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
+                                0, gimp_image_get_width (image));
+    }
+
+  if (options_private->height_entry)
+    {
+      GtkWidget *entry = options_private->height_entry;
+
+      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, yres, FALSE);
+      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
+                                0, gimp_image_get_height (image));
+    }
+
+  if (options_private->auto_shrink_button)
+    {
+      g_signal_connect_swapped (options_private->auto_shrink_button, "clicked",
+                                shrink_callback,
+                                shrink_object);
+
+      gtk_widget_set_sensitive (options_private->auto_shrink_button, TRUE);
+    }
+}
+
+void
+gimp_rectangle_options_disconnect (GimpRectangleOptions *options,
+                                   GCallback             shrink_callback,
+                                   gpointer              shrink_object)
+{
+  GimpRectangleOptionsPrivate *options_private;
+
+  g_return_if_fail (GIMP_IS_RECTANGLE_OPTIONS (options));
+  g_return_if_fail (shrink_callback != NULL);
+  g_return_if_fail (shrink_object != NULL);
+
+  options_private = GIMP_RECTANGLE_OPTIONS_GET_PRIVATE (options);
+
+  if (options_private->auto_shrink_button)
+    {
+      gtk_widget_set_sensitive (options_private->auto_shrink_button, FALSE);
+
+      g_signal_handlers_disconnect_by_func (options_private->auto_shrink_button,
+                                            shrink_callback,
+                                            shrink_object);
+    }
+}
+
 /**
  * gimp_rectangle_options_fixed_rule_active:
  * @rectangle_options:
diff --git a/app/tools/gimprectangleoptions.h b/app/tools/gimprectangleoptions.h
index ae1370f..36cbada 100644
--- a/app/tools/gimprectangleoptions.h
+++ b/app/tools/gimprectangleoptions.h
@@ -145,6 +145,14 @@ GType       gimp_rectangle_options_interface_get_type (void) G_GNUC_CONST;
 
 GtkWidget * gimp_rectangle_options_gui                (GimpToolOptions      *tool_options);
 
+void        gimp_rectangle_options_connect            (GimpRectangleOptions *options,
+                                                       GimpImage            *image,
+                                                       GCallback             shrink_callback,
+                                                       gpointer              shrink_object);
+void        gimp_rectangle_options_disconnect         (GimpRectangleOptions *options,
+                                                       GCallback             shrink_callback,
+                                                       gpointer              shrink_object);
+
 gboolean    gimp_rectangle_options_fixed_rule_active  (GimpRectangleOptions *rectangle_options,
                                                        GimpRectangleFixedRule fixed_rule);
 
diff --git a/app/tools/gimprectangletool.c b/app/tools/gimprectangletool.c
index 0505587..b261066 100644
--- a/app/tools/gimprectangletool.c
+++ b/app/tools/gimprectangletool.c
@@ -1983,16 +1983,8 @@ static void
 gimp_rectangle_tool_start (GimpRectangleTool *rect_tool,
                            GimpDisplay       *display)
 {
-  GimpTool                    *tool = GIMP_TOOL (rect_tool);
-  GimpRectangleOptionsPrivate *options_private;
-  GimpImage                   *image;
-  gdouble                      xres;
-  gdouble                      yres;
-
-  options_private =
-    GIMP_RECTANGLE_OPTIONS_GET_PRIVATE (gimp_tool_get_options (tool));
-
-  image = gimp_display_get_image (display);
+  GimpTool             *tool = GIMP_TOOL (rect_tool);
+  GimpRectangleOptions *options  = GIMP_RECTANGLE_TOOL_GET_OPTIONS (rect_tool);
 
   tool->display = display;
 
@@ -2010,80 +2002,17 @@ gimp_rectangle_tool_start (GimpRectangleTool *rect_tool,
 
   gimp_draw_tool_start (GIMP_DRAW_TOOL (tool), tool->display);
 
-  gimp_image_get_resolution (image, &xres, &yres);
-
-  if (options_private->fixed_width_entry)
-    {
-      GtkWidget *entry = options_private->fixed_width_entry;
-
-      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, xres, FALSE);
-      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
-                                0, gimp_image_get_width (image));
-    }
-
-  if (options_private->fixed_height_entry)
-    {
-      GtkWidget *entry = options_private->fixed_height_entry;
-
-      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, yres, FALSE);
-      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
-                                0, gimp_image_get_height (image));
-    }
-
-  if (options_private->x_entry)
-    {
-      GtkWidget *entry = options_private->x_entry;
-
-      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, xres, FALSE);
-      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
-                                0, gimp_image_get_width (image));
-    }
-
-  if (options_private->y_entry)
-    {
-      GtkWidget *entry = options_private->y_entry;
-
-      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, yres, FALSE);
-      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
-                                0, gimp_image_get_height (image));
-    }
-
-  if (options_private->width_entry)
-    {
-      GtkWidget *entry = options_private->width_entry;
-
-      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, xres, FALSE);
-      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
-                                0, gimp_image_get_width (image));
-    }
-
-  if (options_private->height_entry)
-    {
-      GtkWidget *entry = options_private->height_entry;
-
-      gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), 0, yres, FALSE);
-      gimp_size_entry_set_size (GIMP_SIZE_ENTRY (entry), 0,
-                                0, gimp_image_get_height (image));
-    }
-
-  if (options_private->auto_shrink_button)
-    {
-      g_signal_connect_swapped (options_private->auto_shrink_button, "clicked",
-                                G_CALLBACK (gimp_rectangle_tool_auto_shrink),
-                                rect_tool);
-
-      gtk_widget_set_sensitive (options_private->auto_shrink_button, TRUE);
-    }
+  gimp_rectangle_options_connect (options,
+                                  gimp_display_get_image (display),
+                                  G_CALLBACK (gimp_rectangle_tool_auto_shrink),
+                                  rect_tool);
 }
 
 static void
 gimp_rectangle_tool_halt (GimpRectangleTool *rect_tool)
 {
-  GimpTool                    *tool = GIMP_TOOL (rect_tool);
-  GimpRectangleOptionsPrivate *options_private;
-
-  options_private =
-    GIMP_RECTANGLE_OPTIONS_GET_PRIVATE (gimp_tool_get_options (tool));
+  GimpTool             *tool    = GIMP_TOOL (rect_tool);
+  GimpRectangleOptions *options = GIMP_RECTANGLE_TOOL_GET_OPTIONS (rect_tool);
 
   if (tool->display)
     {
@@ -2104,14 +2033,9 @@ gimp_rectangle_tool_halt (GimpRectangleTool *rect_tool)
 
   gimp_rectangle_tool_set_function (rect_tool, GIMP_RECTANGLE_TOOL_INACTIVE);
 
-  if (options_private->auto_shrink_button)
-    {
-      gtk_widget_set_sensitive (options_private->auto_shrink_button, FALSE);
-
-      g_signal_handlers_disconnect_by_func (options_private->auto_shrink_button,
-                                            gimp_rectangle_tool_auto_shrink,
-                                            rect_tool);
-    }
+  gimp_rectangle_options_disconnect (options,
+                                     G_CALLBACK (gimp_rectangle_tool_auto_shrink),
+                                     rect_tool);
 }
 
 gboolean


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