Exemplo n.º 1
0
    def wheelEvent(self, e: QtGui.QWheelEvent) -> None:
        # 鼠标指针位于x轴范围内
        if e.pos().x() >= padding_left and e.pos().y(
        ) >= self.size().height() - padding_bottom:
            if e.angleDelta().y() > 0:
                if self.x_show_interval > 1:
                    self.x_show_interval -= 1
                else:
                    self.x_plot_interval += 1
            else:
                if self.x_plot_interval > 25:
                    self.x_plot_interval -= 1
                else:
                    self.x_show_interval += 1

        # 鼠标指针位于y轴范围内
        if e.pos().x() <= padding_left and e.pos().y(
        ) <= self.size().height() - padding_bottom:
            interval = random.randint(200, 500)  # 随机增减y轴坐标
            if e.angleDelta().y() > 0:
                self.y_max -= interval
                if self.y_max < 1023:
                    self.y_max = 1023
                self.y_min += interval
                if self.y_min > -1024:
                    self.y_min = -1024
            else:
                self.y_max += interval
                if self.y_max > 32767:
                    self.y_max = 32767
                self.y_min -= interval
                if self.y_min < -32768:
                    self.y_min = -32768

        self.update()
Exemplo n.º 2
0
    def wheelEvent(self, event: QWheelEvent) -> None:
        if Town.isPointInRect(
                event.pos(),
            (QPoint(0,
                    self.height() * .8), QSize(self.width(),
                                               self.height() * .2))):
            if self.menu_mode == 1:
                types = Town.BuildingTypes
            elif self.menu_mode == 2:
                types = Town.RoadTypes
            delta = event.pixelDelta()
            if delta is None:
                delta = -event.angleDelta().y() / 2
            else:
                delta = -delta.x() / 2
            max_scroll = (3 * len(types.sorted_names) +
                          1) / 15 * self.height() - self.width() - 4
            if Town.isPointInRect(
                    event.pos(),
                (QPoint(self.height() / 15 - 4,
                        self.height() * .8),
                 QSize(self.width(),
                       self.height() *
                       .2))) and (delta > 0 and max_scroll > self.scrollAmount
                                  or delta < 0 and self.scrollAmount > 0):
                self.scrollAmount += delta
                if max_scroll < self.scrollAmount:
                    self.scrollAmount = max_scroll
                elif self.scrollAmount < 0:
                    self.scrollAmount = 0

        elif self.mode != Modes.Instructions:
            self.town.scaleByEvent(event)
Exemplo n.º 3
0
    def mouse_wheel_event(self, e: QWheelEvent):
        delta: QtCore.QPoint = e.pixelDelta()
        if delta is None or delta.y() == 0:
            delta = e.angleDelta() / 10
        modifiers = int(e.modifiers())

        if modifiers and modifiers & MOD_MASK == modifiers:
            keyname = QKeySequence(modifiers).toString()
            if keyname == "Ctrl+":
                oldpos = self.UI.graphicsView.mapToScene(e.pos())
                self.scale_display(delta.y() * 0.01)
                newpos = self.UI.graphicsView.mapToScene(e.pos())
                deltapos = newpos - oldpos
                self.UI.graphicsView.translate(deltapos.x(), deltapos.y())
            if keyname == "Ctrl+Shift+":
                value = self.UI.BrushSizeSlider.value() + delta.y()
                self.UI.BrushSizeSlider.setValue(value)
            if keyname == "Shift+":
                delta *= self.scroll_speed
                value = self.UI.graphicsView.horizontalScrollBar().value(
                ) + delta.y()
                self.UI.graphicsView.horizontalScrollBar().setValue(value)
        else:
            delta *= self.scroll_speed
            value = self.UI.graphicsView.verticalScrollBar().value() + delta.y(
            )
            self.UI.graphicsView.verticalScrollBar().setValue(value)

        if self.paint_mode == PMode.Brush:
            # Update cursor position
            r = int(self.brush_size / 2)
            curr_pos = self.UI.graphicsView.mapToScene(e.pos())
            curr_pos.setX(curr_pos.x() - r)
            curr_pos.setY(curr_pos.y() - r)
            self.brush_cursor.setPos(curr_pos)
