From 6fea123682dc776b689a0c0aad192e00ee980309 Mon Sep 17 00:00:00 2001 From: Skyler Lehmkuhl Date: Fri, 13 Jan 2012 11:19:34 -0500 Subject: [PATCH] Timeline redone --- base.js | 5 ++++ lightningbeam | 19 +++++++----- lightningbeam_windows.py | 2 +- svlgui.py | 65 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 9 deletions(-) diff --git a/base.js b/base.js index f5ce8a3..a065b67 100644 --- a/base.js +++ b/base.js @@ -16,6 +16,11 @@ function log(str){ setTimeout("appendError('"+str+"')", 1) } +function trace(str) { + //Placeholder + log(str); +} + function _timerBase () { /* This provides the 'tick' by which all animations are run. Playing animations should have their ._draw() method added here; diff --git a/lightningbeam b/lightningbeam index 08c6805..5889644 100755 --- a/lightningbeam +++ b/lightningbeam @@ -39,6 +39,7 @@ def onLoadFrames(self): def onClickFrame(self, x, y): root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions = MainWindow.scriptwindow.text root.descendItem().activeframe = int(x/16) + print ">>>>>> ", x, y MainWindow.stage.draw() MainWindow.scriptwindow.text = str(root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions) def onKeyDownFrame(self, key): @@ -264,12 +265,14 @@ b = svlgui.Image("media/object_active.png",0,0,True,MainWindow.layerbox,16,1,Tru layers.add(b) MainWindow.layerbox.add(layers,0,0) -frames = svlgui.Group(onload=onLoadFrames,skipl=True) -b = svlgui.Image("media/keyframe_active.png",0,0,True,MainWindow.timelinebox,16,1,True) -frames.add(b) -frames.onMouseDown = onClickFrame -frames.onKeyDown = onKeyDownFrame -MainWindow.timelinebox.add(frames,0,0) +#frames = svlgui.Group(onload=onLoadFrames,skipl=True) +#b = svlgui.Image("media/keyframe_active.png",0,0,True,MainWindow.timelinebox,16,1,True) +#frames.add(b) +#frames.onMouseDown = onClickFrame +#frames.onKeyDown = onKeyDownFrame +#MainWindow.timelinebox.add(frames,0,0) +MainWindow.timelinebox.root = root +MainWindow.timelinebox.onMouseDown = onClickFrame def new_file(widget=None): @@ -288,6 +291,7 @@ def open_file(widget=None): root = pickle.load(thefile) MainWindow.stage.add(root, 0, 0) MainWindow.stage.draw() + MainWindow.timelinebox.root = root MainWindow.timelinebox.draw() def open_sc_file(widget=None): pass @@ -315,9 +319,8 @@ def quit(widget): def add_keyframe(widget=None): + print "af> ", root.descendItem().activeframe root.descendItem().add_frame(True) - b = svlgui.Image("media/keyframe_active.png",root.descendItem().activeframe*16,0,True,MainWindow.timelinebox,16,1,True) - frames.add(b) MainWindow.timelinebox.draw() def add_layer(widget=None): root.descendItem().add_layer(root.descendItem()._al) diff --git a/lightningbeam_windows.py b/lightningbeam_windows.py index a0b3fa3..912e2ee 100644 --- a/lightningbeam_windows.py +++ b/lightningbeam_windows.py @@ -189,7 +189,7 @@ class MainWindowOSX: self.stage = svlgui.Canvas(800,600) misc_funcs.stage = self.stage self.layerbox = svlgui.Canvas(128,320) - self.timelinebox = svlgui.Canvas(2000,320) + self.timelinebox = svlgui.FramesCanvas(2000,320) self.frame = svlgui.Frame() self.toolbox = svlgui.Grid([svlgui.Button("------"),svlgui.Button("------")], [svlgui.Button("------"),svlgui.Button("------")], diff --git a/svlgui.py b/svlgui.py index 1d9b432..096c685 100644 --- a/svlgui.py +++ b/svlgui.py @@ -1957,6 +1957,71 @@ class PreferencesWindow: frame.layout_self([label,0,None,0,None,"nw",""]) win.present() +class FramesCanvas(Canvas): + def __init__(self,w,h): + Canvas.__init__(self,w,h) + self.pointer = 1 + if SYSTEM == 'osx': + self.canvas.draw = self._draw + self.canvas.mouse_down = self.mouse_down + self.ackfr = GUI.Image(file = "media/keyframe_active.png") + self.inackfr = GUI.Image(file = "media/keyframe_inactive.png") + self.acfr = GUI.Image(file = "media/frame_active_tween.png") + self.inacfr = GUI.Image(file = "media/frame_inactive_tween.png") + def _draw(self,cr,update_rect): + for k in xrange(len(self.root.descendItem().layers)): + FRAMES = self.root.descendItem().layers[k].frames + for i in xrange(len(FRAMES)): + cr.gsave() + #cr.translate(i*16,k*32) + if FRAMES[i]: + if self.root.descendItem().currentframe == i: + src_rect = self.ackfr.bounds + src_rect = [0,0,(16)*(self.pointer%17),32] + dst_rect = [i*16, k*32, 16+i*16, 32+k*32] + print dst_rect + self.ackfr.draw(cr, src_rect, dst_rect) + else: + src_rect = self.inackfr.bounds + dst_rect = [i*16, k*32, 16+i*16, 32+k*32] + self.inackfr.draw(cr, src_rect, dst_rect) + else: + if self.root.descendItem() == i: + src_rect = self.acfr.bounds + dst_rect = [i*16, k*32, 16+i*16, 32+k*32] + self.acfr.draw(cr, src_rect, dst_rect) + else: + src_rect = self.inacfr.bounds + dst_rect = [i*16, k*32, 16+i*16, 32+k*32] + self.inacfr.draw(cr, src_rect, dst_rect) + cr.grestore() + print max(len(FRAMES),int(update_rect[0]/16-1)),int(update_rect[2]/16+1) + for i in xrange(max(len(FRAMES),int(update_rect[0]/16-1)),int(update_rect[2]/16+1)): + cr.newpath() + cr.rect([i*16,k*32,i*16+16,k*32+32]) + if self.root.descendItem().activeframe==i: + cr.fillcolor = Color([0.2,0.2,0.2]).pygui + cr.fill() + elif i%5==0: + cr.fillcolor = Color([0.5,0.5,0.5]).pygui + cr.fill() + print i + else: + cr.fillcolor = Color([1.0,1.0,1.0]).pygui + cr.fill() + cr.newpath() + cr.fillcolor = Color([0.1,0.1,0.1]).pygui + cr.rect([i*16+15,k*32,i*16+16,k*32+32]) + cr.fill() + + def mouse_down(self, event): + x, y = event.position + self.onMouseDown(self,x, y) + self.canvas.invalidate_rect([0,0,self.canvas.extent[0],self.canvas.extent[1]]) + def onMouseDown(self,self1,x, y): + print "Nananana" + + def main(): #Executes the main loop for whatever GUI is running if SYSTEM=="gtk":