Skip to content

Commit

Permalink
support panning with mid button
Browse files Browse the repository at this point in the history
  • Loading branch information
dmMaze committed Sep 1, 2022
1 parent e1d52f0 commit 51d165d
Showing 1 changed file with 35 additions and 13 deletions.
48 changes: 35 additions & 13 deletions ballontranslator/ui/canvas.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ def __init__(self, parent=None):
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()
Expand Down Expand Up @@ -157,6 +158,8 @@ def __init__(self, parent=None):
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)
Expand Down Expand Up @@ -285,7 +288,14 @@ def endCreateTextblock(self, btn=0):
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()))
Expand All @@ -299,13 +309,20 @@ def mouseMoveEvent(self, event: QGraphicsSceneMouseEvent) -> None:
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:
return self.startCreateTextblock(event.scenePos(), hide_control=True)
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
Expand All @@ -314,7 +331,7 @@ def mousePressEvent(self, event: QGraphicsSceneMouseEvent) -> None:
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()))
Expand All @@ -332,16 +349,19 @@ def creating_normal_rect(self):
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:
Expand All @@ -351,11 +371,13 @@ def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent) -> None:
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()
Expand Down

0 comments on commit 51d165d

Please sign in to comment.