def on_rotate(self, handle): mouse_pos = Mouse.get_position() angle = angle_to(self.node.position, mouse_pos) new_rotation = self.orig_rot + angle - self.orig_angle if is_shift_down(): new_rotation = round(new_rotation / 15.0) * 15 new_rotation = round(new_rotation, 1) self.node.rotation = new_rotation handle.position = (0, 0) self.surround_node(force=True)
def on_scale(self, handle): node = self.node mouse_pos = Mouse.get_position() delta = Opioid2D.Vector(mouse_pos[0] - self.drag_from[0], mouse_pos[1] - self.drag_from[1]) movedir = Opioid2D.Vector() # adjust sprite hotspot delta.direction -= node.rotation location = handle.id # calculate scale changes if 'left' in location: xchange = -delta[0] movedir[0] = -1 + (self.hotspot[0] - 0.5) * 2 elif 'right' in location: xchange = delta[0] movedir[0] = 1 + (self.hotspot[0] - 0.5) * 2 else: handle.position[0] = xchange = 0 if 'top' in location: ychange = -delta[1] movedir[1] = -1 + (self.hotspot[1] - 0.5) * 2 elif 'bottom' in location: ychange = delta[1] movedir[1] = 1 + (self.hotspot[1] - 0.5) * 2 else: handle.position[1] = ychange = 0 xscale = self.orig_scale[0] * (self.orig_rect[0] + xchange)\ / self.orig_rect[0] yscale = self.orig_scale[1] * (self.orig_rect[1] + ychange)\ / self.orig_rect[1] # check proportional scale if is_shift_down(): if location in ['top', 'bottom'] or \ (xscale/self.orig_scale[0] > yscale/self.orig_scale[1]\ and not location in ['left','right']): xscale = self.orig_scale[0] * abs(yscale) / self.orig_scale[1] else: yscale = self.orig_scale[1] * abs(xscale) / self.orig_scale[0] xscale = round(xscale, 3) yscale = round(yscale, 3) node.scale = (xscale, yscale) # reposition sprite movevector = Opioid2D.Vector() movevector[0] = movedir[0] * (node.rect.width - self.orig_rect[0]) \ / 2.0 movevector[1] = movedir[1] * (node.rect.height - self.orig_rect[1]) \ / 2.0 movevector.direction += node.rotation node.position = self.orig_position + movevector # set lines and handles self.surround_node(force=True)
def handle_mousebuttondown(self, event): if self.mouse_locked_by or self.busy: return shiftDown = is_shift_down() ctrlDown = is_ctrl_down() x, y = event.pos if shiftDown and ctrlDown: self.interface.add_object( position=(x,y)) else: node = self.scene.mouse_manager.pick_selection(x,y, wx.GetApp().selectedObjectDict) if node is not None: self.selectOnUp = weakref.ref(node) else: wx.CallAfter(self.interface.set_selection,[])
def handle_mousebuttondown(self, event): if self.mouse_locked_by or self.busy: return shiftDown = is_shift_down() ctrlDown = is_ctrl_down() x, y = event.pos if shiftDown and ctrlDown: self.interface.add_object(position=(x, y)) else: node = self.scene.mouse_manager.pick_selection( x, y, wx.GetApp().selectedObjectDict) if node is not None: self.selectOnUp = weakref.ref(node) else: wx.CallAfter(self.interface.set_selection, [])
def handle_keydown(self, ev): # nudge keys if self.busy: return nudge = 1 shiftDown = is_shift_down() ctrlDown = is_ctrl_down() if shiftDown: nudge = nudge * 10 if ctrlDown: nudge = nudge * 0.1 if ev.key == Opioid2D.K_LEFT: self.interface.nudge((-nudge, 0)) elif ev.key == Opioid2D.K_RIGHT: self.interface.nudge((nudge, 0)) elif ev.key == Opioid2D.K_UP: self.interface.nudge((0, -nudge)) elif ev.key == Opioid2D.K_DOWN: self.interface.nudge((0, nudge)) elif ev.key == Opioid2D.K_DELETE: from pig.editor.util import undoable_delete_nodes deletelist = [] for ref in wx.GetApp().selectedObjectDict.itervalues(): if isinstance(ref(), Opioid2D.public.Node.Node): deletelist.append(ref()) undoable_delete_nodes(deletelist) elif ev.key == Opioid2D.K_s and ctrlDown: wx.CallAfter(save_scene) elif ev.key == Opioid2D.K_a and ctrlDown: wx.CallAfter(save_scene_as) elif ev.key == Opioid2D.K_q and ctrlDown: wx.CallAfter(self.interface.quit) elif ev.key == Opioid2D.K_w and ctrlDown: wx.CallAfter(wx.GetApp().raise_all_frames) elif ev.key == Opioid2D.K_c and ctrlDown: wx.CallAfter(self.interface.copy_selected) elif ev.key == Opioid2D.K_x and ctrlDown: wx.CallAfter(self.interface.cut_selected) elif ev.key == Opioid2D.K_v and ctrlDown: wx.CallAfter(self.interface.paste_clipboard) elif ev.key == Opioid2D.K_z and ctrlDown: if shiftDown: wx.GetApp().history.small_undo() else: wx.GetApp().history.undo() elif ev.key == Opioid2D.K_y and ctrlDown: if shiftDown: wx.GetApp().history.small_redo() else: wx.GetApp().history.redo() elif ev.key == Opioid2D.K_u and ctrlDown: try: app = wx.GetApp() selected = app.get_selection() if selected: wx.CallAfter( app.get_object_frame( selected.popitem()[0]).pugWindow.view_source_code) else: wx.CallAfter( app.get_object_frame(Opioid2D.Director.scene). pugWindow.view_source_code) wx.CallAfter(app.raise_all_frames) except: pass elif ev.key == Opioid2D.K_p and ctrlDown: try: app = wx.GetApp() selected = app.get_selection() if selected: wx.CallAfter( app.get_object_frame( selected.popitem()[0]).pugWindow.open_shell) else: wx.CallAfter( app.get_object_frame( Opioid2D.Director.scene).pugWindow.open_shell) wx.CallAfter(app.raise_all_frames) except: pass
def handle_keydown(self, ev): # nudge keys if self.busy: return nudge = 1 shiftDown = is_shift_down() ctrlDown = is_ctrl_down() if shiftDown: nudge = nudge * 10 if ctrlDown: nudge = nudge * 0.1 if ev.key == Opioid2D.K_LEFT: self.interface.nudge((-nudge, 0)) elif ev.key == Opioid2D.K_RIGHT: self.interface.nudge((nudge, 0)) elif ev.key == Opioid2D.K_UP: self.interface.nudge((0, -nudge)) elif ev.key == Opioid2D.K_DOWN: self.interface.nudge((0, nudge)) elif ev.key == Opioid2D.K_DELETE: from pig.editor.util import undoable_delete_nodes deletelist = [] for ref in wx.GetApp().selectedObjectDict.itervalues(): if isinstance(ref(), Opioid2D.public.Node.Node): deletelist.append(ref()) undoable_delete_nodes(deletelist) elif ev.key == Opioid2D.K_s and ctrlDown: wx.CallAfter(save_scene) elif ev.key == Opioid2D.K_a and ctrlDown: wx.CallAfter(save_scene_as) elif ev.key == Opioid2D.K_q and ctrlDown: wx.CallAfter(self.interface.quit) elif ev.key == Opioid2D.K_w and ctrlDown: wx.CallAfter(wx.GetApp().raise_all_frames) elif ev.key == Opioid2D.K_c and ctrlDown: wx.CallAfter(self.interface.copy_selected) elif ev.key == Opioid2D.K_x and ctrlDown: wx.CallAfter(self.interface.cut_selected) elif ev.key == Opioid2D.K_v and ctrlDown: wx.CallAfter(self.interface.paste_clipboard) elif ev.key == Opioid2D.K_z and ctrlDown: if shiftDown: wx.GetApp().history.small_undo() else: wx.GetApp().history.undo() elif ev.key == Opioid2D.K_y and ctrlDown: if shiftDown: wx.GetApp().history.small_redo() else: wx.GetApp().history.redo() elif ev.key == Opioid2D.K_u and ctrlDown: try: app = wx.GetApp() selected = app.get_selection() if selected: wx.CallAfter(app.get_object_frame( selected.popitem()[0]).pugWindow.view_source_code) else: wx.CallAfter(app.get_object_frame( Opioid2D.Director.scene).pugWindow.view_source_code) wx.CallAfter(app.raise_all_frames) except: pass elif ev.key == Opioid2D.K_p and ctrlDown: try: app = wx.GetApp() selected = app.get_selection() if selected: wx.CallAfter(app.get_object_frame( selected.popitem()[0]).pugWindow.open_shell) else: wx.CallAfter(app.get_object_frame( Opioid2D.Director.scene).pugWindow.open_shell) wx.CallAfter(app.raise_all_frames) except: pass