[gimp/blend-tool-fun: 10/10] experiment with handles



commit d070e54d910e144cf1994b89689d160074e6008c
Author: Michael Henning <drawoc darkrefraction com>
Date:   Thu Jun 26 12:57:06 2014 -0400

    experiment with handles

 app/tools/gimpblendtool.c |   92 +++++++++++++++++++++++++++++++++++++++++---
 app/tools/gimpblendtool.h |    4 ++
 2 files changed, 89 insertions(+), 7 deletions(-)
---
diff --git a/app/tools/gimpblendtool.c b/app/tools/gimpblendtool.c
index 5d8fe95..b02c19f 100644
--- a/app/tools/gimpblendtool.c
+++ b/app/tools/gimpblendtool.c
@@ -56,8 +56,11 @@
 
 #include "gimp-intl.h"
 
+#define SHOW_LINE FALSE
+#define HANDLE_CROSS_DIAMETER 15
+#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))
 
 /*  local function prototypes  */
 
@@ -527,24 +530,55 @@ gimp_blend_tool_draw (GimpDrawTool *draw_tool)
                              blend_tool->end_x,
                              blend_tool->end_y);
 
+gimp_canvas_item_set_visible (blend_tool->line,
+                                      SHOW_LINE);
+
+ //GimpCanvasGroup *group;
+ blend_tool->start_group = gimp_draw_tool_add_stroke_group (draw_tool);
+ blend_tool->end_group = gimp_draw_tool_add_stroke_group (draw_tool);
+ //gimp_draw_tool_push_group (draw_tool, blend_tool->start_group);
+
   blend_tool->start_handle =
     gimp_draw_tool_add_handle (draw_tool,
-                               GIMP_HANDLE_FILLED_CIRCLE,
+                               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_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);
 
+ /*gimp_draw_tool_pop_group (draw_tool);
+ gimp_draw_tool_push_group (draw_tool, blend_tool->end_group);*/
+
   blend_tool->end_handle =
     gimp_draw_tool_add_handle (draw_tool,
-                               GIMP_HANDLE_FILLED_CIRCLE,
+                               GIMP_HANDLE_CIRCLE,
+                               blend_tool->end_x,
+                               blend_tool->end_y,
+                               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,
-                               GIMP_TOOL_HANDLE_SIZE_CIRCLE,
-                               GIMP_TOOL_HANDLE_SIZE_CIRCLE,
+                               HANDLE_CROSS_DIAMETER,
+                               HANDLE_CROSS_DIAMETER,
                                GIMP_HANDLE_ANCHOR_CENTER);
 
+ //gimp_draw_tool_pop_group (draw_tool);
+
   gimp_blend_tool_update_item_hilight (blend_tool);
 }
 
@@ -567,6 +601,14 @@ 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_cross,
+                                       blend_tool->start_x,
+                                       blend_tool->start_y);
+
+      gimp_canvas_handle_set_position (blend_tool->end_handle_cross,
+                                       blend_tool->end_x,
+                                       blend_tool->end_y);
+
       gimp_blend_tool_update_item_hilight (blend_tool);
     }
 }
@@ -587,6 +629,42 @@ gimp_blend_tool_update_item_hilight (GimpBlendTool *blend_tool)
                                       hilight_point == POINT_START);
       gimp_canvas_item_set_highlight (blend_tool->end_handle,
                                       hilight_point == POINT_END);
+      gimp_canvas_item_set_highlight (blend_tool->start_handle_cross,
+                                      hilight_point == POINT_START);
+      gimp_canvas_item_set_highlight (blend_tool->end_handle_cross,
+                                      hilight_point == POINT_END);
+
+
+
+{
+  gdouble       dist;
+  GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (blend_tool);
+  /* Check end point */
+  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);
+
+if (blend_tool->grabbed_point) dist = 1337 * 42; // Magic constant
+gimp_canvas_item_set_visible (blend_tool->start_handle,
+                                      dist < POINT_GRAB_THRESHOLD_SQ * 9);
+
+
+
+  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);
+if (blend_tool->grabbed_point) dist = 1337 * 42;
+gimp_canvas_item_set_visible (blend_tool->end_handle,
+                                      dist < POINT_GRAB_THRESHOLD_SQ * 9);
+}
+
+
   }
 }
 
diff --git a/app/tools/gimpblendtool.h b/app/tools/gimpblendtool.h
index 6f35d04..d743703 100644
--- a/app/tools/gimpblendtool.h
+++ b/app/tools/gimpblendtool.h
@@ -59,6 +59,10 @@ struct _GimpBlendTool
   GimpCanvasItem *start_handle;
   GimpCanvasItem *line;
   GimpCanvasItem *end_handle;
+    GimpCanvasItem *start_handle_cross;
+GimpCanvasItem *end_handle_cross;
+    GimpCanvasGroup *start_group;
+GimpCanvasGroup *end_group;
 
   GeglNode       *graph;
   GeglNode       *render_node;


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