コード例 #1
0
    def sendEvent(self, event: QEvent) -> None:
        """
        Send an event.

        Args:
            event: The event to send.
        """
        if event.type() == QEvent.Type.FocusOut:
            # Ignored - cannot get focus back reliably :-(
            return

        if isinstance(event, QMouseEvent):
            # `windowPos` is replaced with `localPos` as it has no meaning in offscreen rendering.
            event = QMouseEvent(event.type(), event.localPos(),
                                event.screenPos(), event.button(),
                                event.buttons(), event.modifiers())

        elif isinstance(event, QWheelEvent):
            event = QWheelEvent(event.position(), event.position(),
                                event.pixelDelta(), event.angleDelta(),
                                event.buttons(), event.modifiers(),
                                event.phase(), event.inverted(),
                                event.source())

        self._window.contentItem().forceActiveFocus()
        QCoreApplication.sendEvent(self._window, event)
コード例 #2
0
 def __cloneMouseWheelEvent(self, e: QWheelEvent):
     pos = e.pos()
     globalPos = e.globalPos()
     pixelDelta = e.pixelDelta()
     angleDelta = e.angleDelta()
     buttons = e.buttons()
     modifiers = e.modifiers()
     phase = e.phase()
     inverted = e.inverted()
     clone = QWheelEvent(pos, globalPos, pixelDelta, angleDelta, buttons, modifiers, phase, inverted)
     clone.ignore()
     clone.accepted = False
     return clone
コード例 #3
0
 def on_scroll_event(self, wl_view, type_, modifiers, delta_x, delta_y,
                     local_x, local_y, window_x, window_y, screen_x,
                     screen_y):
     pixelDelta = QPoint(int(delta_x),
                         int(delta_y)) if delta_x or delta_y else QPoint()
     buttons = Qt.NoButton
     for button in self.mouse_buttons:
         buttons |= button
     event = QWheelEvent(QPointF(local_x, local_y),
                         QPointF(screen_x, screen_y), pixelDelta,
                         WHEEL_ANGLES[type_], buttons,
                         deserialize_modifiers(modifiers), Qt.NoScrollPhase,
                         False)
     self.renderer.sendEvent(event)
コード例 #4
0
def test_wheel_event(scroll_amount, coordinates, wheel_delta, type_change,
                     main_window, qtbot):
    # GIVEN a level view and a cursor position over an object
    x, y = coordinates

    level_view = main_window.level_view
    object_under_cursor = level_view.object_at(x, y)
    original_type = object_under_cursor.type

    SETTINGS["object_scroll_enabled"] = True

    # WHEN level view is scrolled horizontally, the object is selected and the scroll wheel is used on it
    main_window.scroll_panel.horizontalScrollBar().setMaximum(
        level_view.width())
    main_window.scroll_panel.horizontalScrollBar().setValue(scroll_amount)

    main_window.show()
    qtbot.wait_for_window_shown(main_window)

    main_window.hide()

    qtbot.mouseClick(level_view, Qt.LeftButton, pos=QPoint(x, y))
    assert object_under_cursor.selected

    event = QWheelEvent(
        QPoint(x, y),
        QPoint(-1, -1),
        QPoint(0, wheel_delta),
        QPoint(0, wheel_delta),
        Qt.LeftButton,
        Qt.NoModifier,
        Qt.ScrollEnd,
        False,
    )

    assert level_view.wheelEvent(event)

    # THEN the type of the object should have changed
    new_type = level_view.object_at(*coordinates).type

    assert new_type == original_type + type_change, (original_type, new_type)