From 94c6e020aed3bbf1e5058742769e5f03a9546eb8 Mon Sep 17 00:00:00 2001 From: Skyler Lehmkuhl Date: Wed, 2 Jan 2013 14:45:49 -0500 Subject: [PATCH] Mouse working in Actionscript editor, ability to edit Text objects --- lightningbeam.py | 31 +++---- svlgui.py | 213 +++++++++++++++++++++++++++++------------------ 2 files changed, 148 insertions(+), 96 deletions(-) diff --git a/lightningbeam.py b/lightningbeam.py index 03fb736..6702b1c 100755 --- a/lightningbeam.py +++ b/lightningbeam.py @@ -56,7 +56,7 @@ def onLoadFrames(self): else: j = box(i*16,0,16,32,svlgui.Color([1,1,1])) self.add(j)''' -def onClickFrame(self, x, y): +def onClickFrame(self, x, y,button=1,clicks=1): root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions = MainWindow.scriptwindow.text root.descendItem().activeframe = int(x/16) print ">>>>>> ", x, y @@ -74,7 +74,7 @@ def onKeyDownFrame(self, key): elif key=="F8": convert_to_symbol() MainWindow.scriptwindow.text = root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions -def onMouseDownGroup(self, x, y): +def onMouseDownGroup(self, x, y,button=1,clicks=1): self.activelayer.frames[self.activelayer.currentframe].actions = MainWindow.scriptwindow.text if svlgui.MODE in [" ", "s"]: if self.hitTest(x, y): @@ -100,32 +100,35 @@ def onMouseDownGroup(self, x, y): elif svlgui.MODE in ["t"]: self.ctext = svlgui.Text("Mimimi",x,y) self.ctext.editing = True + svlgui.CURRENTTEXT = self.ctext self.ctext.onMouseDown = onMouseDownText self.ctext.onMouseDrag = onMouseDragText self.ctext.onMouseUp = onMouseUpText self.add(self.ctext) self.ctext = None + self.activelayer.currentselect = self.activelayer.frames[self.activelayer.currentframe].objs[-1] MainWindow.docbox.setvisible(True) MainWindow.textbox.setvisible(False) -def onMouseDownObj(self, x, y): +def onMouseDownObj(self, x, y,button=1,clicks=1): MainWindow.scriptwindow.text = root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions self.clicked = True self.initx,self.inity = x-self.x, y-self.y if svlgui.MODE == "b": self.filled = True self.fillcolor = svlgui.FILLCOLOR -def onMouseDownText(self,x,y): +def onMouseDownText(self,x,y,button=1,clicks=1): MainWindow.scriptwindow.text = root.descendItem().activelayer.frames[root.descendItem().activelayer.currentframe].actions self.clicked = True self.initx, self.inity = x-self.x, y-self.y MainWindow.docbox.setvisible(False) MainWindow.textbox.setvisible(True) svlgui.CURRENTTEXT = self.obj - print "Height", MainWindow.textbox.height -def onMouseDownFrame(self, x, y): + if clicks>1: + self.obj.editing = True +def onMouseDownFrame(self, x, y,button=1,clicks=1): pass -def onMouseUpGroup(self, x, y): +def onMouseUpGroup(self, x, y,button=1,clicks=1): self.clicked = False if svlgui.MODE in ["r", "e"]: self.cshape = None @@ -135,17 +138,17 @@ def onMouseUpGroup(self, x, y): print len(self.cshape.shapedata) self.cshape = None MainWindow.stage.draw() -def onMouseUpObj(self, x, y): +def onMouseUpObj(self, x, y,button=1,clicks=1): self.clicked = False -def onMouseUpText(self, x, y): +def onMouseUpText(self, x, y,button=1,clicks=1): self.clicked = False -def onMouseMoveGroup(self, x, y): +def onMouseMoveGroup(self, x, y,button=1): pass #This is for testing rotation. Comment out before any commit! #root.rotation+=0.01 -def onMouseMoveObj(self, x, y): +def onMouseMoveObj(self, x, y,button=1): pass -def onMouseDragGroup(self, x, y): +def onMouseDragGroup(self, x, y,button=1,clicks=1): if svlgui.MODE in [" ", "s"]: self.x = x self.y = y @@ -161,7 +164,7 @@ def onMouseDragGroup(self, x, y): self.cshape.shapedata = [["M",x/2,0],["C",4*x/5,0,x,y/5,x,y/2],["C",x,4*y/5,4*x/5,y,x/2,y],["C",x/5,y,0,4*y/5,0,y/2],["C",0,y/5,x/5,0,x/2,0]] elif svlgui.MODE == "p": self.cshape.shapedata.append(["L",x-self.cshape.initx,y-self.cshape.inity]) -def onMouseDragObj(self, x, y): +def onMouseDragObj(self, x, y,button=1,clicks=1): if svlgui.MODE==" ": self.x = x-self.initx self.y = y-self.inity @@ -175,7 +178,7 @@ def onMouseDragObj(self, x, y): self.xscale = ((self.maxx/2.0+self.minx)-x)/((self.maxx/2.0+self.minx)-self.initx) self.yscale = ((self.maxy/2.0+self.miny)-y)/((self.maxy/2.0+self.miny)-self.inity) -def onMouseDragText(self, x, y): +def onMouseDragText(self, x, y,button=1,clicks=1): self.x = x-self.initx self.y = y-self.inity diff --git a/svlgui.py b/svlgui.py index 0c4e920..3c61fc4 100644 --- a/svlgui.py +++ b/svlgui.py @@ -1000,14 +1000,14 @@ class Canvas(Widget): x, y = event.position try: for i in self.objs: - i._onMouseDown(x, y) + i._onMouseDown(x, y, button={"left":1,"right":2,"middle":3}[event.button], clicks=event.num_clicks) except ObjectDeletedError: return self.update() def mouse_drag(self, event): x, y = event.position for i in self.objs: - i._onMouseDrag(x, y) + i._onMouseDrag(x, y, button={"left":1,"right":2,"middle":3}[event.button]) self.update() def mouse_move(self, event): @@ -1015,13 +1015,13 @@ class Canvas(Widget): MOUSE_X, MOUSE_Y = event.position x, y = event.position for i in self.objs: - i._onMouseMove(x, y) + i._onMouseMove(x, y, button={"left":1,"right":2,"middle":3}[event.button]) self.update() def mouse_up(self, event): x, y = event.position for i in self.objs: - i._onMouseUp(x, y) + i._onMouseUp(x, y, button={"left":1,"right":2,"middle":3}[event.button]) self.update() def key_down(self, event): @@ -1060,7 +1060,7 @@ class Canvas(Widget): x, y = event.position try: for i in self.objs: - i._onMouseDown(x, y) + i._onMouseDown(x, y, button={"left":1,"right":2,"middle":3}[event.button], clicks=event.num_clicks) except ObjectDeletedError: return self.invalidate_rect([0,0,self.extent[0],self.extent[1]]) @@ -1068,7 +1068,7 @@ class Canvas(Widget): def mouse_drag(self, event): x, y = event.position for i in self.objs: - i._onMouseDrag(x, y) + i._onMouseDrag(x, y, button={"left":1,"right":2,"middle":3}[event.button]) self.invalidate_rect([0,0,self.extent[0],self.extent[1]]) def mouse_move(self, event): @@ -1080,7 +1080,7 @@ class Canvas(Widget): def mouse_up(self, event): x, y = event.position for i in self.objs: - i._onMouseUp(x, y) + i._onMouseUp(x, y, button={"left":1,"right":2,"middle":3}[event.button], clicks=event.num_clicks) self.invalidate_rect([0,0,self.extent[0],self.extent[1]]) def key_down(self, event): @@ -1183,6 +1183,7 @@ class TextView(Widget): def mouse_down(self, event): self.become_target() + GUI.TextEditor.mouse_down(self, event) self.box = OSXTextEditor(scrolling="hv") self.box.font = Font("Courier", 12, []) if width and height: @@ -1404,13 +1405,13 @@ class Image(object): for i in xrange(len(self.shapedata)): hits = hits != intersect(self.shapedata[i-1][1:3],self.shapedata[i][1:3],[x,y],[x,sys.maxint]) return hits - def onMouseDown(self, self1, x, y): + def onMouseDown(self, self1, x, y, button=1, clicks=1): pass - def onMouseDrag(self, self1, x, y): + def onMouseDrag(self, self1, x, y, button=1, clicks=1): pass - def onMouseUp(self, self1, x, y): + def onMouseUp(self, self1, x, y, button=1, clicks=1): pass - def onMouseMove(self, self1, x, y): + def onMouseMove(self, self1, x, y, button=1, clicks=1): pass def onKeyDown(self, self1, key): pass @@ -1657,13 +1658,13 @@ class Shape (object): return max([i[1] for i in self.shapedata]) def getmaxy(self): return max([i[2] for i in self.shapedata]) - def onMouseDown(self, self1, x, y): + def onMouseDown(self, self1, x, y, button=1, clicks=1): pass - def onMouseDrag(self, self1, x, y): + def onMouseDrag(self, self1, x, y, button=1, clicks=1): pass - def onMouseUp(self, self1, x, y): + def onMouseUp(self, self1, x, y, button=1, clicks=1): pass - def onMouseMove(self, self1, x, y): + def onMouseMove(self, self1, x, y, button=1, clicks=1): pass def onKeyDown(self, self1, key): pass @@ -1710,13 +1711,14 @@ class Text (object): self.editable = False self.selectable = True self.border = False - self.width = self.font.width(self.text) + # self.width = self.font.width(self.text) self.height = self.font.height self.iname = None self.hwaccel = False self.type="Text" self.name = "t"+str(int(random.random()*10000))+str(SITER) self.editing = False + self.cursorpos = len(self.text) SITER+=1 def draw(self,cr=None,parent=None,rect=None): if SYSTEM=="osx": @@ -1743,25 +1745,36 @@ class Text (object): w = self.font.width(self.text) d = self.font.descent h = self.font.height + lines = self.text.count('\n') cr.newpath() - cr.moveto(0,d) - cr.lineto(w,d) + cr.moveto(0,d+h*lines) + cr.lineto(w,d+h*lines) cr.lineto(w,-h) cr.lineto(0,-h) - cr.lineto(0,d) + cr.lineto(0,d+h*lines) cr.pencolor = Color([0,0,0]).pygui cr.fillcolor = Color([1,1,1]).pygui cr.fill_stroke() cr.fill() + if '\n' in self.text[:self.cursorpos]: + cw = self.font.width(self.text[self.text.rindex('\n',0,self.cursorpos):self.cursorpos]) + else: + cw = self.font.width(self.text[:self.cursorpos]) + cr.newpath() + elines = self.text[:self.cursorpos].count('\n') + cr.moveto(cw,d+h*elines) + cr.lineto(cw,-h+h*elines) + cr.stroke() cr.newpath() cr.moveto(0,0) cr.show_text(self.text) cr.grestore() def hitTest(self, x, y): - self.width = self.font.width(self.text) self.height = self.font.height if 00: + self.text = self.text[:self.cursorpos-1]+self.text[self.cursorpos:] + self.cursorpos -= 1 + elif key == "delete": + if self.cursorpos0: + self.cursorpos -= 1 + elif key == "right_arrow": + if self.cursorpos