[gimp/blend-tool-fun: 12/12] app: Redo the handles in GimpBlendTool
- From: Michael Henning <mhenning src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/blend-tool-fun: 12/12] app: Redo the handles in GimpBlendTool
- Date: Mon, 30 Jun 2014 15:10:41 +0000 (UTC)
commit a0d3b115fdace4d73e15f7c6ec97faa1fc952a75
Author: Michael Henning <drawoc darkrefraction com>
Date: Thu Jun 26 12:57:06 2014 -0400
app: Redo the handles in GimpBlendTool
app/tools/gimpblendtool.c | 101 ++++++++++++++++++++++++++++++++++++++------
app/tools/gimpblendtool.h | 6 ++-
2 files changed, 91 insertions(+), 16 deletions(-)
---
diff --git a/app/tools/gimpblendtool.c b/app/tools/gimpblendtool.c
index d8e9877..426f6bf 100644
--- a/app/tools/gimpblendtool.c
+++ b/app/tools/gimpblendtool.c
@@ -56,8 +56,12 @@
#include "gimp-intl.h"
+#define SHOW_LINE TRUE
+#define HANDLE_CROSS_DIAMETER 18
+#define HANDLE_DIAMETER 40
-#define POINT_GRAB_THRESHOLD_SQ (SQR (GIMP_TOOL_HANDLE_SIZE_CIRCLE / 2))
+#define POINT_GRAB_THRESHOLD_SQ (SQR (HANDLE_DIAMETER / 2))
+#define FULL_HANDLE_THRESHOLD_SQ (POINT_GRAB_THRESHOLD_SQ * 9)
/* local function prototypes */
@@ -543,22 +547,42 @@ gimp_blend_tool_draw (GimpDrawTool *draw_tool)
blend_tool->end_x,
blend_tool->end_y);
- blend_tool->start_handle =
+ gimp_canvas_item_set_visible (blend_tool->line, SHOW_LINE);
+
+ blend_tool->start_handle_circle =
+ gimp_draw_tool_add_handle (draw_tool,
+ GIMP_HANDLE_CIRCLE,
+ blend_tool->start_x,
+ blend_tool->start_y,
+ HANDLE_DIAMETER,
+ HANDLE_DIAMETER,
+ GIMP_HANDLE_ANCHOR_CENTER);
+
+ blend_tool->start_handle_cross =
gimp_draw_tool_add_handle (draw_tool,
- GIMP_HANDLE_FILLED_CIRCLE,
+ GIMP_HANDLE_CROSS,
blend_tool->start_x,
blend_tool->start_y,
- GIMP_TOOL_HANDLE_SIZE_CIRCLE,
- GIMP_TOOL_HANDLE_SIZE_CIRCLE,
+ HANDLE_CROSS_DIAMETER,
+ HANDLE_CROSS_DIAMETER,
GIMP_HANDLE_ANCHOR_CENTER);
- blend_tool->end_handle =
+ blend_tool->end_handle_circle =
gimp_draw_tool_add_handle (draw_tool,
- GIMP_HANDLE_FILLED_CIRCLE,
+ GIMP_HANDLE_CIRCLE,
blend_tool->end_x,
blend_tool->end_y,
- GIMP_TOOL_HANDLE_SIZE_CIRCLE,
- GIMP_TOOL_HANDLE_SIZE_CIRCLE,
+ HANDLE_DIAMETER,
+ HANDLE_DIAMETER,
+ GIMP_HANDLE_ANCHOR_CENTER);
+
+ blend_tool->end_handle_cross =
+ gimp_draw_tool_add_handle (draw_tool,
+ GIMP_HANDLE_CROSS,
+ blend_tool->end_x,
+ blend_tool->end_y,
+ HANDLE_CROSS_DIAMETER,
+ HANDLE_CROSS_DIAMETER,
GIMP_HANDLE_ANCHOR_CENTER);
gimp_blend_tool_update_item_hilight (blend_tool);
@@ -575,11 +599,19 @@ gimp_blend_tool_update_items (GimpBlendTool *blend_tool)
blend_tool->end_x,
blend_tool->end_y);
- gimp_canvas_handle_set_position (blend_tool->start_handle,
+ gimp_canvas_handle_set_position (blend_tool->start_handle_circle,
blend_tool->start_x,
blend_tool->start_y);
- gimp_canvas_handle_set_position (blend_tool->end_handle,
+ gimp_canvas_handle_set_position (blend_tool->start_handle_cross,
+ blend_tool->start_x,
+ blend_tool->start_y);
+
+ gimp_canvas_handle_set_position (blend_tool->end_handle_circle,
+ blend_tool->end_x,
+ blend_tool->end_y);
+
+ gimp_canvas_handle_set_position (blend_tool->end_handle_cross,
blend_tool->end_x,
blend_tool->end_y);
@@ -590,18 +622,59 @@ gimp_blend_tool_update_items (GimpBlendTool *blend_tool)
static void
gimp_blend_tool_update_item_hilight (GimpBlendTool *blend_tool)
{
- if (gimp_draw_tool_is_active (GIMP_DRAW_TOOL (blend_tool)))
+ GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (blend_tool);
+ if (gimp_draw_tool_is_active (draw_tool))
{
GimpBlendToolPoint hilight_point;
+ gboolean start_visible, end_visible;
+ /* Calculate handle visibility */
+ if (blend_tool->grabbed_point)
+ {
+ start_visible = FALSE;
+ end_visible = FALSE;
+ }
+ else
+ {
+ gdouble dist;
+ dist = gimp_draw_tool_calc_distance_square (draw_tool,
+ draw_tool->display,
+ blend_tool->mouse_x,
+ blend_tool->mouse_y,
+ blend_tool->start_x,
+ blend_tool->start_y);
+
+ start_visible = dist < FULL_HANDLE_THRESHOLD_SQ;
+
+ dist = gimp_draw_tool_calc_distance_square (draw_tool,
+ draw_tool->display,
+ blend_tool->mouse_x,
+ blend_tool->mouse_y,
+ blend_tool->end_x,
+ blend_tool->end_y);
+
+ end_visible = dist < FULL_HANDLE_THRESHOLD_SQ;
+ }
+
+ gimp_canvas_item_set_visible (blend_tool->start_handle_circle,
+ start_visible);
+ gimp_canvas_item_set_visible (blend_tool->end_handle_circle,
+ end_visible);
+
+ /* Update hilights */
if (blend_tool->grabbed_point)
hilight_point = blend_tool->grabbed_point;
else
hilight_point = gimp_blend_tool_get_point_under_cursor (blend_tool);
- gimp_canvas_item_set_highlight (blend_tool->start_handle,
+ gimp_canvas_item_set_highlight (blend_tool->start_handle_circle,
hilight_point == POINT_START);
- gimp_canvas_item_set_highlight (blend_tool->end_handle,
+ gimp_canvas_item_set_highlight (blend_tool->start_handle_cross,
+ hilight_point == POINT_START);
+
+ gimp_canvas_item_set_highlight (blend_tool->end_handle_circle,
+ hilight_point == POINT_END);
+ gimp_canvas_item_set_highlight (blend_tool->end_handle_cross,
hilight_point == POINT_END);
}
}
diff --git a/app/tools/gimpblendtool.h b/app/tools/gimpblendtool.h
index 353ac34..5fbe93b 100644
--- a/app/tools/gimpblendtool.h
+++ b/app/tools/gimpblendtool.h
@@ -58,9 +58,11 @@ struct _GimpBlendTool
gdouble mouse_x; /* pointer x coord */
gdouble mouse_y; /* pointer y coord */
- GimpCanvasItem *start_handle;
GimpCanvasItem *line;
- GimpCanvasItem *end_handle;
+ GimpCanvasItem *start_handle_circle;
+ GimpCanvasItem *start_handle_cross;
+ GimpCanvasItem *end_handle_circle;
+ GimpCanvasItem *end_handle_cross;
GeglNode *graph;
GeglNode *render_node;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]