[Dextrose] [PATCH] New suggestion for arrow drawing in Paint activity.olpc4170
Anurag Chowdhury
anurag at seeta.in
Wed Oct 20 17:32:31 EDT 2010
In the paint activity's shape tool we were able to make only horizontal arrows,
so now we have added a new tool which makes vertical arrows.
---
Area.py | 8 ++++++++
Desenho.py | 31 +++++++++++++++++++++++++++++++
toolbox.py | 21 +++++++++++++++++++++
3 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/Area.py b/Area.py
index 2dca7da..56c4267 100644
--- a/Area.py
+++ b/Area.py
@@ -438,6 +438,10 @@ class Area(gtk.DrawingArea):
elif self.tool['name'] == 'arrow':
self.configure_line(self.line_size)
self.d.arrow(widget,coords,True,self.tool['fill'])
+
+ elif self.tool['name'] == 'vertical arrow':
+ self.d.arrow_vertical(widget,coords,False,\
+ self.tool['fill'])
+ self.enableUndo(widget)
elif self.tool['name'] == 'parallelogram':
self.configure_line(self.line_size)
@@ -541,6 +545,10 @@ class Area(gtk.DrawingArea):
elif self.tool['name'] == 'arrow':
self.d.arrow(widget,coords,False,self.tool['fill'])
self.enableUndo(widget)
+
+ elif self.tool['name'] == 'vertical arrow':
+ self.d.arrow_vertical(widget,coords,False,self.tool['fill'])
+ self.enableUndo(widget)
elif self.tool['name'] == 'parallelogram':
self.d.parallelogram(widget,coords,False,self.tool['fill'])
diff --git a/Desenho.py b/Desenho.py
index c9a134b..e90a45c 100644
--- a/Desenho.py
+++ b/Desenho.py
@@ -298,6 +298,37 @@ class Desenho:
pixmap.draw_polygon(widget.gc_line,False,points)
widget.queue_draw()
+ def arrow_vertical(self, widget, coords, temp, fill):
+ """Draw a arrow.
+
+ @param self -- Desenho.Desenho instance
+ @param widget -- Area object (GtkDrawingArea)
+ @param coords -- Two value tuple
+ @param temp -- switch between pixmap and pixmap_temp
+ @param fill -- Fill object
+
+ """
+ if temp == True:
+ pixmap = widget.pixmap_temp
+ else:
+ pixmap = widget.pixmap
+ width, height = widget.window.get_size()
+
+ x = widget.oldx - coords[0]
+ y = widget.oldy - coords[1]
+ points = [(widget.oldx,widget.oldy),\
+(widget.oldx+x,widget.oldy-int(y/6)),\
+(widget.oldx+int(x/2),widget.oldy-int(y/6)),\
+(widget.oldx+int(x/2),widget.oldy-y),\
+(widget.oldx-int(x/2),widget.oldy-y),\
+(widget.oldx-int(x/2),widget.oldy-int(y/6)),\
+(widget.oldx-x,widget.oldy-int(y/6))]
+ pixmap.draw_drawable(widget.gc,widget.pixmap,0,0,0,0,width,height)
+ if fill == True:
+ pixmap.draw_polygon(widget.gc,True,points)
+ pixmap.draw_polygon(widget.gc_line,False,points)
+ widget.queue_draw()
+
def parallelogram(self, widget, coords, temp, fill):
"""Draw a parallelogram.
diff --git a/toolbox.py b/toolbox.py
index 299181b..520e5f0 100644
--- a/toolbox.py
+++ b/toolbox.py
@@ -613,6 +613,15 @@ class ShapesToolbar(gtk.Toolbar):
'fill' : True,
'vertices' : 5
}
+ _SHAPE_ARROW_VERTICAL= {
+ 'name' : 'vertical arrow',
+ 'line size' : 5,
+ 'fill color' : None,
+ 'stroke color' : None,
+ 'line shape' : 'circle',
+ 'fill' : True,
+ 'vertices' : 5
+ }
_SHAPE_CURVE = {
'name' : 'curve',
'line size' : 2,
@@ -795,6 +804,13 @@ class ShapesToolbar(gtk.Toolbar):
self._configure_palette_shape_arrow()
except:
logging.debug('Could not create palette for Shape Arrow')
+
+ self._shape_arrow_vertical = DrawToolButton\
+ ('tool-shape-arrow-vertical',activity.tool_group,_('Arrow-Vertical'))
+ self.insert(self._shape_arrow_vertical, -1)
+ try:
+ self._configure_palette_shape_arrow_vertical()
+ except:
+ logging.debug('Could not create palette for Shape Vertical Arrow')
self._shape_star = DrawToolButton('tool-shape-star', activity.tool_group,_('Star'))
self.insert(self._shape_star, -1)
@@ -819,6 +835,7 @@ class ShapesToolbar(gtk.Toolbar):
self._shape_arrow.connect('clicked', self.set_tool, self._SHAPE_ARROW)
+ self._shape_arrow_vertical.connect('clicked', self.set_tool,\
+ self._SHAPE_ARROW_VERTICAL)
self._shape_ellipse.connect('clicked', self.set_tool, self._SHAPE_ELLIPSE)
self._shape_freeform.connect('clicked', self.set_tool, self._SHAPE_FREEFORM)
self._shape_heart.connect('clicked', self.set_tool, self._SHAPE_HEART)
@@ -908,6 +925,10 @@ class ShapesToolbar(gtk.Toolbar):
logging.debug('Creating palette to shape arrow')
self._create_simple_palette(self._shape_arrow, self._SHAPE_ARROW)
+ def _configure_palette_shape_arrow_vertical(self):
+ logging.debug('Creating palette to shape Vertical arrow')
+ self._create_simple_palette(self._shape_arrow_vertical,\
+ self._SHAPE_ARROW_VERTICAL)
+
def _configure_palette_shape_star(self):
logging.debug('Creating palette to shape star')
--
1.7.2.3
More information about the Dextrose
mailing list