Exemplo n.º 4
0
    def wheelEvent(self, event: QWheelEvent):
        """
        Zoom in or out of the view.
        """
        if event.modifiers() & Qt.ControlModifier or event.modifiers(
        ) & Qt.MetaModifier:
            zoomInFactor = 1.25
            zoomOutFactor = 1 / zoomInFactor

            # Save the scene pos
            oldPos = self.mapToScene(event.pos())

            # Zoom
            if event.angleDelta().y() > 0:
                zoomFactor = zoomInFactor
            else:
                zoomFactor = zoomOutFactor
            self.scale(zoomFactor, zoomFactor)

            # Get the new position
            newPos = self.mapToScene(event.pos())

            # Move scene to old position
            delta = newPos - oldPos
            self.translate(delta.x(), delta.y())
Exemplo n.º 5
0
    def wheelEvent(self, event: QWheelEvent):
        if self.capturing_data:
            return

        delta = event.angleDelta().y()
        zoom_factor = 1.001**delta
        p0scene = self.mapToScene(event.pos())
        w = self.view_rect().width()
        zooming_in = zoom_factor > 1
        if zooming_in and w / zoom_factor < self.min_width:
            return

        max_width = self.max_width
        if self.max_width == "auto":
            max_width = self.sceneRect().width()
        if not zooming_in and w / zoom_factor > max_width:
            self.update()
            return

        self.scale(zoom_factor, 1)
        p1mouse = self.mapFromScene(p0scene)
        move = p1mouse - event.pos()
        self.horizontalScrollBar().setValue(move.x() +
                                            self.horizontalScrollBar().value())
        self.zoomed.emit(zoom_factor)
Exemplo n.º 6
0
    def wheelEvent(self, event: QtGui.QWheelEvent):
        x, y = self.translate(event.pos().x(), event.pos().y())

        new_zoom = self.zoom + event.angleDelta().y() / 400
        if new_zoom < self.min_scale and event.angleDelta().y() < 0:
            new_zoom = self.min_scale
        self.offset_x = ((new_zoom - self.zoom) * x + self.zoom * self.offset_x) / new_zoom
        self.offset_y = ((new_zoom - self.zoom) * y + self.zoom * self.offset_y) / new_zoom
        self.zoom = new_zoom
    def wheelEvent(self, evt: QtGui.QWheelEvent) -> None:
        self.__mouse_pos = evt.pos()

        measure_editor = self.track.measureEditorAt(evt.pos())
        if isinstance(measure_editor, MeasureEditor):
            measure_evt = QtGui.QWheelEvent(
                evt.pos() - measure_editor.topLeft(), evt.globalPos(),
                evt.pixelDelta(), evt.angleDelta(), 0, Qt.Horizontal,
                evt.buttons(), evt.modifiers(), evt.phase(), evt.source())
            measure_evt.setAccepted(False)
            self.wheelMeasureEvent(measure_editor, measure_evt)
            evt.setAccepted(measure_evt.isAccepted())
Exemplo n.º 8
0
    def wheelEvent(self, a0: QtGui.QWheelEvent) -> None:
        if self.selector.labels and self.pressHoldSel:
            return super().wheelEvent(a0)

        if a0.modifiers() & QtCore.Qt.KeyboardModifier.ShiftModifier:
            c = self.hover.cats()
            if len(c) == 1:
                v = a0.angleDelta().y() or a0.angleDelta().x()
                self.hover.incr() if v > 0 else self.hover.decr()
                self.repaint()
            return super().wheelEvent(a0)

        lastScale = self.scale
        if a0.angleDelta().y() > 0:
            self.scale = min(
                self.scale < 1 and self.scale + 0.125 or self.scale + 1, 32)
        else:
            self.scale = max(
                self.scale <= 1 and self.scale - 0.125 or self.scale - 1, 0.25)

        c = a0.pos()
        self.viewOrigin[0] = int((self.viewOrigin[0] - c.x()) * self.scale /
                                 lastScale + c.x())
        self.viewOrigin[1] = int((self.viewOrigin[1] - c.y()) * self.scale /
                                 lastScale + c.y())
        self.pan(0, 0)
        return super().wheelEvent(a0)
