[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