[gimp] gimpcanvashandle: implement drop shaped handle



commit 44352cb7690c0712a4237cc14b4f0fce5379b1f3
Author: Simon Budig <simon budig de>
Date:   Fri May 15 02:20:33 2020 +0200

    gimpcanvashandle: implement drop shaped handle

 app/display/display-enums.h    |  4 +++-
 app/display/gimpcanvashandle.c | 26 ++++++++++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)
---
diff --git a/app/display/display-enums.h b/app/display/display-enums.h
index 4cc84a86f6..71374f2856 100644
--- a/app/display/display-enums.h
+++ b/app/display/display-enums.h
@@ -101,7 +101,9 @@ typedef enum
   GIMP_HANDLE_DASHED_DIAMOND,
   GIMP_HANDLE_FILLED_DIAMOND,
   GIMP_HANDLE_CROSS,
-  GIMP_HANDLE_CROSSHAIR
+  GIMP_HANDLE_CROSSHAIR,
+  GIMP_HANDLE_DROP,
+  GIMP_HANDLE_FILLED_DROP
 } GimpHandleType;
 
 
diff --git a/app/display/gimpcanvashandle.c b/app/display/gimpcanvashandle.c
index 954eead5ef..db6895f91e 100644
--- a/app/display/gimpcanvashandle.c
+++ b/app/display/gimpcanvashandle.c
@@ -279,6 +279,8 @@ gimp_canvas_handle_transform (GimpCanvasItem *item,
     case GIMP_HANDLE_DIAMOND:
     case GIMP_HANDLE_DASHED_DIAMOND:
     case GIMP_HANDLE_FILLED_DIAMOND:
+    case GIMP_HANDLE_DROP:
+    case GIMP_HANDLE_FILLED_DROP:
       gimp_canvas_item_shift_to_center (private->anchor,
                                         *x, *y,
                                         private->width,
@@ -319,6 +321,8 @@ gimp_canvas_handle_draw (GimpCanvasItem *item,
     case GIMP_HANDLE_DASHED_DIAMOND:
     case GIMP_HANDLE_FILLED_DIAMOND:
     case GIMP_HANDLE_CROSS:
+    case GIMP_HANDLE_DROP:
+    case GIMP_HANDLE_FILLED_DROP:
       cairo_save (cr);
       cairo_translate (cr, tx, ty);
       cairo_rotate (cr, private->start_angle);
@@ -397,6 +401,18 @@ gimp_canvas_handle_draw (GimpCanvasItem *item,
           _gimp_canvas_item_stroke (item, cr);
           break;
 
+        case GIMP_HANDLE_DROP:
+        case GIMP_HANDLE_FILLED_DROP:
+          cairo_move_to (cr, x + private->width, y);
+          gimp_cairo_arc (cr, x, y, (gdouble) private->width / 2.0,
+                          G_PI / 3, G_PI * 4 / 3.);
+          cairo_close_path (cr);
+          if (private->type == GIMP_HANDLE_DROP)
+            _gimp_canvas_item_stroke (item, cr);
+          else
+            _gimp_canvas_item_fill (item, cr);
+          break;
+
         default:
           gimp_assert_not_reached ();
         }
@@ -499,6 +515,14 @@ gimp_canvas_handle_get_extents (GimpCanvasItem *item)
       rectangle.height = private->height + 4.0;
       break;
 
+    case GIMP_HANDLE_DROP:
+    case GIMP_HANDLE_FILLED_DROP:
+      rectangle.x      = x - private->width  / 2.0 - 2.0;
+      rectangle.y      = y - private->height / 2.0 - 2.0;
+      rectangle.width  = private->width * 1.21 + 4.0;
+      rectangle.height = private->height + 4.0;
+      break;
+
     default:
       break;
     }
@@ -549,6 +573,8 @@ gimp_canvas_handle_hit (GimpCanvasItem *item,
     case GIMP_HANDLE_FILLED_CIRCLE:
     case GIMP_HANDLE_CROSS:
     case GIMP_HANDLE_CROSSHAIR:
+    case GIMP_HANDLE_DROP:
+    case GIMP_HANDLE_FILLED_DROP:
       {
         gint width = private->width;
 


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