Exemplo n.º 9
0
 def wheelEvent(self, event: QtGui.QWheelEvent) -> None:
     if (event.modifiers() & QtCore.Qt.ControlModifier
             or settings.IMAGE_VIEW_SCROLL_DEFAULT_ZOOM.get_value()):
         transform = self.transform()
         x_scale, y_scale = transform.m11(), transform.m22()
         delta = event.angleDelta().y() / 2000
         x_scale, y_scale = [
             max(.1, min(4, scale + delta)) for scale in (x_scale, y_scale)
         ]
         old_position = self.mapToScene(event.pos())
         self.resetTransform()
         self.scale(x_scale, y_scale)
         new_position = self.mapToScene(event.pos())
         position_delta = new_position - old_position
         self.translate(position_delta.x(), position_delta.y())
     else:
         super().wheelEvent(event)
Exemplo n.º 10
0
 def process_viewport_wheel_event(self, event: QWheelEvent):
     # print("size when wheeling: ", self.view.viewport().size())
     zoom_in = self.zoom_step
     zoom_out = 1 / zoom_in
     zoom_ = zoom_in if event.angleDelta().y() > 0 else zoom_out
     self.update_scale(event.pos(), zoom_)
     event.accept()
     self.on_view_changed()
     return True
Exemplo n.º 11
0
 def wheelEvent(self, event: QtGui.QWheelEvent):
     """Translate Qt wheelEvent to MPL scroll_event"""
     pxDelta = event.pixelDelta()
     # See QWheelEvent::pixelDelta docs
     if not pxDelta.isNull():
         step = pxDelta.y()
     else:
         step = event.angleDelta().y() / 120
     if step:
         self.scroll_event(*self.mapToFigure(event.pos()), step, event)
Exemplo n.º 12
0
 def wheelEvent(self, event: QWheelEvent):
     factor = 1.1
     if event.angleDelta().x() or event.angleDelta().y() < 0:
         factor = 0.9
     view_pos = event.pos()
     scene_pos = self.mapToScene(view_pos)
     self.centerOn(scene_pos)
     self.scale(factor, factor)
     delta = self.mapToScene(view_pos) - self.mapToScene(
         self.viewport().rect().center())
     self.centerOn(scene_pos - delta)
Exemplo n.º 13
0
    def zoom(self, factor, suppress_signal=False, event: QWheelEvent = None):
        if factor > 1 and self.view_rect().width() / factor < 300:
            factor = self.view_rect().width() / 300

        old_pos = self.mapToScene(event.pos()) if event is not None else None

        if self.view_rect().width() / factor > self.sceneRect().width():
            self.show_full_scene()
            factor = 1

        self.scale(factor, 1)

        if not suppress_signal:
            self.zoomed.emit(factor)

        if event:
            move = self.mapToScene(event.pos()) - old_pos
            self.translate(move.x(), 0)
        else:
            self.centerOn(self.view_rect().x() + self.view_rect().width() / 2,
                          self.y_center)
Exemplo n.º 14
0
    def wheelEvent(self, event: QWheelEvent):
        """
        Zoom in or out of the view by mouse wheel scroll
        """
        zoomInFactor = 1.1
        zoomOutFactor = 0.9

        # Save the scene pos
        oldPos = self.mapToGlobal(event.pos())
        # oldPos = self.graphmapToScene(event.pos())

        # Zoom
        if event.angleDelta().y() > 0:
            zoomFactor = zoomInFactor
        else:
            zoomFactor = zoomOutFactor
        self.scale(zoomFactor, zoomFactor)
        # Get the new position
        newPos = self.mapToScene(event.pos())

        # Move scene to old position
        delta = newPos - oldPos

        self.translate(delta.x(), delta.y())
