Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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,[])
Example #4
0
 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, [])
Example #5
0
 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
Example #6
0
 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