Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Edit/TrackInterface.py
diff options
context:
space:
mode:
authoramartin <olpc@xo-00-CE-12.localdomain>2007-06-28 21:25:38 (GMT)
committer amartin <olpc@xo-00-CE-12.localdomain>2007-06-28 21:25:38 (GMT)
commit146f6eefdb76494a1d8d9b033c64b3a686227225 (patch)
tree89485e3b794411f62e04a8739e312a6f0209f802 /Edit/TrackInterface.py
parent1a360aa3235c5b661f8eff0f9b57de4816e73d68 (diff)
network
Diffstat (limited to 'Edit/TrackInterface.py')
-rw-r--r--Edit/TrackInterface.py51
1 files changed, 44 insertions, 7 deletions
diff --git a/Edit/TrackInterface.py b/Edit/TrackInterface.py
index 5db645d..f517b1d 100644
--- a/Edit/TrackInterface.py
+++ b/Edit/TrackInterface.py
@@ -2,6 +2,8 @@ import pygtk
pygtk.require( '2.0' )
import gtk
+import gobject
+
from math import floor
import time
@@ -157,11 +159,13 @@ class TrackInterface( gtk.EventBox ):
self.pitchPerPixelDrum = float(Config.NUMBER_OF_POSSIBLE_PITCHES_DRUM-1)*Config.PITCH_STEP_DRUM / (self.trackHeightDrum - Config.HIT_HEIGHT)
self.pixelsPerPitchDrum = float(self.trackHeightDrum-Config.HIT_HEIGHT)/(Config.MAXIMUM_PITCH_DRUM - Config.MINIMUM_PITCH_DRUM )
- self.pixelsPerTick = [0] + [ self.trackWidth//(i*Config.TICKS_PER_BEAT) for i in range(1,Config.MAXIMUM_BEATS+1) ]
+ self.pixelsPerTick = [0] + [ self.trackWidth/float(i*Config.TICKS_PER_BEAT) for i in range(1,Config.MAXIMUM_BEATS+1) ]
self.ticksPerPixel = [0] + [ 1.0/self.pixelsPerTick[i] for i in range(1,Config.MAXIMUM_BEATS+1) ]
- self.beatSpacing = [0] + [ self.pixelsPerTick[i]*Config.TICKS_PER_BEAT for i in range(1,Config.MAXIMUM_BEATS+1) ]
+ self.beatSpacing = [[0]]
+ for i in range(1,Config.MAXIMUM_BEATS+1):
+ self.beatSpacing.append( [ self.ticksToPixels( i, Config.TICKS_PER_BEAT*j ) for j in range(i) ] )
# screen buffers
self.screenBuf = [ gtk.gdk.Pixmap( win, self.width, self.height ), \
@@ -173,6 +177,7 @@ class TrackInterface( gtk.EventBox ):
self.screenBufResume = [ [0,0], [0,0] ] # allows for stopping and restarting in the middle of a draw
self.curScreen = 0
self.preScreen = 1
+ self.predrawTimeout = False
#-- private --------------------------------------------
@@ -200,6 +205,25 @@ class TrackInterface( gtk.EventBox ):
def notifyPageMove( self, which, low, high ):
return
+ def notifyPageUpdate( self, page, parameter, value ):
+ if parameter == PARAMETER.PAGE_BEATS:
+ notes = self.noteDB.getNotesByPage( page, self )
+ for note in notes:
+ note.updateTransform()
+
+ if page == self.screenBufPage[self.curScreen]:
+ self.screenBufBeats[self.curScreen] = value
+ self.curBeats = value
+ if self.playheadT > value*Config.TICKS_PER_BEAT:
+ self.playheadT = value*Config.TICKS_PER_BEAT
+ self.playheadX = self.ticksToPixels( self.curBeats, self.playheadT ) + Config.TRACK_SPACING_DIV2
+ self.invalidate_rect( 0, 0, self.width, self.height, page )
+ if page == self.screenBufPage[self.preScreen]:
+ self.screenBufBeats[self.preScreen] = value
+ self.invalidate_rect( 0, 0, self.width, self.height, page )
+ self.predrawPage()
+
+
#=======================================================
# Module Interface
@@ -220,9 +244,23 @@ class TrackInterface( gtk.EventBox ):
return True
return False
- def predrawPage( self, timeout ):
+ def predrawPage( self ):
if self.screenBufPage[self.preScreen] == -1: return True # no page to predraw
- return self.draw( self.preScreen, False, timeout )
+ if not self.predrawTimeout:
+ self.predrawTimeout = gobject.timeout_add( 50, self._predrawTimeout )
+
+ def abortPredrawPage( self ):
+ if self.predrawTimeout:
+ gobject.source_remove( self.predrawTimeout )
+ self.predrawTimeout = False
+
+ def _predrawTimeout( self ):
+ if self.draw( self.preScreen, False, time.time() + 0.020 ): # 20 ms time limit
+ self.predrawTimeout = False
+ return False
+ return True
+
+
def displayPage( self, page, predraw = -1 ):
if page == self.curPage:
@@ -988,7 +1026,6 @@ class TrackInterface( gtk.EventBox ):
beatStart = Config.TRACK_SPACING_DIV2
beats = self.screenBufBeats[buf]
- beatSpacing = self.beatSpacing[beats]
pixmap = self.screenBuf[buf]
@@ -1012,7 +1049,7 @@ class TrackInterface( gtk.EventBox ):
# draw beat lines
self.gc.foreground = self.beatColor
for j in range(1,self.screenBufBeats[buf]):
- x = beatStart + j*beatSpacing
+ x = beatStart + self.beatSpacing[beats][j]
pixmap.draw_line( self.gc, x, self.trackRect[i].y, x, self.trackRect[i].y+self.trackRect[i].height )
resume[1] = 1 # background drawn
@@ -1048,7 +1085,7 @@ class TrackInterface( gtk.EventBox ):
# draw beat lines
self.gc.foreground = self.beatColor
for j in range(1,self.screenBufBeats[buf]):
- x = beatStart + j*beatSpacing
+ x = beatStart + self.beatSpacing[beats][j]
pixmap.draw_line( self.gc, x, self.trackRect[self.drumIndex].y, x, self.trackRect[self.drumIndex].y+self.trackRect[self.drumIndex].height )
resume[1] = 1 # background drawn