Exemplo n.º 15
0
    def wheelEvent(self, event: QWheelEvent):
        #------
        if self.Clicable:
            a = event.angleDelta().y()
            self.my_wheel_event_freq.emit(a)
            #------
            self.wheel_event_triggered.emit(event)
            if event.globalPos:

                self.scene().get_freq_for_pos(int(self.mapToScene(event.pos()).x()))
            #     self.my_freq_wheel.emit(freq)
            if self.capturing_data:
                return

            super().wheelEvent(event)
Exemplo n.º 16
0
    def on_wheel_rotated(self, event: QtGui.QWheelEvent) -> None:
        # find the current position in data coordinates
        painter = QtGui.QPainter(self)
        temp_width = painter.device().width()

        x_scale = float(self._display_x_max - self._display_x_min) / float(temp_width)
        cur_pos_x = self._display_x_min + event.pos().x() * x_scale
        mid_x = 0.5 * (self._display_x_max + self._display_x_min)

        # calculate the new display window width
        num_steps = event.angleDelta().y() / 120

        if num_steps > 0:
            # zoom in based on cursor location
            wnd_x = 0.25 * (self._display_x_max - self._display_x_min)
        else:
            # zoom out based on cursor location
            wnd_x = self._display_x_max - self._display_x_min

        # change the display window based on position
        if cur_pos_x < mid_x:
            new_left_x = cur_pos_x - wnd_x

            if new_left_x < self._scale_x_min:
                wnd_x += self._scale_x_min - new_left_x
                new_left_x = self._scale_x_min

            self._display_x_min = new_left_x

            new_right_x = cur_pos_x + wnd_x
            self._display_x_max = new_right_x if new_right_x < self._scale_x_max else self._scale_x_max
        else:
            new_right_x = cur_pos_x + wnd_x

            if new_right_x > self._scale_x_max:
                wnd_x += new_right_x - self._scale_x_max
                new_right_x = self._scale_x_max

            self._display_x_max = new_right_x

            new_left_x = cur_pos_x - wnd_x
            self._display_x_min = new_left_x if new_left_x > self._scale_x_min else self._scale_x_min

        # notify others of the zoom
        self.rescaled_x.emit()

        # update the view
        self.update()
Exemplo n.º 17
0
 def wheelEvent(self, event: QWheelEvent):
     factor = 1.1
     if event.angleDelta().x() or event.angleDelta().y() < 0:
         factor = 0.9
         self.b_platform.set_line_width(self.b_platform.line_width + 0.02)
         self.b_platform.dot_radius += 0.03
     else:
         self.b_platform.set_line_width(self.b_platform.line_width - 0.02)
         self.b_platform.dot_radius -= 0.03
     view_pos = event.pos()
     scene_pos = self.mapToScene(view_pos)
     self.centerOn(scene_pos)
     self.scale(factor, factor)
     delta = self.mapToScene(view_pos) - self.mapToScene(
         self.viewport().rect().center())
     self.centerOn(scene_pos - delta)
     self.reload_mat_and_update()
Exemplo n.º 18
0
    def _on_central_mouse_wheel(self, event: QtGui.QWheelEvent):
        # print("_on_central_mouse_wheel")
        # add to always request a stop any current GPU work to free it up for scrolling
        self._controller.stop_request()
        view_state_ = self._view_state
        steps: float = self._get_scroll_steps(event)
        # print("_on_central_mouse_wheel")

        if view_state_.ready_to_zoom:
            extra_scaling = 0.9**steps
            view_state_.scaling_requested *= extra_scaling
            if steps > 0:  # zooming in
                pos = event.pos()
                cursor = self._frame_image_to_frame_cartesian(x=pos.x(),
                                                              y=pos.y())
                zoom_point = self._get_zoom_point(cursor)
                self._zoom(zoom_point)
            else:  # zooming out, always just go out, no movement
                self._zoom()
