[Sugar-devel] [PATCH v2 PaintActivity] New suggestion for arrow drawing in Paint

Anurag Chowdhury anurag at seeta.in
Thu Oct 21 13:20:53 EDT 2010


In the paint activity's shape tool we were able to make only horizontal arrows,
so now we have modified the arrow tool which will now make arrows in all
directions.
---
 Desenho.py |   27 ++++++++++++++++++---------
 1 files changed, 18 insertions(+), 9 deletions(-)

v1->v2 :Removed the vertical-arrow tool and modified the arrow tool to enable
drawing arrows in all directions.

diff --git a/Desenho.py b/Desenho.py
index 3be1910..5057a27 100644
--- a/Desenho.py
+++ b/Desenho.py
@@ -294,18 +294,27 @@ class Desenho:
 
         x = coords[0] - widget.oldx
         y = coords[1] - widget.oldy
-        points = [(widget.oldx, widget.oldy),\
-            (widget.oldx + int(x / 6), widget.oldy + y), \
-            (widget.oldx + int(x / 6), widget.oldy + int(y / 3)), \
-            (widget.oldx + x, widget.oldy + int(y / 3)), \
-            (widget.oldx + x, widget.oldy - int(y / 3)), \
-            (widget.oldx + int(x / 6), widget.oldy - int(y / 3)),\
-            (widget.oldx + int(x / 6), widget.oldy - y)]
+        A = math.atan2(y,x)
+        dA = 2*math.pi/2
+        r = math.hypot(y,x)
+        m = math.sin(A)
+        p = [(widget.oldx,widget.oldy),\
+            (widget.oldx+int(r*math.cos(A)),widget.oldy+int(r*math.sin(A))),\
+            (widget.oldx+int(0.74*r*math.cos(A+dA/6)),\
+             widget.oldy+int(0.74*r*math.sin(A+dA/6)))]         
+        p.append((widget.oldx,widget.oldy)) 
+        p.append((widget.oldx+int(0.74*r*math.cos(A+dA/6)),\
+                  widget.oldy+int(0.74*r*math.sin(A+dA/6))))
+        p.append((widget.oldx+int(2*r*math.cos(A+dA/6+dA/20)),\
+                  widget.oldy+int(2*r*math.sin(A+dA/6+dA/20)))) 
+        p.append((widget.oldx+int(2*r*math.cos(A+dA/6-dA/20+dA/6)),\
+                  widget.oldy+int(2*r*math.sin(A+dA/6-dA/20+dA/6))))
+        p.append((widget.oldx+int(0.74*r*math.cos(A+dA/6+dA/6)),\
+                  widget.oldy+int(0.74*r*math.sin(A+dA/6+dA/6))))
+        p.append((widget.oldx,widget.oldy))
+        p.append((widget.oldx+int(0.74*r*math.cos(A+dA/6+dA/6)),\
+                  widget.oldy+int(0.74*r*math.sin(A+dA/6+dA/6))))
+        p.append((widget.oldx+int(r*math.cos(A+dA/2)),\
+                  widget.oldy+int(r*math.sin(A+dA/2))))
         pixmap.draw_drawable(widget.gc, widget.pixmap, 0, 0, 0, 0,
             width, height)
+        tp = tuple(p)
         if fill == True:
-            pixmap.draw_polygon(widget.gc, True, points)
-        pixmap.draw_polygon(widget.gc_line, False, points)
+            pixmap.draw_polygon(widget.gc, True, tp)
+        pixmap.draw_polygon(widget.gc_line, False, tp)
         widget.queue_draw()
 
     def parallelogram(self, widget, coords, temp, fill):
-- 
1.7.2.3



More information about the Sugar-devel mailing list