diff options
author | amartin <olpc@xo-05-28-21.localdomain> | 2007-08-26 11:40:29 (GMT) |
---|---|---|
committer | amartin <olpc@xo-05-28-21.localdomain> | 2007-08-26 11:40:29 (GMT) |
commit | 87defb862218ca2e4d706e1affa200a6cae2032e (patch) | |
tree | 06fc2af30b193d180a571e4a3bc81a65733a8f3c /Jam/Block.py | |
parent | 6a209f15052e84430279a5fa66c2d661513c067f (diff) |
Jam
Diffstat (limited to 'Jam/Block.py')
-rw-r--r-- | Jam/Block.py | 63 |
1 files changed, 43 insertions, 20 deletions
diff --git a/Jam/Block.py b/Jam/Block.py index d8bc099..5eaf53e 100644 --- a/Jam/Block.py +++ b/Jam/Block.py @@ -16,6 +16,8 @@ class Block(): WIDTH = 100 HEIGHT = 100 + SNAP = 15 + def __init__( self, owner, graphics_context, data ): self.owner = owner self.gc = graphics_context @@ -89,22 +91,12 @@ class Block(): def snapToParentLoc( self, loc ): self.setLoc( loc[0] - self.parentOffset, loc[1] ) - def testSubstitute( self, block ): - - if not self.canSubstitute: - return False - - if self.type != block.type: - return False - - if abs( self.x - block.x ) < 10 and abs( self.y - block.y ) < 10: - return self - - return False - def substitute( self, block ): pass # override in subclasses + def testSubstitute( self, block ): + return False + def testChild( self, loc ): if not self.canParent: @@ -112,7 +104,7 @@ class Block(): if self.child: return self.child.testChild( loc ) - elif abs( self.endX - loc[0] ) < 10 and abs( self.y - loc[1] ) < 10: + elif abs( self.endX - loc[0] ) < Block.SNAP and abs( self.y - loc[1] ) < Block.SNAP: return self return False @@ -246,10 +238,24 @@ class Instrument(Block): if not "volume" in self.data.keys(): self.data["volume"] = 0.5 + self.img = [ self.owner.getInstrumentImage( self.data["id"], False ), + self.owner.getInstrumentImage( self.data["id"], True ) ] + def substitute( self, block ): self.data["id"] = block.data["id"] + self.img = [ self.owner.getInstrumentImage( self.data["id"], False ), + self.owner.getInstrumentImage( self.data["id"], True ) ] self.invalidate_rect( True ) + def testSubstitute( self, block ): + if self.type == Loop: + return False + + if abs( self.x - block.x ) < Block.SNAP and abs( self.y - block.y ) < Block.SNAP: + return self + + return False + def _doButtonPress( self, event ): # we were hit with a button press pass @@ -273,10 +279,8 @@ class Instrument(Block): pixmap.draw_rectangle( self.gc, True, x, y, width, height ) # draw block - if self.active: self.gc.foreground = self.owner.colors["Bg_Active"] - else: self.gc.foreground = self.owner.colors["Bg_Inactive"] self.gc.set_clip_origin( self.x-Instrument.MASK_START, self.y-self.height ) - pixmap.draw_rectangle( self.gc, True, x, y, width, height ) + pixmap.draw_drawable( self.gc, self.img[self.active], x-self.x, y-self.y, x, y, width, height ) def drawHighlight( self, startX, startY, stopX, stopY, pixmap ): self.gc.foreground = self.owner.colors["Border_Highlight"] @@ -307,13 +311,33 @@ class Drum(Block): if not "seed" in self.data.keys(): self.data["seed"] = random.random() + self.img = [ self.owner.getInstrumentImage( self.data["id"], False ), + self.owner.getInstrumentImage( self.data["id"], True ) ] + + def substitute( self, block ): self.data["id"] = block.data["id"] + + self.img = [ self.owner.getInstrumentImage( self.data["id"], False ), + self.owner.getInstrumentImage( self.data["id"], True ) ] + self.invalidate_rect( True ) if self.active: self.owner.updateDrum() + def testSubstitute( self, block ): + if self.type == Loop: + return False + + if Config.INSTRUMENTSID[block.data["id"]].kit == None: + return False + + if abs( self.x - block.x ) < Block.SNAP and abs( self.y - block.y ) < Block.SNAP: + return self + + return False + def _doButtonPress( self, event ): # we were hit with a button press pass @@ -340,10 +364,9 @@ class Drum(Block): pixmap.draw_rectangle( self.gc, True, x, y, width, height ) # draw block - if self.active: self.gc.foreground = self.owner.colors["Bg_Active"] - else: self.gc.foreground = self.owner.colors["Bg_Inactive"] self.gc.set_clip_origin( self.x-Drum.MASK_START, self.y-self.height ) - pixmap.draw_rectangle( self.gc, True, x, y, width, height ) + pixmap.draw_drawable( self.gc, self.img[self.active], x-self.x, y-self.y, x, y, width, height ) + def drawHighlight( self, startX, startY, stopX, stopY, pixmap ): self.gc.foreground = self.owner.colors["Border_Highlight"] |