Exemplo n.º 19
0
 def wheelEvent(self, event: QtGui.QWheelEvent):
     dScale = event.angleDelta().y() / 120.0
     if dScale == 0:
         return
     dScale = 1.10**dScale
     # Keep location under mouse during zoom
     bKeepLocation = True
     if bKeepLocation:
         # zoom centered on current mouse pointer location
         mouse_pos = WindowPos.from_QPoint(event.pos())
         c_args = (self.camera, self.size())
         mpc1 = CanvasPos.from_WindowPos(mouse_pos, *c_args)
         self.camera.zoom *= dScale
         mpc2 = CanvasPos.from_WindowPos(mouse_pos, *c_args)
         self.camera.center += mpc1 - mpc2
     else:
         # zoom centered on widget center
         self.camera.zoom *= dScale
     self.camera.notify()
Exemplo n.º 20
0
    def wheelMeasureEvent(
            self, measure: measured_track_editor.BaseMeasureEditor, evt: QtGui.QWheelEvent) -> None:
        assert isinstance(measure, BeatMeasureEditor), type(measure).__name__

        if evt.modifiers() in (Qt.NoModifier, Qt.ShiftModifier):
            if evt.modifiers() == Qt.ShiftModifier:
                vel_delta = (1 if evt.angleDelta().y() > 0 else -1)
            else:
                vel_delta = (10 if evt.angleDelta().y() > 0 else -10)

            click_time = measure.xToTime(evt.pos().x())

            for beat in measure.measure.beats:
                if beat.time == click_time:
                    with self.project.apply_mutations(
                            '%s: Change beat velocity' % measure.track.name):
                        beat.velocity = max(0, min(127, beat.velocity + vel_delta))
                    evt.accept()
                    return

        super().wheelMeasureEvent(measure, evt)
Exemplo n.º 21
0
    def wheelEvent(self, event: QWheelEvent):
        """
        Zoom in/out on the mouse cursor
        """
        # zoom only when CTRL key pressed
        if (event.modifiers() & Qt.ControlModifier) == Qt.ControlModifier:
            steps = event.angleDelta().y() / 15 / 8

            if steps == 0:
                event.ignore()
                return

            # scale factor 1.25
            sc = pow(1.25, steps)
            self.scale(sc, sc)
            self.centerOn(self.mapToScene(event.pos()))
            event.accept()
        #  act normally on scrollbar
        else:
            # transmit event to parent class wheelevent
            super(QGraphicsView, self).wheelEvent(event)
Exemplo n.º 22
0
    def wheelEvent(self, event: QWheelEvent):
        """
        Zoom in/out on the mouse cursor
        """
        # zoom only when CTRL key pressed
        if (event.modifiers() & Qt.ControlModifier) == Qt.ControlModifier:
            steps = event.angleDelta().y() / 15 / 8

            if steps == 0:
                event.ignore()
                return

            # scale factor 1.25
            sc = pow(1.25, steps)
            self.scale(sc, sc)
            self.centerOn(self.mapToScene(event.pos()))
            event.accept()
        #  act normally on scrollbar
        else:
            # transmit event to parent class wheelevent
            super(QGraphicsView, self).wheelEvent(event)
Exemplo n.º 23
0
 def wheelEvent(self, event: QWheelEvent):
     zoom_factor = 1.001 ** event.angleDelta().y()
     self.zoom(zoom_factor, cursor_pos=event.pos())
Exemplo n.º 24
0
 def wheelEvent(self, event: QWheelEvent):
     zoom_factor = 1.001**event.angleDelta().y()
     self.zoom(zoom_factor, cursor_pos=event.pos())
