From e45650614b2e04622decd24dceee1a52a8d15fe5 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Wed, 20 Jan 2010 21:32:06 +0000 Subject: more sprite fixes --- diff --git a/block.py b/block.py index 7564b6d..6913b0c 100644 --- a/block.py +++ b/block.py @@ -92,92 +92,70 @@ class Block: print "%s (%d %d)" % (name, x, y) else: print "%s %s (%d %d)" % (name, labels[0], x, y) + + svg = block_factory.SVG() + if name in TURTLE_PALETTE: + svg.set_colors(TURTLE_COLORS) + elif name in PEN_PALETTE: + svg.set_colors(PEN_COLORS) + elif name in NUMBER_PALETTE: + svg.set_colors(NUMBER_COLORS) + elif name in BLOCKS_PALETTE: + svg.set_colors(BLOCKS_COLORS) + svg.set_scale(scale) + svg.set_gradiant(True) if name in BASIC_STYLE: - svg = block_factory.SVG() - svg.set_scale(scale) - svg.expand(20,0) + svg.expand(40,0) svg.set_innie([False]) svg.set_outie(False) svg.set_tab(True) svg.set_slot(True) - svg.set_gradiant(True) - svg.set_colors(colors) self.spr = sprites.Sprite(self.blocks.sprites, x, y, svg_str_to_pixbuf(svg.basic_block())) print "created new basic block: %s" % (str(self.spr)) - self.spr.set_layer(2000) - self.spr.draw() self.spr.set_label(labels[0]) elif name in BASIC_STYLE_HEAD: - svg = block_factory.SVG() - svg.set_scale(scale) - svg.expand(20,0) + svg.expand(40,0) svg.set_innie([False]) svg.set_outie(False) svg.set_tab(False) svg.set_slot(True) - svg.set_gradiant(True) - svg.set_colors(colors) self.spr = sprites.Sprite(self.blocks.sprites, x, y, svg_str_to_pixbuf(svg.basic_block())) print "created new basic block: %s" % (str(self.spr)) - self.spr.set_layer(2000) - self.spr.draw() self.spr.set_label(labels[0]) elif name in BASIC_STYLE_TAIL: - svg = block_factory.SVG() - svg.set_scale(scale) - svg.expand(20,0) + svg.expand(40,0) svg.set_innie([False]) svg.set_outie(False) svg.set_tab(True) svg.set_slot(False) - svg.set_gradiant(True) - svg.set_colors(colors) self.spr = sprites.Sprite(self.blocks.sprites, x, y, svg_str_to_pixbuf(svg.basic_block())) print "created new basic block: %s" % (str(self.spr)) - self.spr.set_layer(2000) - self.spr.draw() self.spr.set_label(labels[0]) elif name in BASIC_STYLE_1ARG: - svg = block_factory.SVG() - svg.set_scale(scale) svg.expand(20,0) svg.set_innie([True]) svg.set_outie(False) svg.set_tab(True) svg.set_slot(True) - svg.set_gradiant(True) - svg.set_colors(colors) self.spr = sprites.Sprite(self.blocks.sprites, x, y, svg_str_to_pixbuf(svg.basic_block())) print "created new basic block: %s" % (str(self.spr)) - self.spr.set_layer(2000) - self.spr.draw() self.spr.set_label(labels[0]) elif name in BASIC_STYLE_2ARG: - svg = block_factory.SVG() - svg.set_scale(scale) svg.expand(20,0) svg.set_innie([True,True]) svg.set_outie(False) svg.set_tab(True) svg.set_slot(True) - svg.set_gradiant(True) - svg.set_colors(colors) self.spr = sprites.Sprite(self.blocks.sprites, x, y, svg_str_to_pixbuf(svg.basic_block())) print "created new basic block: %s" % (str(self.spr)) - self.spr.set_layer(2000) - self.spr.draw() self.spr.set_label(labels[0]) elif name in BOX_STYLE: - svg = block_factory.SVG() - svg.set_scale(scale) - svg.expand(60,0) - svg.set_gradiant(True) - svg.set_colors(colors) + svg.expand(50,0) self.spr = sprites.Sprite(self.blocks.sprites, x, y, svg_str_to_pixbuf(svg.basic_box())) print "created new box block: %s" % (str(self.spr)) diff --git a/block_factory.py b/block_factory.py index 66b2516..061d624 100755 --- a/block_factory.py +++ b/block_factory.py @@ -47,7 +47,7 @@ class SVG: self._tab = True self._bool = False self._slot_x = 12 - self._slot_y = 4 + self._slot_y = 2 self._porch = False self._porch_x = self._innie_x1+self._innie_x2+4*self._stroke_width self._porch_y = self._innie_y1+self._innie_y2+4*self._stroke_width diff --git a/constants.py b/constants.py new file mode 100644 index 0000000..bc17705 --- /dev/null +++ b/constants.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +#Copyright (c) 2009, Walter Bender + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +from gettext import gettext as _ + +# block to proto tables +BASIC_STYLE_HEAD = ['start', 'action 1', 'action 2'] +BASIC_STYLE_TAIL = ['stop action'] +BASIC_STYLE = ['clean', 'pen up', 'pen down', 'action 1', 'action 2', 'nop' ] +BASIC_STYLE_1ARG = ['forward', 'back', 'left', 'right', 'seth', 'show',\ + 'set scale', 'set pen size', 'set color', 'set shade'\ + 'set text size', 'set text color', 'print', 'wait', 'store in box 1',\ + 'store in box 2'] +BASIC_STYLE_2ARG = ['arc', 'setxy', 'fill screen'] +BOX_STYLE = ['number', 'xcor', 'ycor', 'heading', 'pen size', 'color', 'shade'\ + 'text color', 'text size', 'box 1', 'box 2', 'string'] + + +TURTLE_PALETTE = ['clean', 'forward', 'back', 'left', 'right', 'seth', 'show',\ + 'set_scale', 'xcor', 'ycor', 'heading'] +PEN_PALETTE = ['pen up','pen down'] +NUMBER_PALETTE = ['number'] +BLOCKS_PALETTE = ['string'] + +TURTLE_COLORS = ["#00FF00","#00A000"] +PEN_COLORS = ["#00FFFF","#00A0A0"] +NUMBER_COLORS = ["#FF00FF","#A000A0"] +BLOCKS_COLORS = ["#FFFF00","#A0A000"] + +# 'dead key' Unicode dictionaries +DEAD_KEYS = ['grave','acute','circumflex','tilde','diaeresis','abovering'] +DEAD_DICTS = [{'A':192,'E':200,'I':204,'O':210,'U':217,'a':224,'e':232,'i':236,\ + 'o':242,'u':249}, + {'A':193,'E':201,'I':205,'O':211,'U':218,'a':225,'e':233,'i':237,\ + 'o':243,'u':250}, + {'A':194,'E':202,'I':206,'O':212,'U':219,'a':226,'e':234,\ + 'i':238,'o':244,'u':251}, + {'A':195,'O':211,'N':209,'U':360,'a':227,'o':245,'n':241,'u':361}, + {'A':196,'E':203,'I':207,'O':211,'U':218,'a':228,'e':235,\ + 'i':239,'o':245,'u':252}, + {'A':197,'a':229}] +NOISE_KEYS = ['Shift_L', 'Shift_R', 'Control_L', 'Caps_Lock', 'Pause',\ + 'Alt_L', 'Alt_R', 'KP_Enter', 'ISO_Level3_Shift', 'KP_Divide',\ + 'Escape', 'Return', 'KP_Page_Up', 'Up', 'Down', 'Menu',\ + 'Left', 'Right', 'KP_Home', 'KP_End', 'KP_Up', 'Super_L',\ + 'KP_Down', 'KP_Left', 'KP_Right', 'KP_Page_Down', 'Scroll_Lock',\ + 'Page_Down', 'Page_Up'] +WHITE_SPACE = ['space','Tab'] + diff --git a/sprites.py b/sprites.py index 9f8c969..af0ac25 100644 --- a/sprites.py +++ b/sprites.py @@ -110,6 +110,7 @@ class Sprite: self.inval() self.x,self.y = pos self.inval() + self.sprites.redraw_sprites() def set_shape(self, image): self.inval() @@ -165,6 +166,7 @@ class Sprite: def hide(self): self.inval() self.sprites.remove_from_list(self) + self.sprites.redraw_sprites() def inval(self): self.sprites.area.invalidate_rect( diff --git a/talogo.py b/talogo.py index 9ca6210..1a54be5 100644 --- a/talogo.py +++ b/talogo.py @@ -272,8 +272,8 @@ def debug_trace(lc, token): tmp = k +":" + str(v) + "\n" my_string += tmp shp = 'info' - setshape(lc.tw.status_spr, lc.tw.status_shapes[shp]) - setlabel(lc.tw.status_spr, _(my_string)) + lc.tw.status_spr.set_shape(lc.tw.status_shapes[shp]) + lc.tw.status_spr.set_label(_(my_string)) lc.tw.status_spr.set_layer(710) return @@ -1067,8 +1067,8 @@ def showlabel(lc,label): label='' else: shp = 'status' - setshape(lc.tw.status_spr, lc.tw.status_shapes[shp]) - setlabel(lc.tw.status_spr, label) + lc.tw.status_spr.set_shape(lc.tw.status_shapes[shp]) + lc.tw.status_spr.set_label(label) lc.tw.status_spr.set_layer(710) def stop_logo(tw): diff --git a/taproject.py b/taproject.py index fa22271..52dc961 100644 --- a/taproject.py +++ b/taproject.py @@ -42,7 +42,7 @@ except (ImportError, AttributeError): from StringIO import StringIO import os.path -from tasprites import * +# from tasprites import * from taturtle import * from talogo import stop_logo from talogo import get_pixbuf_from_journal @@ -50,6 +50,7 @@ try: from sugar.datastore import datastore except: pass +import sprites nolabel = ['audiooff', 'descriptionoff', 'journal'] shape_dict = {'journal':'texton', \ @@ -58,7 +59,7 @@ shape_dict = {'journal':'texton', \ def new_project(tw): stop_logo(tw) - for b in blocks(tw): hide(b) + for b in blocks(tw): b.hide() tw.turtle.canvas.set_layer(600) clearscreen(tw.turtle) tw.save_file_name = None @@ -283,7 +284,7 @@ def serialize_stack(tw): def assemble_stack_to_clone(tw): if tw.spr is None or tw.spr.type is not "block": (x,y) = tw.window.get_pointer() - spr = findsprite(tw,(x,y)) + spr = tw.sprites.find_sprite((x,y)) if spr is not None: print "found block of type " + spr.type else: @@ -334,7 +335,7 @@ def do_dialog(tw,dialog): dialog.destroy() return result -def blocks(tw): return [spr for spr in tw.sprites if spr.type == 'block'] +def blocks(tw): return [spr for spr in tw.sprites.list if spr.type == 'block'] def findgroup(b): group=[b] diff --git a/tasetup.py b/tasetup.py index 6e1f727..8661f31 100644 --- a/tasetup.py +++ b/tasetup.py @@ -57,7 +57,7 @@ selectors = ( ('setxy','setxy','twoargs',0,0), ('seth','seth','onearg',0), ('show','show','onesarg',_('text')), - ('setscale','setscale','onearg',33), + ('set scale','setscale','onearg',33), ('show','show','onecarg','None'), ('xcor','xcor','num'), ('ycor','ycor','num'), @@ -68,15 +68,15 @@ selectors = ( ('image','insertimage','image','None'), ('write','write','1sarg',_('text'),32))), ('pen', 55, - (('penup','penup','noarg'), - ('pendown','pendown','noarg'), - ('setpensize','setpensize','1arg',5), - ('settextsize','settextsize','1arg',32), - ('setcolor','setcolor','1arg',0), - ('setshade','setshade','1arg',50), - ('fillscreen','fillscreen','twoargs',60,80), - ('pensize','pensize','num'), - ('textsize','textsize','num'), + (('pen up','penup','noarg'), + ('pen down','pendown','noarg'), + ('set pen size','setpensize','1arg',5), + ('set text size','settextsize','1arg',32), + ('set color','setcolor','1arg',0), + ('set shade','setshade','1arg',50), + ('fill screen','fillscreen','twoargs',60,80), + ('pen size','pensize','num'), + ('text_size','textsize','num'), ('color','color','num'), ('shade','shade','num'), ('red','red','num'), @@ -87,8 +87,8 @@ selectors = ( ('blue','blue','num'), ('purple','purple','num'), # not selectable, but here for backward compatability - ('settextcolor','settextcolor','1arg',0), - ('textcolor','textcolor','num'))), + ('set_text_color','settextcolor','1arg',0), + ('text_color','textcolor','num'))), ('numbers', 55, (('number','','num',100,float,numcheck), ('plus2','plus','newari'), @@ -118,8 +118,8 @@ selectors = ( ('forever','forever','forever'), ('repeat','repeat','repeat',4), ('if','if','if'), - ('stopstack','stopstack','stop'), - ('ifelse','ifelse','ifelse'), + ('stop_stack','stopstack','stop'), + ('if else','ifelse','ifelse'), ('hspace','nop','hspace'), ('vspace','nop','vspace'), # not selectable, but here for backward compatability @@ -133,14 +133,14 @@ selectors = ( ('hat','nop3','starts',_('action')), ('stack','stack','sarg',_('action')), ('storeinbox1','storeinbox1','1arg'), - ('box1','box1','num'), + ('box 1','box1','num'), ('storeinbox2','storeinbox2','1arg'), - ('box2','box2','num'), - ('storein','storeinbox','1varg',_('box'),100), + ('box 2','box2','num'), + ('store in','storeinbox','1varg',_('box'),100), ('box','box','nfuncs',_('box')), ('string','','string',_('name'),str,strcheck), # not selectable, but here for backward compatability - ('storeinbox','storeinbox','1sarg',_('box'),100))), + ('store in box','storeinbox','1sarg',_('box'),100))), ('sensors', 55, (('kbinput','kbinput','noarg2'), ('keyboard','keyboard','num'), @@ -318,7 +318,8 @@ def setup_misc(tw): # tw.status_spr = Sprite(tw,0,(tw.height-175), \ tw.status_spr = sprites.Sprite(tw.sprites, 0, (tw.height-175), \ tw.status_shapes['status']) - tw.status_spr.set_label_attributes(1.0, True, "left") + tw.status_spr.set_label("test") + # tw.status_spr.set_label_attributes(1.0, True, "left") tw.status_spr.type = 'status' tw.status_spr.set_layer(900) tw.status_spr.hide() @@ -344,7 +345,8 @@ def setup_selector(tw,name,y,blockdescriptions): protos = [] for b in blockdescriptions: bname,primname,docktype = b[0:3] - image = load_image(tw, tw.path_lang, name, bname) + # image = load_image(tw, tw.path_lang, name, bname) + image = None proto = taProto() proto.name = bname proto.image = image diff --git a/tasprites.py b/tasprites.py index 6a7a44f..327e503 100644 --- a/tasprites.py +++ b/tasprites.py @@ -45,7 +45,8 @@ def redrawsprites(tw): class Sprite(): def __init__(self, tw, x, y, image, altlabel=False): - self.tw, self.x, self.y = tw,x,y + print "graphics context %s" % (str(tw.gc)) + self.tw, self.x, self.y = tw, x, y self.setimage(image) self.label = None self.ds_id = None @@ -88,7 +89,7 @@ class Sprite(): def setshapex(self): self.inval() - def setlayer(self, layer): + def set_layer(self, layer): sprites = self.tw.sprites if self in sprites: sprites.remove(self) self.layer = layer diff --git a/taturtle.py b/taturtle.py index 3423533..f11b579 100644 --- a/taturtle.py +++ b/taturtle.py @@ -26,6 +26,7 @@ class taTurtle: pass # from tasprites import * from tasetup import load_image import sprites +import pango colors = {} DEGTOR = 2*pi/360 diff --git a/tawindow.py b/tawindow.py index 8e7a9ed..ce007ba 100644 --- a/tawindow.py +++ b/tawindow.py @@ -188,7 +188,7 @@ class TurtleArtWindow(): for b in self._blocks(): b.set_layer(650) self.show_palette() self.hide = False - inval(self.turtle.canvas) + self.turtle.canvas.inval() """ @@ -273,19 +273,19 @@ class TurtleArtWindow(): unselect """ def _unselect(self): - if self.selected_block.label in ['-', '.', '-.']: - setlabel(self.selected_block,'0') + if self.selected_block.labels[0] in ['-', '.', '-.']: + self.selected_block.set_label('0') # put an upper and lower bound on numbers to prevent OverflowError if self.selected_block.proto.name == 'number' and \ - self.selected_block.label is not None: + self.selected_block.labels[0] is not None: try: - i = float(self.selected_block.label) + i = float(self.selected_block.labels[0]) if i > 1000000: - setlabel(self.selected_block,'1') + self.selected_block.set_label('1') showlabel(self.lc,"#overflowerror") elif i < -1000000: - setlabel(self.selected_block,'-1') + self.selected_block.set_label('-1') showlabel(self.lc,"#overflowerror") except ValueError: pass @@ -551,14 +551,14 @@ class TurtleArtWindow(): self.selected_block.proto.name == 'number': if keyname in ['minus', 'period']: keyname = {'minus': '-', 'period': '.'}[keyname] - oldnum = self.selected_block.label + oldnum = self.selected_block.labels[0] selblock=self.selected_block.proto if keyname == 'BackSpace': if len(oldnum) > 1: newnum = oldnum[:len(oldnum)-1] else: newnum = '' - setlabel(self.selected_block, selblock.check(newnum,oldnum)) + self.selected_block.set_label(selblock.check(newnum,oldnum)) if len(newnum) > 0: self.firstkey = False else: @@ -634,14 +634,14 @@ class TurtleArtWindow(): keyunicode = 0 if keyname in WHITE_SPACE: keyunicode = 32 - oldnum = self.selected_block.label + oldnum = self.selected_block.labels[0] selblock=self.selected_block.proto if keyname == 'BackSpace': if len(oldnum) > 1: newnum = oldnum[:len(oldnum)-1] else: newnum = '' - setlabel(self.selected_block, selblock.check(newnum,oldnum)) + self.selected_block.set_label(selblock.check(newnum,oldnum)) if len(newnum) > 0: self.firstkey = False else: @@ -661,7 +661,7 @@ class TurtleArtWindow(): newnum = oldnum else: newnum = "" - setlabel(self.selected_block, selblock.check(newnum,oldnum)) + self.selected_block.set_label(selblock.check(newnum,oldnum)) self.firstkey = False return True @@ -884,7 +884,7 @@ class TurtleArtWindow(): newspr.type = 'block' newspr.proto = proto if self.defdict.has_key(newspr.proto.name): - newspr.label=self.defdict[newspr.proto.name] + newspr.labels[0]=self.defdict[newspr.proto.name] newspr.connections = [None]*len(proto.docks) for i in range(len(proto.defaults)): dock = proto.docks[i+1] diff --git a/turtleart.py b/turtleart.py index 9304e79..fa45843 100755 --- a/turtleart.py +++ b/turtleart.py @@ -159,12 +159,12 @@ class TurtleMain(): def _do_run_cb(self, widget): self.tw.lc.trace = 0 - self.tw.runbutton(0) + self.tw.run_button(0) return def _do_step_cb(self, widget): self.tw.lc.trace = 0 - self.tw.runbutton(3) + self.tw.run_button(3) return def _do_stop_cb(self, widget): -- cgit v0.9.1