[gimp] Bug 167203 - color picker tools should always draw outline



commit adad7c651cfffaa7391065420104bcceefc6ec0a
Author: Michael Natterer <mitch gimp org>
Date:   Sun Jan 1 17:35:57 2017 +0100

    Bug 167203 - color picker tools should always draw outline
    
    Move the entire drawing control logic to gimp_color_tool_oper_update()
    which gets invoked on hovering, and don't mess with it in
    button_press() and button_release(). Tested to work with the color
    picker, paint and filter tools.

 app/tools/gimpcolortool.c |   69 +++++++++++++++++++++------------------------
 1 files changed, 32 insertions(+), 37 deletions(-)
---
diff --git a/app/tools/gimpcolortool.c b/app/tools/gimpcolortool.c
index 092205f..814a3b8 100644
--- a/app/tools/gimpcolortool.c
+++ b/app/tools/gimpcolortool.c
@@ -40,16 +40,12 @@
 #include "widgets/gimpdockable.h"
 #include "widgets/gimpdockcontainer.h"
 #include "widgets/gimppaletteeditor.h"
-#include "widgets/gimpsessioninfo.h"
-#include "widgets/gimpwidgets-utils.h"
 #include "widgets/gimpwindowstrategy.h"
 
 #include "display/gimpcanvasitem.h"
 #include "display/gimpdisplay.h"
 #include "display/gimpdisplayshell.h"
 #include "display/gimpdisplayshell-appearance.h"
-#include "display/gimpdisplayshell-selection.h"
-#include "display/gimpdisplayshell-transform.h"
 
 #include "gimpcoloroptions.h"
 #include "gimpcolortool.h"
@@ -213,12 +209,6 @@ gimp_color_tool_button_press (GimpTool            *tool,
     }
   else
     {
-      color_tool->center_x = coords->x;
-      color_tool->center_y = coords->y;
-
-      if (! gimp_draw_tool_is_active (GIMP_DRAW_TOOL (tool)))
-        gimp_draw_tool_start (GIMP_DRAW_TOOL (tool), display);
-
       gimp_color_tool_pick (color_tool, GIMP_COLOR_PICK_STATE_START,
                             coords->x, coords->y);
     }
@@ -243,8 +233,6 @@ gimp_color_tool_button_release (GimpTool              *tool,
 
   if (! color_tool->sample_point)
     {
-      gimp_draw_tool_stop (GIMP_DRAW_TOOL (tool));
-
       gimp_color_tool_pick (color_tool, GIMP_COLOR_PICK_STATE_END,
                             coords->x, coords->y);
     }
@@ -283,38 +271,46 @@ gimp_color_tool_oper_update (GimpTool         *tool,
                              gboolean          proximity,
                              GimpDisplay      *display)
 {
-  GimpColorTool    *color_tool   = GIMP_COLOR_TOOL (tool);
-  GimpDisplayShell *shell        = gimp_display_get_shell (display);
-  GimpImage        *image        = gimp_display_get_image (display);
-  GimpSamplePoint  *sample_point = NULL;
-
-  if (color_tool->enabled                               &&
-      gimp_display_shell_get_show_sample_points (shell) &&
-      proximity)
-    {
-      gint snap_distance = display->config->snap_distance;
-
-      sample_point =
-        gimp_image_find_sample_point (image,
-                                      coords->x, coords->y,
-                                      FUNSCALEX (shell, snap_distance),
-                                      FUNSCALEY (shell, snap_distance));
-    }
+  GimpColorTool *color_tool = GIMP_COLOR_TOOL (tool);
 
-  if (color_tool->sample_point != sample_point)
+  if (color_tool->enabled)
     {
-      GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
+      GimpDrawTool     *draw_tool    = GIMP_DRAW_TOOL (tool);
+      GimpDisplayShell *shell        = gimp_display_get_shell (display);
+      GimpSamplePoint  *sample_point = NULL;
 
       gimp_draw_tool_pause (draw_tool);
 
       if (gimp_draw_tool_is_active (draw_tool) &&
-          draw_tool->display != display)
-        gimp_draw_tool_stop (draw_tool);
+          (draw_tool->display != display ||
+           ! proximity))
+        {
+          gimp_draw_tool_stop (draw_tool);
+        }
+
+      if (gimp_display_shell_get_show_sample_points (shell) &&
+          proximity)
+        {
+          GimpImage *image         = gimp_display_get_image (display);
+          gint       snap_distance = display->config->snap_distance;
+
+          sample_point =
+            gimp_image_find_sample_point (image,
+                                          coords->x, coords->y,
+                                          FUNSCALEX (shell, snap_distance),
+                                          FUNSCALEY (shell, snap_distance));
+        }
 
       color_tool->sample_point = sample_point;
 
-      if (! gimp_draw_tool_is_active (draw_tool))
-        gimp_draw_tool_start (draw_tool, display);
+      color_tool->center_x = coords->x;
+      color_tool->center_y = coords->y;
+
+      if (! gimp_draw_tool_is_active (draw_tool) &&
+          proximity)
+        {
+          gimp_draw_tool_start (draw_tool, display);
+        }
 
       gimp_draw_tool_resume (draw_tool);
     }
@@ -398,8 +394,7 @@ gimp_color_tool_draw (GimpDrawTool *draw_tool)
           item = gimp_draw_tool_add_sample_point (draw_tool, x, y, index);
           gimp_canvas_item_set_highlight (item, TRUE);
         }
-      else if (color_tool->options->sample_average &&
-               gimp_tool_control_is_active (GIMP_TOOL (draw_tool)->control))
+      else if (color_tool->options->sample_average)
         {
           gdouble radius = color_tool->options->average_radius;
 


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