[gimp] app: use a GimpCanvasSamplePoint to draw the hovered sample point
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: use a GimpCanvasSamplePoint to draw the hovered sample point
- Date: Wed, 29 Sep 2010 23:33:12 +0000 (UTC)
commit f5750647c19c3c964ed7496d1530aa38d7d0f182
Author: Michael Natterer <mitch gimp org>
Date: Thu Sep 30 01:32:34 2010 +0200
app: use a GimpCanvasSamplePoint to draw the hovered sample point
app/tools/gimpcolortool.c | 131 +++++++++++++++++----------------------------
1 files changed, 49 insertions(+), 82 deletions(-)
---
diff --git a/app/tools/gimpcolortool.c b/app/tools/gimpcolortool.c
index be31bc8..759ed79 100644
--- a/app/tools/gimpcolortool.c
+++ b/app/tools/gimpcolortool.c
@@ -43,10 +43,10 @@
#include "widgets/gimppaletteeditor.h"
#include "widgets/gimpsessioninfo.h"
+#include "display/gimpcanvassamplepoint.h"
#include "display/gimpdisplay.h"
#include "display/gimpdisplayshell.h"
#include "display/gimpdisplayshell-appearance.h"
-#include "display/gimpdisplayshell-draw.h"
#include "display/gimpdisplayshell-selection.h"
#include "display/gimpdisplayshell-transform.h"
@@ -68,9 +68,6 @@ enum
static void gimp_color_tool_finalize (GObject *object);
-static void gimp_color_tool_control (GimpTool *tool,
- GimpToolAction action,
- GimpDisplay *display);
static void gimp_color_tool_button_press (GimpTool *tool,
const GimpCoords *coords,
guint32 time,
@@ -146,7 +143,6 @@ gimp_color_tool_class_init (GimpColorToolClass *klass)
object_class->finalize = gimp_color_tool_finalize;
- tool_class->control = gimp_color_tool_control;
tool_class->button_press = gimp_color_tool_button_press;
tool_class->button_release = gimp_color_tool_button_release;
tool_class->motion = gimp_color_tool_motion;
@@ -195,45 +191,6 @@ gimp_color_tool_finalize (GObject *object)
}
static void
-gimp_color_tool_control (GimpTool *tool,
- GimpToolAction action,
- GimpDisplay *display)
-{
- GimpColorTool *color_tool = GIMP_COLOR_TOOL (tool);
- GimpDisplayShell *shell = gimp_display_get_shell (display);
-
- switch (action)
- {
- case GIMP_TOOL_ACTION_PAUSE:
- break;
-
- case GIMP_TOOL_ACTION_RESUME:
- if (color_tool->sample_point &&
- gimp_display_shell_get_show_sample_points (shell))
- {
- cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (shell->canvas));
- gimp_display_shell_draw_sample_point (shell, cr,
- color_tool->sample_point, TRUE);
- cairo_destroy (cr);
- }
- break;
-
- case GIMP_TOOL_ACTION_HALT:
- if (color_tool->sample_point &&
- gimp_display_shell_get_show_sample_points (shell))
- {
- cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (shell->canvas));
- gimp_display_shell_draw_sample_point (shell, cr,
- color_tool->sample_point, FALSE);
- cairo_destroy (cr);
- }
- break;
- }
-
- GIMP_TOOL_CLASS (parent_class)->control (tool, action, display);
-}
-
-static void
gimp_color_tool_button_press (GimpTool *tool,
const GimpCoords *coords,
guint32 time,
@@ -358,17 +315,12 @@ gimp_color_tool_button_release (GimpTool *tool,
gimp_display_shell_selection_control (shell, GIMP_SELECTION_RESUME);
gimp_image_flush (image);
- if (color_tool->sample_point)
- {
- cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (shell->canvas));
- gimp_display_shell_draw_sample_point (shell, cr,
- color_tool->sample_point, TRUE);
- cairo_destroy (cr);
- }
-
color_tool->moving_sample_point = FALSE;
color_tool->sample_point_x = -1;
color_tool->sample_point_y = -1;
+
+ if (color_tool->sample_point)
+ gimp_draw_tool_start (GIMP_DRAW_TOOL (tool), display);
}
else
{
@@ -491,18 +443,22 @@ gimp_color_tool_oper_update (GimpTool *tool,
FUNSCALEY (shell, snap_distance));
}
- if (color_tool->sample_point &&
- color_tool->sample_point != sample_point)
- gimp_image_update_sample_point (image, color_tool->sample_point);
+ if (color_tool->sample_point != sample_point)
+ {
+ GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
- color_tool->sample_point = sample_point;
+ gimp_draw_tool_pause (draw_tool);
- if (color_tool->sample_point)
- {
- cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (shell->canvas));
- gimp_display_shell_draw_sample_point (shell, cr,
- color_tool->sample_point, TRUE);
- cairo_destroy (cr);
+ if (gimp_draw_tool_is_active (draw_tool) &&
+ draw_tool->display != display)
+ gimp_draw_tool_stop (draw_tool);
+
+ color_tool->sample_point = sample_point;
+
+ if (! gimp_draw_tool_is_active (draw_tool))
+ gimp_draw_tool_start (draw_tool, display);
+
+ gimp_draw_tool_resume (draw_tool);
}
}
@@ -568,6 +524,25 @@ gimp_color_tool_draw (GimpDrawTool *draw_tool)
if (color_tool->enabled)
{
+ if (color_tool->sample_point)
+ {
+ GimpImage *image = gimp_display_get_image (draw_tool->display);
+ GimpCanvasItem *item;
+ gint index;
+
+ index = g_list_index (gimp_image_get_sample_points (image),
+ color_tool->sample_point) + 1;
+
+ item = gimp_canvas_sample_point_new (color_tool->sample_point->x,
+ color_tool->sample_point->y,
+ index);
+ g_object_set (item, "sample-point-style", TRUE, NULL);
+ gimp_canvas_item_set_highlight (item, TRUE);
+
+ gimp_draw_tool_add_item (draw_tool, item);
+ g_object_unref (item);
+ }
+
if (color_tool->moving_sample_point)
{
if (color_tool->sample_point_x != -1 &&
@@ -585,19 +560,17 @@ gimp_color_tool_draw (GimpDrawTool *draw_tool)
gimp_image_get_height (image));
}
}
- else
+ else if (color_tool->options->sample_average &&
+ gimp_tool_control_is_active (GIMP_TOOL (draw_tool)->control))
{
- if (color_tool->options->sample_average)
- {
- gdouble radius = color_tool->options->average_radius;
-
- gimp_draw_tool_add_rectangle (draw_tool,
- FALSE,
- color_tool->center_x - radius,
- color_tool->center_y - radius,
- 2 * radius + 1,
- 2 * radius + 1);
- }
+ gdouble radius = color_tool->options->average_radius;
+
+ gimp_draw_tool_add_rectangle (draw_tool,
+ FALSE,
+ color_tool->center_x - radius,
+ color_tool->center_y - radius,
+ 2 * radius + 1,
+ 2 * radius + 1);
}
}
@@ -825,14 +798,8 @@ gimp_color_tool_start_sample_point (GimpTool *tool,
gimp_tool_control_activate (tool->control);
gimp_tool_control_set_scroll_lock (tool->control, TRUE);
- if (color_tool->sample_point)
- {
- GimpDisplayShell *shell = gimp_display_get_shell (display);
- cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (shell->canvas));
- gimp_display_shell_draw_sample_point (shell, cr,
- color_tool->sample_point, FALSE);
- cairo_destroy (cr);
- }
+ if (gimp_draw_tool_is_active (GIMP_DRAW_TOOL (tool)))
+ gimp_draw_tool_stop (GIMP_DRAW_TOOL (tool));
color_tool->sample_point = NULL;
color_tool->moving_sample_point = TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]