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

Anurag Chowdhury anurag at seeta.in
Thu Oct 21 23:12:55 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 |   31 ++++++++++++++++++++++---------
 1 files changed, 22 insertions(+), 9 deletions(-)

v1->v2 :Removed the vertical-arrow tool and modified the arrow tool to enable
drawing arrows in all directions.
v2->v3 :Fixed the error of two extra lines when made the arrow with a different
colour border

diff --git a/Desenho.py b/Desenho.py
index 3be1910..1b16ccd 100644
--- a/Desenho.py
+++ b/Desenho.py
@@ -294,18 +294,31 @@ 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)]
+        p.append((widget.oldx + int(r * math.cos(A)),\
+                  widget.oldy + int(r * math.sin(A))))
+        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 + 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