Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2013-01-28 21:12:16 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2013-04-23 13:35:16 (GMT)
commitf262598e826965ad65b07b46e380431faa4f99e6 (patch)
tree1b5802542907928a90e03ff8947a2d92dce84157
parent449479a3a285c84fa1d109a2cf768c5489911a19 (diff)
Improve draw of keys (letters) in loop & drums and the highlight of them
Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r--Jam/Block.py115
-rw-r--r--Jam/Desktop.py11
-rw-r--r--Jam/JamMain.py3
3 files changed, 67 insertions, 62 deletions
diff --git a/Jam/Block.py b/Jam/Block.py
index d5f706b..d2e2deb 100644
--- a/Jam/Block.py
+++ b/Jam/Block.py
@@ -332,7 +332,7 @@ class Instrument(Block):
self.owner.activateInstrument( self )
Block.button_release( self, event )
- def _doDraw( self, startX, startY, stopX, stopY, ctx):
+ def _doDraw(self, startX, startY, stopX, stopY, ctx, highlight=False):
x = max( startX, self.x )
y = max( startY, self.y )
endX = min( stopX, self.endX )
@@ -357,6 +357,10 @@ class Instrument(Block):
else:
ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(
self.owner.colors["Border_Inactive"]))
+
+ if highlight:
+ ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(
+ self.owner.colors["Border_Highlight"]))
ctx.stroke()
ctx.translate(x, y)
@@ -364,10 +368,9 @@ class Instrument(Block):
ctx.paint()
ctx.restore()
- def drawHighlight( self, startX, startY, stopX, stopY, pixmap ):
- self.gc.foreground = self.owner.colors["Border_Highlight"]
- self.gc.set_clip_origin( self.x-Instrument.MASK_START, self.y )
- pixmap.draw_rectangle( self.gc, True, self.x, self.y, self.width, self.height )
+ def drawHighlight(self, startX, startY, stopX, stopY, pixmap):
+ self._doDraw(startX, startY, stopX, stopY, ctx, highlight=True)
+
class Drum(Block):
@@ -494,7 +497,8 @@ class Drum(Block):
self.owner.activateDrum( self )
Block.button_release( self, event )
- def _doDraw(self, startX, startY, stopX, stopY, ctx):
+ def _doDraw(self, startX, startY, stopX, stopY, ctx, highlight=False,
+ key_highlight=False):
x = max( startX, self.x )
y = max( startY, self.y )
endX = min( stopX, self.endX )
@@ -519,6 +523,10 @@ class Drum(Block):
else:
ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(
self.owner.colors["Border_Inactive"]))
+ if highlight:
+ ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(
+ self.owner.colors["Border_Highlight"]))
+
ctx.stroke()
# draw block
@@ -529,29 +537,29 @@ class Drum(Block):
ctx.restore()
# draw key
- #self.gc.set_clip_origin( self.x+Drum.KEYRECT[0]-Block.KEYMASK_START,
- # self.y+Drum.KEYRECT[1] )
-
ctx.save()
- ctx.translate(self.x + Drum.KEYRECT[0] - Block.KEYMASK_START,
- self.y + Drum.KEYRECT[1])
- ctx.set_source_surface(self.keyImage[ self.active ])
+ ctx.translate(self.x + Drum.KEYRECT[0], self.y + Drum.KEYRECT[1])
+ ctx.set_source_surface(self.keyImage[self.active])
ctx.paint()
ctx.restore()
-
- #pixmap.draw_drawable( self.gc, , 0, 0, self.x+Drum.KEYRECT[0],
- #self.y+Drum.KEYRECT[1], Block.KEYSIZE, Block.KEYSIZE )
ctx.restore()
- def drawHighlight( self, startX, startY, stopX, stopY, pixmap ):
- self.gc.foreground = self.owner.colors["Border_Highlight"]
- self.gc.set_clip_origin( self.x-Drum.MASK_START, self.y )
- pixmap.draw_rectangle( self.gc, True, self.x, self.y, self.width, self.height )
+ if key_highlight:
+ ctx.save()
+ ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(
+ self.owner.colors["Border_Highlight"]))
+ ctx.translate(x + Drum.KEYRECT[0] - 1, y + Drum.KEYRECT[1] - 1)
+ CairoUtil.draw_round_rect(ctx, 0, 0, Block.KEYSIZE + 2,
+ Block.KEYSIZE + 2, radio=5)
+ ctx.stroke()
+ ctx.restore()
+
- def drawKeyHighlight( self, pixmap ):
- self.gc.foreground = self.owner.colors["Border_Highlight"]
- self.gc.set_clip_origin( self.x+Drum.KEYRECT[0]-Block.KEYMASK_START, self.y+Drum.KEYRECT[1]-Block.KEYSIZE )
- pixmap.draw_rectangle( self.gc, True, self.x+Drum.KEYRECT[0], self.y+Drum.KEYRECT[1], Block.KEYSIZE, Block.KEYSIZE )
+ def drawHighlight(self, startX, startY, stopX, stopY, ctx):
+ self._doDraw(startX, startY, stopX, stopY, ctx, highlight=True)
+
+ def drawKeyHighlight(self, ctx):
+ self._doDraw(self.x, self.y, self.x, self.y, ctx, key_highlight=True)
def regenerate( self ):
self.data["page"] = self.owner.owner._generateDrumLoop( self.data["id"], self.data["beats"], self.data["regularity"], self.data["reverb"], self.data["page"] )
@@ -792,7 +800,8 @@ class Loop(Block):
self.owner.activateLoop( root.child )
Block.button_release( self, event )
- def _doDraw( self, startX, startY, stopX, stopY, ctx):
+ def _doDraw(self, startX, startY, stopX, stopY, ctx, highlight=False,
+ key_highlight=False):
x = max(startX, self.x)
y = max(startY, self.y)
@@ -818,6 +827,11 @@ class Loop(Block):
else:
ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(
self.owner.colors["Border_Inactive"]))
+
+ if highlight:
+ ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(
+ self.owner.colors["Border_Highlight"]))
+
ctx.stroke()
ctx.save()
@@ -827,41 +841,30 @@ class Loop(Block):
ctx.paint()
ctx.restore()
- def drawHighlight( self, startX, startY, stopX, stopY, pixmap ):
- self.gc.foreground = self.owner.colors["Border_Highlight"]
-
- #-- draw head -----------------------------------------
-
- self.gc.set_clip_origin( self.x-Loop.MASK_START, self.y )
- pixmap.draw_rectangle( self.gc, True, self.x, self.y, Loop.HEAD, self.height )
-
- #-- draw beats ----------------------------------------
-
- beats = self.owner.noteDB.getPage(self.data["id"]).beats - 1 # last beat is drawn with the tail
- x = self.x + Loop.HEAD
- while beats > 3:
- self.gc.set_clip_origin( x-Loop.MASK_BEAT, self.y )
- pixmap.draw_rectangle( self.gc, True, x, self.y, Loop.BEAT_MUL3, self.height )
-
- x += Loop.BEAT_MUL3
- beats -= 3
- if beats:
- width = Loop.BEAT*beats
-
- self.gc.set_clip_origin( x-Loop.MASK_BEAT, self.y )
- pixmap.draw_rectangle( self.gc, True, x, self.y, width, self.height )
-
- x += width
+ #draw key
+ if self.keyActive:
+ ctx.save()
+ ctx.translate(x + Loop.KEYRECT[0], y + Loop.KEYRECT[1])
+ ctx.set_source_surface(self.keyImage[self.active])
+ ctx.paint()
+ ctx.restore()
+ if key_highlight:
+ ctx.save()
+ ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(
+ self.owner.colors["Border_Highlight"]))
+ ctx.translate(x + Loop.KEYRECT[0] - 1, y + Loop.KEYRECT[1] - 1)
+ CairoUtil.draw_round_rect(ctx, 0, 0, Block.KEYSIZE + 2,
+ Block.KEYSIZE + 2, radio=5)
+ ctx.stroke()
+ ctx.restore()
- #-- draw tail -----------------------------------------
+ ctx.restore()
- self.gc.set_clip_origin( x-Loop.MASK_TAIL, self.y )
- pixmap.draw_rectangle( self.gc, True, x, self.y, Loop.TAIL, self.height )
+ def drawHighlight(self, startX, startY, stopX, stopY, ctx):
+ self._doDraw(startX, startY, stopX, stopY, ctx, highlight=True)
- def drawKeyHighlight( self, pixmap ):
- self.gc.foreground = self.owner.colors["Border_Highlight"]
- self.gc.set_clip_origin( self.x+Loop.KEYRECT[0]-Block.KEYMASK_START, self.y+Loop.KEYRECT[1]-Block.KEYSIZE )
- pixmap.draw_rectangle( self.gc, True, self.x+Loop.KEYRECT[0], self.y+Loop.KEYRECT[1], Block.KEYSIZE, Block.KEYSIZE )
+ def drawKeyHighlight(self, ctx):
+ self._doDraw(self.x, self.y, self.x, self.y, ctx, key_highlight=True)
def clear( self ):
self.owner.noteDB.deleteNotesByTrack( [ self.data["id"] ], [ 0 ] )
diff --git a/Jam/Desktop.py b/Jam/Desktop.py
index c62d018..f137d81 100644
--- a/Jam/Desktop.py
+++ b/Jam/Desktop.py
@@ -428,9 +428,9 @@ class Desktop( Gtk.EventBox ):
return
# draw possible parent
- # TODO
- #if self.possibleParent:
- # self.possibleParent.drawHighlight( startX, startY, stopX, stopY, DA.window )
+ if self.possibleParent:
+ self.possibleParent.drawHighlight(startX, startY, stopX, stopY,
+ ctx)
# draw dragged objects
if self.dragging:
@@ -438,11 +438,12 @@ class Desktop( Gtk.EventBox ):
# draw possible substitute
if self.possibleSubstitute:
- self.possibleSubstitute.drawHighlight( startX, startY, stopX, stopY, DA.window )
+ self.possibleSubstitute.drawHighlight(startX, startY, stopX, stopY,
+ ctx)
# draw key highlight
if self.overKey:
- self.overKey.drawKeyHighlight(DA.get_window())
+ self.overKey.drawKeyHighlight(ctx)
def invalidate_rect( self, x, y, width, height, base = True ):
self.dirtyRectToAdd.x = x
diff --git a/Jam/JamMain.py b/Jam/JamMain.py
index 2acc96f..f93e5c0 100644
--- a/Jam/JamMain.py
+++ b/Jam/JamMain.py
@@ -987,7 +987,8 @@ class JamMain(Gtk.EventBox):
x = (Block.Block.KEYSIZE - extents[1].width) // 2
y = (Block.Block.KEYSIZE - extents[1].height) // 2
ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(border_color))
- ctx.rectangle(0, 0, Block.Block.KEYSIZE, Block.Block.KEYSIZE)
+ CairoUtil.draw_round_rect(ctx, 0, 0, Block.Block.KEYSIZE,
+ Block.Block.KEYSIZE, radio=5)
ctx.fill()
ctx.translate(x, y)
ctx.set_source_rgb(*CairoUtil.gdk_color_to_cairo(bg_color))