Commit 51d165dc authored by dmMaze's avatar dmMaze
Browse files

support panning with mid button

parent e1d52f0e
Loading
Loading
Loading
Loading
+35 −13
Original line number Diff line number Diff line
@@ -113,7 +113,8 @@ class Canvas(QGraphicsScene):
        self.gv.hide_canvas.connect(self.on_hide_canvas)
        self.gv.setRenderHint(QPainter.Antialiasing)
        self.ctrl_relesed = self.gv.ctrl_released

        self.vscroll_bar = self.gv.verticalScrollBar()
        self.hscroll_bar = self.gv.horizontalScrollBar()
        self.default_cursor = self.gv.cursor()
        self.rubber_band = self.addWidget(QRubberBand(QRubberBand.Shape.Rectangle))
        self.rubber_band.hide()
@@ -157,6 +158,8 @@ class Canvas(QGraphicsScene):
        self.stroke_path_item: StrokeItem = None

        self.editor_index = 0 # 0: drawing 1: text editor
        self.mid_btn_pressed = False
        self.pan_initial_pos = QPoint(0, 0)

    def scaleUp(self):
        self.scaleImage(1 + CANVAS_SCALE_SPEED)
@@ -285,7 +288,14 @@ class Canvas(QGraphicsScene):
            self.end_create_textblock.emit(self.txtblkShapeControl.rect())

    def mouseMoveEvent(self, event: QGraphicsSceneMouseEvent) -> None:
        if self.creating_textblock:
        if self.mid_btn_pressed:
            new_pos = event.screenPos()
            delta_pos = new_pos - self.pan_initial_pos
            self.pan_initial_pos = new_pos
            self.hscroll_bar.setValue(int(self.hscroll_bar.value() - delta_pos.x()))
            self.vscroll_bar.setValue(int(self.vscroll_bar.value() - delta_pos.y()))
            
        elif self.creating_textblock:
            self.txtblkShapeControl.setRect(QRectF(self.create_block_origin, event.scenePos() / self.scale_factor).normalized())
        elif self.stroke_path_item is not None:
            self.stroke_path_item.addNewPoint(self.imgLayer.mapFromScene(event.scenePos()))
@@ -299,13 +309,20 @@ class Canvas(QGraphicsScene):
        return super().mouseMoveEvent(event)

    def mousePressEvent(self, event: QGraphicsSceneMouseEvent) -> None:
        btn = event.button()
        if btn == Qt.MouseButton.MiddleButton:
            self.mid_btn_pressed = True
            self.pan_initial_pos = event.screenPos()
            return

        if self.textblock_mode and len(self.selectedItems()) == 0:
            if event.button() == Qt.MouseButton.RightButton:
            if btn == Qt.MouseButton.RightButton:
                return self.startCreateTextblock(event.scenePos())
        elif self.creating_normal_rect:
            if btn == Qt.MouseButton.RightButton or btn == Qt.MouseButton.LeftButton:
                return self.startCreateTextblock(event.scenePos(), hide_control=True)

        elif event.button() == Qt.MouseButton.LeftButton:
        elif btn == Qt.MouseButton.LeftButton:
            # user is drawing using the pen/inpainting tool
            if self.alt_pressed:
                self.scale_tool_mode = True
@@ -314,7 +331,7 @@ class Canvas(QGraphicsScene):
                self.stroke_path_item = StrokeItem(self.imgLayer.mapFromScene(event.scenePos()))
                self.addStrokeItem(self.stroke_path_item)

        elif event.button() == Qt.MouseButton.RightButton:
        elif btn == Qt.MouseButton.RightButton:
            # user is drawing using eraser
            if self.painting and self.stroke_path_item is None:
                self.stroke_path_item = StrokeItem(self.imgLayer.mapFromScene(event.scenePos()))
@@ -332,16 +349,19 @@ class Canvas(QGraphicsScene):
        return self.image_edit_mode == ImageEditMode.RectTool and self.editor_index == 0

    def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent) -> None:
        if self.creating_textblock:
            btn = 0 if event.button() == Qt.MouseButton.LeftButton else 1
        btn = event.button()
        if btn == Qt.MouseButton.MiddleButton:
            self.mid_btn_pressed = False
        elif self.creating_textblock:
            btn = 0 if btn == Qt.MouseButton.LeftButton else 1
            return self.endCreateTextblock(btn=btn)
        elif event.button() == Qt.MouseButton.RightButton:
        elif btn == Qt.MouseButton.RightButton:
            if self.stroke_path_item is not None:
                self.finish_erasing.emit(self.stroke_path_item)
            if self.rubber_band.isVisible():
                self.rubber_band.hide()
                self.rubber_band_origin = None
        elif event.button() == Qt.MouseButton.LeftButton:
        elif btn == Qt.MouseButton.LeftButton:
            if self.stroke_path_item is not None:
                self.finish_painting.emit(self.stroke_path_item)
            elif self.scale_tool_mode:
@@ -351,11 +371,13 @@ class Canvas(QGraphicsScene):
        return super().mouseReleaseEvent(event)

    def updateCanvas(self):
        self.clearSelection()
        self.setProjSaveState(False)
        self.editing_textblkitem = None
        self.stroke_path_item = None
        self.txtblkShapeControl.setBlkItem(None)
        self.stroke_path_item
        self.mid_btn_pressed = False

        self.clearSelection()
        self.setProjSaveState(False)
        self.setImageLayer()
        self.setInpaintLayer()
        self.setMaskLayer()