diff options
author | Walter Bender <walter@walter-laptop.(none)> | 2010-01-20 14:14:27 (GMT) |
---|---|---|
committer | Walter Bender <walter@walter-laptop.(none)> | 2010-01-20 14:14:27 (GMT) |
commit | a30ed7c96cee279ac0449d5bf816d7f23dcf3d94 (patch) | |
tree | 5828ec250f45427ba54ac3c9fb3d02d456c5ba8a | |
parent | 9d575d1de1bfae8212a936aaf64556dd98a9ee80 (diff) |
broken sprites, but closer to working?
-rw-r--r-- | block.py | 19 | ||||
-rw-r--r-- | sprites.py | 10 | ||||
-rw-r--r-- | talogo.py | 18 | ||||
-rw-r--r-- | taproject.py | 4 | ||||
-rw-r--r-- | tasetup.py | 13 | ||||
-rw-r--r-- | taturtle.py | 4 | ||||
-rw-r--r-- | tawindow.py | 34 |
7 files changed, 59 insertions, 43 deletions
@@ -62,11 +62,11 @@ class Blocks: # A class for the individual blocks # class Block: - def __init__(self, blocks, prototype_style, labels=[], + def __init__(self, blocks, proto_name, x, y, labels=[], colors=["#00A000","#00FF00"], scale=1.0): self.blocks = blocks self.spr = None - self._new_block_from_prototype(prototype_style, labels, colors, scale) + self._new_block_from_prototype(proto_name, labels, colors, scale, x, y) self.blocks.append_to_list(self) # # TODO: @@ -78,10 +78,11 @@ class Block: # debug code # etc. - def _new_block_from_prototype(self, proto_name, labels, colors, scale): + def _new_block_from_prototype(self, name, labels, colors, scale, x, y): + print "%s %s (%d %d)" % (name, labels[0], x, y) basic_style = ['forward', 'back', 'left', 'right'] box_style = ['number'] - if proto_name in basic_style: + if name in basic_style: svg = block_factory.SVG() svg.set_scale(scale) svg.expand(20,0) @@ -91,15 +92,19 @@ class Block: svg.set_slot(True) svg.set_gradiant(True) svg.set_colors(colors) - self.spr = sprites.Sprite(self.blocks.sprites, 0, 0, + print "creating new basic block" + self.spr = sprites.Sprite(self.blocks.sprites, x, y, svg_str_to_pixbuf(svg.basic_block())) - elif proto_name in number_style: + 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(20,0) svg.set_gradiant(True) svg.set_colors(colors) - self.spr = sprites.Sprite(self.blocks.sprites, 0, 0, + self.spr = sprites.Sprite(self.blocks.sprites, x, y, svg_str_to_pixbuf(svg.basic_box())) for l in labels: @@ -31,10 +31,14 @@ import pango # A class for the list of sprites and everything they share in common # class Sprites: - def __init__(self, canvas): + def __init__(self, canvas, area=None, gc=None): self.canvas = canvas - self.area = self.canvas.window - self.gc = self.area.new_gc() + if area == None: + self.area = self.canvas.window + self.gc = self.area.new_gc() + else: + self.area = area + self.gc = gc self.cm = self.gc.get_colormap() self.list = [] @@ -158,7 +158,7 @@ def readline(lc, line): return res def setup_cmd(lc, str): - lc.tw.turtle.spr.setlayer(100) + lc.tw.turtle.spr.set_layer(100) lc.procstop=False list = readline(lc, str) lc.step = start_eval(lc, list) @@ -176,11 +176,11 @@ def evline(lc, list): lc.arglist = None while lc.iline: if lc.tw.step_time > 0: - lc.tw.turtle.spr.setlayer(630) + lc.tw.turtle.spr.set_layer(630) endtime = millis()+an_int(lc,lc.tw.step_time)*100 while millis()<endtime: yield True - lc.tw.turtle.spr.setlayer(100) + lc.tw.turtle.spr.set_layer(100) token = lc.iline[0] if token==lc.symopar: token=lc.iline[1] icall(lc, eval); yield True @@ -274,7 +274,7 @@ def debug_trace(lc, token): shp = 'info' setshape(lc.tw.status_spr, lc.tw.status_shapes[shp]) setlabel(lc.tw.status_spr, _(my_string)) - lc.tw.status_spr.setlayer(710) + lc.tw.status_spr.set_layer(710) return def undefined_check(lc, token): @@ -286,11 +286,11 @@ def no_args_check(lc): raise logoerror("#noinput") def prim_wait(lc,time): - lc.tw.turtle.spr.setlayer(630) + lc.tw.turtle.spr.set_layer(630) endtime = millis()+an_int(lc,time*1000) while millis()<endtime: yield True - lc.tw.turtle.spr.setlayer(100) + lc.tw.turtle.spr.set_layer(100) ireturn(lc); yield True def prim_repeat(lc, num, list): @@ -989,11 +989,11 @@ def doevalstep(lc): try: lc.step.next() except StopIteration: - lc.tw.turtle.spr.setlayer(630) + lc.tw.turtle.spr.set_layer(630) return False except logoerror, e: showlabel(lc, str(e)[1:-1]) - lc.tw.turtle.spr.setlayer(630) + lc.tw.turtle.spr.set_layer(630) return False return True @@ -1069,7 +1069,7 @@ def showlabel(lc,label): shp = 'status' setshape(lc.tw.status_spr, lc.tw.status_shapes[shp]) setlabel(lc.tw.status_spr, label) - lc.tw.status_spr.setlayer(710) + lc.tw.status_spr.set_layer(710) def stop_logo(tw): tw.step_time = 0 diff --git a/taproject.py b/taproject.py index 8fde7c7..fa22271 100644 --- a/taproject.py +++ b/taproject.py @@ -59,7 +59,7 @@ shape_dict = {'journal':'texton', \ def new_project(tw): stop_logo(tw) for b in blocks(tw): hide(b) - tw.turtle.canvas.setlayer(600) + tw.turtle.canvas.set_layer(600) clearscreen(tw.turtle) tw.save_file_name = None @@ -181,7 +181,7 @@ def load_spr(tw,b): dsobject.destroy() except: print "couldn't open dsobject (" + str(spr.ds_id) + ")" - spr.setlayer(650) + spr.set_layer(650) return spr def load_turtle(tw,b): @@ -31,6 +31,9 @@ from gettext import gettext as _ from tasprites import * +import block +import sprites + def numcheck(new, old): if new is '': return "0" if new in ['-', '.', '-.']: return new @@ -264,7 +267,7 @@ def setup_selectors(tw,s): def setup_misc(tw): tw.category_spr = Sprite(tw,0, 0, tw.selbuttons[0].group) tw.category_spr.type = 'category' - tw.category_spr.setlayer(660) + tw.category_spr.set_layer(660) # masks get positioned on top of other blocks tw.select_mask = Sprite(tw,100,100,\ load_image(tw, tw.path, '', 'masknumber')) @@ -287,12 +290,12 @@ def setup_misc(tw): tw.cartesian_coordinates_spr = Sprite(tw, tw.width/2-600, tw.height/2-450, \ load_image(tw, tw.path, '', "Cartesian")) tw.cartesian_coordinates_spr.type = 'coordinates' - tw.cartesian_coordinates_spr.setlayer(610) + tw.cartesian_coordinates_spr.set_layer(610) tw.cartesian_coordinates_spr.hide() tw.polar_coordinates_spr = Sprite(tw, tw.width/2-600, tw.height/2-450, \ load_image(tw, tw.path, '', "polar")) tw.polar_coordinates_spr.type = 'coordinates' - tw.polar_coordinates_spr.setlayer(610) + tw.polar_coordinates_spr.set_layer(610) tw.polar_coordinates_spr.hide() # status shapes get positioned at the bottom of the screen tw.status_shapes = {} @@ -310,7 +313,7 @@ def setup_misc(tw): tw.status_spr = Sprite(tw,0,(tw.height-175), \ tw.status_shapes['status'],True) tw.status_spr.type = 'status' - tw.status_spr.setlayer(900) + tw.status_spr.set_layer(900) tw.status_spr.hide() # everything should be loaded at this point # print tw.status_shapes @@ -321,7 +324,7 @@ def setup_selector(tw,name,y,blockdescriptions): offshape = load_image(tw, tw.path, 'palette', name+'off') onshape = load_image(tw, tw.path, 'palette', name+'on') spr = Sprite(tw,143,y,offshape) - spr.setlayer(800) + spr.set_layer(800) spr.offshape = offshape spr.onshape = onshape # print 'setting up selector ' + name diff --git a/taturtle.py b/taturtle.py index 524a35f..350b9b5 100644 --- a/taturtle.py +++ b/taturtle.py @@ -56,12 +56,12 @@ def tNew(tw,w,h): t.tw, t.width, t.height = tw, w, h t.canvas = Sprite(tw,0,0,gtk.gdk.Pixmap(tw.area,w,h,-1)) t.canvas.type = 'canvas' - t.canvas.setlayer(600) + t.canvas.set_layer(600) t.shapelist = \ [load_image(tw, tw.path, 'shapes','t'+str(i)) for i in range(36)] t.spr = Sprite(tw,100,100,t.shapelist[0]) t.spr.type = 'turtle' - t.spr.setlayer(630) + t.spr.set_layer(630) t.gc = t.canvas.image.new_gc() t.shade = 0 clearscreen(t) diff --git a/tawindow.py b/tawindow.py index 7d61fc0..6126f6e 100644 --- a/tawindow.py +++ b/tawindow.py @@ -152,7 +152,7 @@ class TurtleArtWindow(): """ NEW SVG/BLOCK initializations """ - self.nsprites = sprites.Sprites(self.window) + self.nsprites = sprites.Sprites(self.window, self.area, self.gc) self.blocks = block.Blocks(self.nsprites) @@ -166,7 +166,7 @@ class TurtleArtWindow(): eraser_button: hide status block """ def eraser_button(self): - self.status_spr.setlayer(400) + self.status_spr.set_layer(400) clear(self.lc) display_coordinates(self) @@ -191,13 +191,13 @@ class TurtleArtWindow(): """ def hideshow_button(self): if self.hide is False: - for b in self._blocks(): b.setlayer(100) + for b in self._blocks(): b.set_layer(100) self._hide_palette() self.select_mask.hide() self.select_mask_string.hide() self.hide = True else: - for b in self._blocks(): b.setlayer(650) + for b in self._blocks(): b.set_layer(650) self.show_palette() self.hide = False inval(self.turtle.canvas) @@ -234,7 +234,7 @@ class TurtleArtWindow(): if self.selected_block != None: self._unselect() else: - self.status_spr.setlayer(400) + self.status_spr.set_layer(400) spr = findsprite(self,(x,y)) self.x, self.y = x,y self.dx = 0 @@ -274,7 +274,7 @@ class TurtleArtWindow(): show palette """ def show_palette(self): - for i in self.selbuttons: i.setlayer(800) + for i in self.selbuttons: i.set_layer(800) self._select_category(self.selbuttons[0]) self.palette = True @@ -588,7 +588,8 @@ class TurtleArtWindow(): self.run_button(0) elif self.spr is not None: if self.spr.type == 'turtle': # jog turtle with arrow keys - if keyname == 'KP_Up' or keyname == 'j' or keyname == 'Up': + if keyname == 'KP_Up' or keyname == 'j' \ + or keyname == 'Up': self._jog_turtle(0,10) elif keyname == 'KP_Down' or keyname == 'k' or \ keyname == 'Down': @@ -728,19 +729,19 @@ class TurtleArtWindow(): for b in self.draggroup: b.move((b.x+200, b.y)) self._snap_to_dock() - for b in self.draggroup: b.setlayer(650) + for b in self.draggroup: b.set_layer(650) self.draggroup = None if self.block_operation=='click': if self.spr.proto.name=='number': self.selected_block = spr self.select_mask.move((spr.x-5,spr.y-5)) - self.select_mask.setlayer(660) + self.select_mask.set_layer(660) self.firstkey = True elif self.defdict.has_key(spr.proto.name): self.selected_block = spr if self.spr.proto.name=='string': self.select_mask_string.move((spr.x-5,spr.y-5)) - self.select_mask_string.setlayer(660) + self.select_mask_string.set_layer(660) self.firstkey = True elif self.spr.proto.name in self.importblocks: self._import_from_journal(spr) @@ -758,13 +759,13 @@ class TurtleArtWindow(): if self.spr.proto.name=='number': self.selected_block = self.spr self.select_mask.move((self.spr.x-5,self.spr.y-5)) - self.select_mask.setlayer(660) + self.select_mask.set_layer(660) self.firstkey = True elif self.defdict.has_key(self.spr.proto.name): self.selected_block = self.spr if self.spr.proto.name=='string': self.select_mask_string.move((self.spr.x-5,self.spr.y-5)) - self.select_mask_string.setlayer(660) + self.select_mask_string.set_layer(660) self.firstkey = True elif self.spr.proto.name in self.importblocks: self._import_from_journal(self.spr) @@ -895,7 +896,10 @@ class TurtleArtWindow(): newspr = Sprite(self,x-20,y-20,self.media_shapes['pythonloaded']) else: newspr = Sprite(self,x-20,y-20,proto.image) - newspr.setlayer(2000) + newblk = block.Block(self.blocks,proto.name,x-20,y-20,[proto.name]) + newspr = newblk.spr + + newspr.set_layer(2000) self.dragpos = 20,20 newspr.type = 'block' newspr.proto = proto @@ -911,7 +915,7 @@ class TurtleArtWindow(): argspr.type = 'block' argspr.proto = argproto argspr.label = str(proto.defaults[i]) - argspr.setlayer(2000) + argspr.set_layer(2000) argspr.connections = [newspr,None] newspr.connections[i+1] = argspr self.draggroup = findgroup(newspr) @@ -925,7 +929,7 @@ class TurtleArtWindow(): def _block_pressed(self, mask, x, y, spr): if spr is not None: self.draggroup = findgroup(spr) - for b in self.draggroup: b.setlayer(2000) + for b in self.draggroup: b.set_layer(2000) if spr.connections[0] != None and spr.proto.name == 'lock': b = self._find_top_block(spr) self.dragpos = x-b.x,y-b.y |