From adad7c651cfffaa7391065420104bcceefc6ec0a Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Sun, 1 Jan 2017 17:35:57 +0100 Subject: [PATCH] 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 file changed, 32 insertions(+), 37 deletions(-) diff --git a/app/tools/gimpcolortool.c b/app/tools/gimpcolortool.c index 092205f15d..814a3b870c 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; + GimpColorTool *color_tool = GIMP_COLOR_TOOL (tool); - if (color_tool->enabled && - gimp_display_shell_get_show_sample_points (shell) && - proximity) + if (color_tool->enabled) { - 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)); - } - - if (color_tool->sample_point != sample_point) - { - 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;