Exemplo n.º 25
0
class ScrollArea(QScrollArea):
    """ 一个可以平滑滚动的区域 """

    def __init__(self, parent=None):
        super().__init__(parent)
        self.fps = 60
        self.duration = 400
        self.stepsTotal = 0
        self.stepRatio = 1.5
        self.acceleration = 1
        self.lastWheelEvent = None
        self.scrollStamps = deque()
        self.stepsLeftQueue = deque()
        self.smoothMoveTimer = QTimer(self)
        self.smoothMode = SmoothMode(SmoothMode.COSINE)
        self.smoothMoveTimer.timeout.connect(self.smoothMove)
    
    def setSMoothMode(self, smoothMode):
        """ 设置滚动模式 """
        self.smoothMode = smoothMode

    def wheelEvent(self, e: QWheelEvent):
        """ 实现平滑滚动效果 """
        if self.smoothMode == SmoothMode.NO_SMOOTH:
            super().wheelEvent(e)
            return
        # 将当前时间点插入队尾
        now = QDateTime.currentDateTime().toMSecsSinceEpoch()
        self.scrollStamps.append(now)
        while now - self.scrollStamps[0] > 500:
            self.scrollStamps.popleft()
        # 根据未处理完的事件调整移动速率增益
        accerationRatio = min(len(self.scrollStamps) / 15, 1)
        if not self.lastWheelEvent:
            self.lastWheelEvent = QWheelEvent(e)
        else:
            self.lastWheelEvent = e
        # 计算步数
        self.stepsTotal = self.fps * self.duration / 1000
        # 计算每一个事件对应的移动距离
        delta = e.angleDelta().y() * self.stepRatio
        if self.acceleration > 0:
            delta += delta * self.acceleration * accerationRatio
        # 将移动距离和步数组成列表,插入队列等待处理
        self.stepsLeftQueue.append([delta, self.stepsTotal])
        # 定时器的溢出时间t=1000ms/帧数
        self.smoothMoveTimer.start(1000 / self.fps)

    def smoothMove(self):
        """ 计时器溢出时进行平滑滚动 """
        totalDelta = 0
        # 计算所有未处理完事件的滚动距离,定时器每溢出一次就将步数-1
        for i in self.stepsLeftQueue:
            totalDelta += self.subDelta(i[0], i[1])
            i[1] -= 1
        # 如果事件已处理完,就将其移出队列
        while self.stepsLeftQueue and self.stepsLeftQueue[0][1] == 0:
            self.stepsLeftQueue.popleft()
        # 构造滚轮事件
        e = QWheelEvent(self.lastWheelEvent.pos(),
                        self.lastWheelEvent.globalPos(),
                        self.lastWheelEvent.pos(),
                        self.lastWheelEvent.globalPos(),
                        round(totalDelta),
                        Qt.Vertical,
                        self.lastWheelEvent.buttons(),
                        Qt.NoModifier)
        # 将构造出来的滚轮事件发送给app处理
        QApplication.sendEvent(self.verticalScrollBar(), e)
        # 如果队列已空,停止滚动
        if not self.stepsLeftQueue:
            self.smoothMoveTimer.stop()

    def subDelta(self, delta, stepsLeft):
        """ 计算每一步的插值 """
        m = self.stepsTotal / 2
        x = abs(self.stepsTotal - stepsLeft - m)
        # 根据滚动模式计算插值
        res = 0
        if self.smoothMode == SmoothMode.NO_SMOOTH:
            res = 0
        elif self.smoothMode == SmoothMode.CONSTANT:
            res = delta / self.stepsTotal
        elif self.smoothMode == SmoothMode.LINEAR:
            res = 2 * delta / self.stepsTotal * (m - x) / m
        elif self.smoothMode == SmoothMode.QUADRATI:
            res = 3 / 4 / m * (1 - x * x / m / m) * delta
        elif self.smoothMode == SmoothMode.COSINE:
            res = (cos(x * pi / m) + 1) / (2 * m) * delta
        return res
Exemplo n.º 26
0
 def wheelEvent(self, event: QtGui.QWheelEvent) -> None:
     if event.modifiers() & QtCore.Qt.ControlModifier:
         self._zoomed(event.angleDelta().y(),
                      event.pos().x() / self.width())
     else:
         self._scrolled(event.angleDelta().y())
Exemplo n.º 27
0
 def wheelEvent(self, evt: QtGui.QWheelEvent) -> None:
     evt = QtGui.QWheelEvent(evt.pos() + self.offset(), evt.globalPos(),
                             evt.pixelDelta(), evt.angleDelta(), 0,
                             Qt.Horizontal, evt.buttons(), evt.modifiers(),
                             evt.phase(), evt.source())
     self.__toolbox.wheelEvent(evt)