def glue(self, item, handle, vpos): """ Perform a small glue action to ensure the handle is at a proper location for connecting. """ if self.motion_handle: return self.motion_handle.glue(vpos) else: return HandleInMotion(item, handle, self.view).glue(vpos)
def on_motion_notify(self, event): """ Handle motion events. If a handle is grabbed: drag it around, else, if the pointer is over a handle, make the owning item the hovered-item. """ view = self.view if self.grabbed_handle and event.state & gtk.gdk.BUTTON_PRESS_MASK: canvas = view.canvas item = self.grabbed_item handle = self.grabbed_handle pos = event.x, event.y if not self.motion_handle: self.motion_handle = HandleInMotion(item, handle, self.view) self.motion_handle.start_move(pos) self.motion_handle.move(pos) return True
def on_motion_notify(self, event): """ Handle motion events. If a handle is grabbed: drag it around, else, if the pointer is over a handle, make the owning item the hovered-item. """ view = self.view if self.grabbed_handle and event.get_state()[1] & Gdk.ModifierType.BUTTON1_MASK: canvas = view.canvas item = self.grabbed_item handle = self.grabbed_handle pos = event.x, event.y if not self.motion_handle: self.motion_handle = HandleInMotion(item, handle, self.view) self.motion_handle.start_move(pos) self.motion_handle.move(pos) return True
class HandleTool(Tool): """ Tool for moving handles around. By default this tool does not provide connecting handles to another item (see `ConnectHandleTool`). """ def __init__(self, view=None): super().__init__(view) self.grabbed_handle = None self.grabbed_item = None self.motion_handle = None def grab_handle(self, item, handle): """ Grab a specific handle. This can be used from the PlacementTool to set the state of the handle tool. """ assert item is None and handle is None or handle in item.handles() self.grabbed_item = item self.grabbed_handle = handle selection = HandleSelection(item, handle, self.view) selection.select() def ungrab_handle(self): """ Reset grabbed_handle and grabbed_item. """ item = self.grabbed_item handle = self.grabbed_handle self.grabbed_handle = None self.grabbed_item = None if handle: selection = HandleSelection(item, handle, self.view) selection.unselect() def on_button_press(self, event): """ Handle button press events. If the (mouse) button is pressed on top of a Handle (item.Handle), that handle is grabbed and can be dragged around. """ view = self.view item, handle = HandleFinder(view.hovered_item, view).get_handle_at_point( event.get_coords()[1:]) if handle: # Deselect all items unless CTRL or SHIFT is pressed # or the item is already selected. ### TODO: duplicate from ItemTool if not ( event.get_state()[1] & (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK) or view.hovered_item in view.selected_items): del view.selected_items ###/ view.hovered_item = item view.focused_item = item self.motion_handle = None self.grab_handle(item, handle) return True def on_button_release(self, event): """ Release a grabbed handle. """ # queue extra redraw to make sure the item is drawn properly grabbed_handle, grabbed_item = self.grabbed_handle, self.grabbed_item if self.motion_handle: self.motion_handle.stop_move() self.motion_handle = None self.ungrab_handle() if grabbed_handle: grabbed_item.request_update() return True def on_motion_notify(self, event): """ Handle motion events. If a handle is grabbed: drag it around, else, if the pointer is over a handle, make the owning item the hovered-item. """ view = self.view if (self.grabbed_handle and event.get_state()[1] & Gdk.EventMask.BUTTON_PRESS_MASK): canvas = view.canvas item = self.grabbed_item handle = self.grabbed_handle pos = event.get_coords()[1:] if not self.motion_handle: self.motion_handle = HandleInMotion(item, handle, self.view) self.motion_handle.start_move(pos) self.motion_handle.move(pos) return True
class HandleTool(Tool): """ Tool for moving handles around. By default this tool does not provide connecting handles to another item (see `ConnectHandleTool`). """ def __init__(self, view=None): super(HandleTool, self).__init__(view) self.grabbed_handle = None self.grabbed_item = None self.motion_handle = None def grab_handle(self, item, handle): """ Grab a specific handle. This can be used from the PlacementTool to set the state of the handle tool. """ assert item is None and handle is None or handle in item.handles() self.grabbed_item = item self.grabbed_handle = handle selection = HandleSelection(item, handle, self.view) selection.select() def ungrab_handle(self): """ Reset grabbed_handle and grabbed_item. """ item = self.grabbed_item handle = self.grabbed_handle self.grabbed_handle = None self.grabbed_item = None if handle: selection = HandleSelection(item, handle, self.view) selection.unselect() def on_button_press(self, event): """ Handle button press events. If the (mouse) button is pressed on top of a Handle (item.Handle), that handle is grabbed and can be dragged around. """ view = self.view #item, handle = view.get_handle_at_point((event.x, event.y)) #if not handle and view.hovered_item item, handle = HandleFinder(view.hovered_item, view).get_handle_at_point((event.x, event.y)) if handle: # Deselect all items unless CTRL or SHIFT is pressed # or the item is already selected. ### TODO: duplicate from ItemTool if not (event.get_state()[1] & (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK) or view.hovered_item in view.selected_items): del view.selected_items ###/ view.hovered_item = item view.focused_item = item self.motion_handle = None self.grab_handle(item, handle) return True def on_button_release(self, event): """ Release a grabbed handle. """ # queue extra redraw to make sure the item is drawn properly grabbed_handle, grabbed_item = self.grabbed_handle, self.grabbed_item if self.motion_handle: self.motion_handle.stop_move() self.motion_handle = None self.ungrab_handle() if grabbed_handle: grabbed_item.request_update() return True def on_motion_notify(self, event): """ Handle motion events. If a handle is grabbed: drag it around, else, if the pointer is over a handle, make the owning item the hovered-item. """ view = self.view if self.grabbed_handle and event.get_state()[1] & Gdk.ModifierType.BUTTON1_MASK: canvas = view.canvas item = self.grabbed_item handle = self.grabbed_handle pos = event.x, event.y if not self.motion_handle: self.motion_handle = HandleInMotion(item, handle, self.view) self.motion_handle.start_move(pos) self.motion_handle.move(pos) return True