Esempio n. 1
0
 def on_mouse_move(self, event: wx.MouseEvent):
     """
     Scene Panel move event. Calls hover if the mouse has no pressed buttons.
     Calls move if the mouse is currently dragging.
     """
     if event.Moving():
         self.scene.event(event.GetPosition(), "hover", None)
     else:
         self.scene.event(event.GetPosition(), "move", None)
Esempio n. 2
0
    def on_mouse_motion(self, evt: wx.MouseEvent):
        # Dragging
        if evt.Dragging() and evt.LeftIsDown():
            if self.selected < 0:
                return
            drag_end_x, drag_end_y = evt.GetPosition()
            control_points = self.tfunc.control_points
            w, h = self.GetSize()
            h = h - 30

            if self.selected == 0 or self.selected == len(control_points) - 1:
                cp = self.get_control_point_area(control_points[self.selected])
                drag_end_x = cp.get_center_x()
                if drag_end_y < 0:
                    drag_end_y = 0
                if drag_end_y > h:
                    drag_end_y = h
            else:
                left_point = self.get_control_point_area(
                    control_points[self.selected - 1])
                right_point = self.get_control_point_area(
                    control_points[self.selected + 1])

                if drag_end_x <= left_point.get_center_x() + 1:
                    drag_end_x = left_point.get_center_x() + 2
                if drag_end_x >= right_point.get_center_x() - 1:
                    drag_end_x = right_point.get_center_x() - 2
                if drag_end_y < 0:
                    drag_end_y = 0
                if drag_end_y > h:
                    drag_end_y = h

            value_range = self.tfunc.sMax - self.tfunc.sMin
            minimum = self.tfunc.sMin
            t = drag_end_x / w
            s = int((t * value_range) + minimum)
            a = (h - drag_end_y) / h

            self.tfunc.update_control_point_scalar(self.selected, s)
            self.tfunc.update_control_point_alpha(self.selected, a)
            self.editor.set_selected_info(self.selected, s, a,
                                          control_points[self.selected].color)
            self.Refresh()
        # Moving around
        else:
            x, y = evt.GetPosition()
            control_points = self.tfunc.control_points
            if any(
                    self.get_control_point_area(cp).contains(x, y)
                    for cp in control_points):
                self.SetCursor(wx.Cursor(wx.CURSOR_HAND))
            else:
                self.SetCursor(wx.Cursor(wx.CURSOR_DEFAULT))
    def OnMouse(self, event: wx.MouseEvent) -> None:
        pos = event.GetPosition()
        x, y, r = self.ROI
        if event.LeftDClick():
            # Set circle centre
            self.MoveCircle(pos, r)
        elif event.Dragging():
            # Drag circle centre or radius
            drag_r = np.sqrt((x - pos[0])**2 + (y - pos[1])**2)
            if self._dragging is None:
                # determine what to drag
                if drag_r < 0.5 * r:
                    # closer to center
                    self._dragging = "xy"
                else:
                    # closer to edge
                    self._dragging = "r"
            elif self._dragging == "r":
                # Drag circle radius
                self.MoveCircle((x, y), drag_r)
            elif self._dragging == "xy":
                # Drag circle centre
                self.MoveCircle(pos, r)

        if not event.Dragging():
            # Stop dragging
            self._dragging = None
            self.circle.SetColor("cyan")

        self.canvas.Draw(Force=True)
Esempio n. 4
0
    def OnMouseMove(self: wx.Window, e: wx.MouseEvent):
        if self.dragging:
            shape = self.shapes[-1]
            if self.FindWindow("Action").Value == "Move":
                if not self.lastMousePosition:
                    self.lastMousePosition = e.GetPosition()
                shape.MoveBy(e.x - self.lastMousePosition.x, 
                             e.y - self.lastMousePosition.y)
            elif self.FindWindow("Action").Value == "Draw":
                shape.GrowTo(e.x, e.y)
            elif self.FindWindow("Action").Value == "Select":
                self.selectionBox.GrowTo(e.x, e.y)
                self.SelectShapes()

            self.lastMousePosition = e.GetPosition()
            self.Refresh()
Esempio n. 5
0
 def OnMouseDown(self: wx.Window, e: wx.MouseEvent):
     self.dragging = True
     self.startOfDrag = self.lastMousePosition = e.GetPosition()
     if self.FindWindow("Action").Value == "Draw":
         self.AddShape(e)
     elif self.FindWindow("Action").Value == "Select":
         p = wx.Pen(wx.BLACK, 1)
         self.selectionBox = Rectangle(p, self.startOfDrag.x,
                                          self.startOfDrag.y)
     e.Skip()
