From 910a694b6136977e0735b45e0ee085eb3d5cc8df Mon Sep 17 00:00:00 2001 From: Skyler Lehmkuhl Date: Thu, 3 Jan 2013 21:03:03 -0500 Subject: [PATCH] Moving multiple objects working properly --- svlgui.py | 63 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/svlgui.py b/svlgui.py index 3909ad0..052666f 100644 --- a/svlgui.py +++ b/svlgui.py @@ -10,6 +10,8 @@ import random import colors import platform import re + +import traceback try: from PIL import Image as PILimage GLEnablable = True @@ -1056,22 +1058,31 @@ class Canvas(Widget): canvas.fillcolor = Color("#ffffff").pygui canvas.fill_rect((0,0,WIDTH,HEIGHT)) for i in self.objs: - i.draw(canvas) + try: + i.draw(canvas) + except: + traceback.print_exc() def mouse_down(self, event): self.become_target() x, y = event.position try: - for i in self.objs: - i._onMouseDown(x, y, button={"left":1,"right":2,"middle":3}[event.button], clicks=event.num_clicks) - except ObjectDeletedError: - return + try: + for i in self.objs: + i._onMouseDown(x, y, button={"left":1,"right":2,"middle":3}[event.button], clicks=event.num_clicks) + except ObjectDeletedError: + return + except: + traceback.print_exc() self.invalidate_rect([0,0,self.extent[0],self.extent[1]]) def mouse_drag(self, event): x, y = event.position for i in self.objs: - i._onMouseDrag(x, y, button={"left":1,"right":2,"middle":3}[event.button]) + try: + i._onMouseDrag(x, y, button={"left":1,"right":2,"middle":3}[event.button]) + except: + traceback.print_exc() self.invalidate_rect([0,0,self.extent[0],self.extent[1]]) def mouse_move(self, event): @@ -2465,7 +2476,6 @@ class Group (object): test = False for i in reversed(self.currentFrame()): if i.hitTest(x, y): - print i.obj, "is hit" if MODE in [" ", "s"]: self.activelayer.currentselect = i test=True @@ -2474,8 +2484,8 @@ class Group (object): break if not test: if self.tempgroup: + del self.currentFrame()[[i.obj for i in self.currentFrame()].index(self.tempgroup)] [self.currentFrame().append(i) for i in self.tempgroup.split()] - del self.currentFrame()[self.currentFrame().index(self.tempgroup)] self.tempgroup = None self.activelayer.currentselect = None self.startx, self.starty = x, y @@ -2496,19 +2506,20 @@ class Group (object): if self.activelayer.level and MODE in [" ", "s"]: if self.activelayer.currentselect: self.activelayer.currentselect._onMouseUp(x, y, button=button, clicks=clicks) - else: + elif abs(self.startx-x)>4 or abs(self.starty-y)>4: objs = [] for i in reversed(self.currentFrame()): if self.startxself1.maxx/2: + self1.xscale = (x-self1.x)/self1.maxx + else: + # I don't understand why I need 2*self1.maxx instead of just maxx, but it works. + self1.xscale = (2*self1.maxx+self1.x-(x-self1.initx)-x)/self1.maxx + self1.x = x + if self1.inity>self1.maxy/2: + self1.yscale = (y-self1.y)/self1.maxy + else: + # 3 times?? Why?? + self1.yscale = (3*self1.maxy+self1.y-(y-self1.inity)-y)/self1.maxy + self1.y = y def onMouseUp(self, self1, x, y, button=1, clicks=1): self.clicked = False # def hitTest(self, x, y):