Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArt
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2010-09-16 22:18:41 (GMT)
committer Walter Bender <walter@sugarlabs.org>2010-09-16 22:18:41 (GMT)
commit6845b402c45636bdbfd77ccc70ccbb2d731371ab (patch)
tree55221474cc3fcb13231662e3e6f7fbc3b3c1646c /TurtleArt
parentb0b1f69e5fb43af309a25eb663be99cbc38287dd (diff)
expandable boolean blocks
Diffstat (limited to 'TurtleArt')
-rw-r--r--TurtleArt/taconstants.py5
-rwxr-xr-xTurtleArt/tasprite_factory.py40
-rw-r--r--TurtleArt/tawindow.py6
3 files changed, 44 insertions, 7 deletions
diff --git a/TurtleArt/taconstants.py b/TurtleArt/taconstants.py
index 06b72f5..6724ddb 100644
--- a/TurtleArt/taconstants.py
+++ b/TurtleArt/taconstants.py
@@ -234,10 +234,11 @@ PORTFOLIO_STYLE_1x2 = ['template1x2']
EXPANDABLE = ['vspace', 'hspace', 'templatelist', 'list', 'identity2',
'myfunc1arg', 'myfunc2arg', 'myfunc3arg', 'userdefined',
'userdefined2args', 'userdefined3args', 'plus2', 'minus2',
- 'division2', 'remainder2', 'product2', 'random']
+ 'division2', 'remainder2', 'product2', 'random', 'equal2',
+ 'greater2', 'less2', 'and2', 'or2']
EXPANDABLE_MATH = ['plus2', 'minus2','division2', 'remainder2', 'product2',
- 'random']
+ 'random', 'equal2', 'greater2', 'less2', 'and2', 'or2']
#
# Blocks that are 'collapsible'
diff --git a/TurtleArt/tasprite_factory.py b/TurtleArt/tasprite_factory.py
index 2517f0c..37738c0 100755
--- a/TurtleArt/tasprite_factory.py
+++ b/TurtleArt/tasprite_factory.py
@@ -95,6 +95,7 @@ class SVG:
svg += self._do_porch(False)
elif len(self._innie)-1 > i:
svg += self._rline_to(0, 2*self._innie_y2+self._innie_spacer)
+ # moved expand_y to just after first innie above
# svg += self._rline_to(0, self._expand_y)
svg += self._corner(-1, 1)
svg += self.line_to(xx, self._y)
@@ -241,9 +242,14 @@ class SVG:
self.reset_min_max()
svg = self._start_boolean(self._stroke_width/2.0,
self._radius*5.5+self._stroke_width/2.0+\
- self._innie_y2+self._innie_spacer)
+ self._innie_y2+self._innie_spacer +\
+ self._expand_y)
svg += self._rline_to(0,-self._radius*3.5-self._innie_y2-\
self._innie_spacer-self._stroke_width)
+
+ self._hide_x = self._x + self._radius/2
+ self._hide_y = self._y - self._radius/2
+
svg += self._rarc_to(1, -1)
svg += self._rline_to(self._radius/2.0+self._expand_x, 0)
xx = self._x
@@ -251,8 +257,17 @@ class SVG:
svg += self._do_boolean()
svg += self._rline_to(0,self._radius*1.5+self._innie_y2+\
self._innie_spacer)
+
+ svg += self._rline_to(0, self._expand_y)
+
svg += self._do_boolean()
svg += self._rline_to(0,self._radius/2.0)
+
+ self._show_x = self._x - self._radius/2
+ self._show_x -= (self._innie_x1+self._innie_x2)
+ self._show_y = self._y + self._radius/2
+ self._show_y -= (self._innie_y1+self._innie_y2*2)
+
svg += self.line_to(xx, self._y)
svg += self._rline_to(-self._expand_x, 0)
svg += self._end_boolean()
@@ -285,7 +300,7 @@ class SVG:
def boolean_compare(self):
self.reset_min_max()
yoffset = self._radius*2+2*self._innie_y2+\
- self._innie_spacer+self._stroke_width/2.0
+ self._innie_spacer+self._stroke_width/2.0 + self._expand_y
if self._porch is True:
yoffset += self._porch_y
svg = self._start_boolean(self._stroke_width/2.0, yoffset)
@@ -293,11 +308,16 @@ class SVG:
if self._porch is True:
yoffset -= self._porch_y
svg += self._rline_to(0, yoffset)
+
+ self._hide_x = self._x + self._radius/2
+ self._hide_y = self._y - self._radius/2
+
svg += self._rarc_to(1, -1)
svg += self._rline_to(self._radius/2.0+self._expand_x, 0)
svg += self._rline_to(0,self._radius)
xx = self._x
svg += self._do_innie()
+ svg += self._rline_to(0, self._expand_y)
if self._porch is True:
svg += self._do_porch()
else:
@@ -306,6 +326,11 @@ class SVG:
svg += self._rline_to(0, self._radius)
svg += self.line_to(xx, self._y)
svg += self._rline_to(-self._expand_x, 0)
+
+ self._show_x = self._x - self._radius/2
+ self._show_y = self._y + self._radius/2
+ self._show_y -= (self._innie_y1+self._innie_y2*2)
+
svg += self._end_boolean()
self.margins[0] = int((self._radius+self._stroke_width)*self._scale)
self.margins[1] = int(self._stroke_width*self._scale)
@@ -947,7 +972,9 @@ class SVG:
self.docks.append((int(self._x*self._scale), int(self._y*self._scale)))
svg += self._rarc_to(1, -1)
self._radius += self._stroke_width
- return svg + self._rline_to(self._stroke_width, 0)
+ svg += self._rline_to(self._stroke_width, 0)
+ svg += self._rline_to(0, -self._expand_y)
+ return svg
def _do_boolean(self):
self.docks.append(
@@ -955,7 +982,8 @@ class SVG:
int((self._y+self._radius)*self._scale)))
self.margins[2] =\
int((self._x-self._radius-self._stroke_width)*self._scale)
- return self._rarc_to(-1, 1, 90, 0, 0) + self._rarc_to(1, 1, 90, 0, 0)
+ svg = self._rarc_to(-1, 1, 90, 0, 0) + self._rarc_to(1, 1, 90, 0, 0)
+ return svg
def _end_boolean(self):
svg = self._rline_to(-self._radius*1.5,0)
@@ -967,6 +995,10 @@ class SVG:
svg += self._close_path()
self.calc_w_h()
svg += self.style()
+ if self._show is True:
+ svg += self._show_dot()
+ if self._hide is True:
+ svg += self._hide_dot()
return svg + self.footer()
def calc_w_h(self, add_stroke_width=True):
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py
index 2e1f974..ff807d8 100644
--- a/TurtleArt/tawindow.py
+++ b/TurtleArt/tawindow.py
@@ -49,7 +49,8 @@ from taconstants import HORIZONTAL_PALETTE, VERTICAL_PALETTE, BLOCK_SCALE, \
DEAD_DICTS, DEAD_KEYS, TEMPLATES, PYTHON_SKIN, \
PALETTE_HEIGHT, STATUS_LAYER, OLD_DOCK, OLD_NAMES, \
BOOLEAN_STYLE, BLOCK_NAMES, DEFAULT_TURTLE, \
- TURTLE_LAYER, EXPANDABLE_MATH
+ TURTLE_LAYER, EXPANDABLE_MATH, COMPARE_STYLE, \
+ BOOLEAN_STYLE
from talogo import LogoCode, stop_logo
from tacanvas import TurtleGraphics
from tablock import Blocks, Block
@@ -1431,6 +1432,9 @@ class TurtleArtWindow():
for gblk in find_group(blk):
if gblk not in group:
gblk.spr.move_relative((0, dy * blk.scale))
+ if blk.name in COMPARE_STYLE or blk.name in BOOLEAN_STYLE:
+ for gblk in find_group(blk):
+ gblk.spr.move_relative((0, -dy * blk.scale))
grow_stack_arm(find_sandwich_top(blk))
elif blk.name in EXPANDABLE or blk.name == 'nop':
if show_button_hit(blk.spr, x, y):