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)
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
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)
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)