Esempio n. 6
0
 def OnLeftUp(self, evt: wx.MouseEvent):
     """
     Handler for mouse left button up event.
     """
     if self.dragging:
         assert self.dragged_point is not None
         drop = self.projected_landing(self.dragged_point)
         assert self.hover_idx != -1
         self.dragging = False
         self.arrow_tip.points[self.hover_idx] = Vec2(
             drop.x // self.csize, drop.y // self.csize)
         self.update_hover_idx(Vec2(evt.GetPosition()))
         self.Refresh()
Esempio n. 7
0
    def on_mouse_down(self, evt: wx.MouseEvent):
        self.drag_start = None
        control_points = self.tfunc.control_points
        inside = False
        idx = 0
        x, y = evt.GetPosition()
        while not inside and idx < len(control_points):
            inside = inside | self.get_control_point_area(
                control_points[idx]).contains(x, y)
            if inside:
                break
            else:
                idx = idx + 1

        if inside:
            if evt.GetButton() == wx.MOUSE_BTN_LEFT:
                self.selected = idx
                control_point = control_points[self.selected]
                self.editor.set_selected_info(self.selected,
                                              control_point.value,
                                              control_point.color.a,
                                              control_point.color)
                self.drag_start = (x, y)
            elif evt.GetButton() == wx.MOUSE_BTN_RIGHT:
                if 0 < idx < len(control_points) - 1:
                    self.tfunc.remove_control_point(idx)
                    self.selected = idx - 1
                    control_point = control_points[self.selected]
                    self.editor.set_selected_info(self.selected,
                                                  control_point.value,
                                                  control_point.color.a,
                                                  control_point.color)
                    self.drag_start = (x, y)
        else:
            w, h = self.GetSize()
            if 0 <= x < w and 0 <= y < h - 30:
                h = h - 30
                value_range = self.tfunc.sMax - self.tfunc.sMin
                minimum = self.tfunc.sMin
                t = x / w
                s = int((t * value_range) + minimum)
                a = (h - y) / h
                self.selected = self.tfunc.add_control_point(s, .0, .0, .0, a)
                control_point = control_points[self.selected]
                self.editor.set_selected_info(self.selected,
                                              control_point.value,
                                              control_point.color.a,
                                              control_point.color)
                self.drag_start = (x, y)
                self.Refresh()
Esempio n. 8
0
    def OnMotion(self, evt: wx.MouseEvent):
        """
        Handler for mouse motion events.

        Args: 
            self: the Designer Window to initialize.
            evt: the event being executed.

        """
        pos = Vec2(evt.GetPosition())
        if self.dragging:
            self.dragged_point = pos
        else:
            self.update_hover_idx(pos)
            evt.Skip()
        self.Refresh()
Esempio n. 9
0
    def OnMouse(self, event: wx.MouseEvent):
        if self.HasCapture() and self.captured_item is not None:
            hit_item = self.captured_item
        else:
            hit_item = self.HitTest(event.GetPosition())

        if hit_item is not None:
            event.SetX(event.GetX() - hit_item.position.x)
            event.SetY(event.GetY() - hit_item.position.y)
            event.SetEventObject(hit_item)

            wx.PostEvent(hit_item, event)
            event.Skip(False)
        else:
            self.SetCursor(wx.Cursor(wx.CURSOR_ARROW))
            event.Skip(True)
Esempio n. 10
0
    def OnMouseMove(self, event: wx.MouseEvent):
        if self.timeline.start == self.timeline.end:
            return

        if self._dragging and event.LeftIsDown():
            x = event.GetPosition().x
            if self._uniform_time_intervals:
                t = self.timeline.time_at_index(round(x / self.px_per_step))
            else:
                t = self.time_at_position(x)

            if t != self._scrub_time:
                self._scrub_time = t

                if self.live_update:
                    self.timeline.current = self._scrub_time
                self.Refresh()
Esempio n. 11
0
    def OnLeftDown(self, event: MouseEvent):
        """
        Handle event on left click.

        Args:
            event:
        """
        self.logger.debug(f'OnLeftDown - event - {event}')

        from org.pyut.general.Mediator import getMediator  # avoid circular import

        med = getMediator()
        if med.actionWaiting():
            position: Point = event.GetPosition()
            med.shapeSelected(self, position)
            return
        event.Skip()
Esempio n. 12
0
    def OnMotion(self, event: wx.MouseEvent):
        canvas_pos = self.canvas.GetScreenPosition()
        canvas_size = self.canvas.GetSize()
        if self.dragging and event.LeftIsDown():
            if self.mouse_pos.x != -1 and self.mouse_pos.y != -1:
                pos = self.GetPosition()
                new_pos = wx.Point(pos.x + event.GetX() - self.mouse_pos.x,
                                   pos.y + event.GetY() - self.mouse_pos.y)
                size = self.GetSize()
                if new_pos.x < canvas_pos.x:
                    new_pos.x = canvas_pos.x
                if new_pos.y < canvas_pos.y:
                    new_pos.y = canvas_pos.y
                if new_pos.x + size.x > canvas_pos.x + canvas_size.x:
                    new_pos.x = canvas_pos.x + canvas_size.x - size.x
                if new_pos.y + size.y > canvas_pos.y + canvas_size.y:
                    new_pos.y = canvas_pos.y + canvas_size.y - size.y

                self.SetPosition(new_pos)
                self.translucent_background.SetPosition(new_pos)
            else:
                self.mouse_pos = event.GetPosition()
        else:
            self.mouse_pos = wx.DefaultPosition
Esempio n. 13
0
 def _on_left_up(self, evt: wx.MouseEvent):
     for bubble in self.bubbles:
         bubble.move(*evt.GetPosition())