Skip to content

Commit 967490c

Browse files
Fix canvas jump to top left corner during pan (#249)
* Fix canvas jump to top left corner during pan * Replace self.restoreCursor() with self.overrideCursor(CURSOR_DEFAULT) in the pan release path
1 parent 890aba5 commit 967490c

2 files changed

Lines changed: 19 additions & 10 deletions

File tree

PPOCRLabel.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,7 @@ def get_str(str_id):
533533
}
534534
self.scrollArea = scroll
535535
self.canvas.scrollRequest.connect(self.scrollRequest)
536+
self.canvas.pixelScrollRequest.connect(self.pixelScrollRequest)
536537

537538
self.canvas.newShape.connect(partial(self.newShape, False))
538539
self.canvas.shapeMoved.connect(self.updateBoxlist) # self.setDirty
@@ -2110,6 +2111,11 @@ def scrollRequest(self, delta, orientation):
21102111
bar = self.scrollBars[orientation]
21112112
bar.setValue(int(bar.value() + bar.singleStep() * units))
21122113

2114+
def pixelScrollRequest(self, dx, dy):
2115+
for orientation, delta in [(Qt.Horizontal, dx), (Qt.Vertical, dy)]:
2116+
bar = self.scrollBars[orientation]
2117+
bar.setValue(int(bar.value() - delta))
2118+
21132119
def setZoom(self, value):
21142120
self.actions.fitWidth.setChecked(False)
21152121
self.actions.fitWindow.setChecked(False)

libs/canvas.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
class Canvas(QWidget):
3333
zoomRequest = pyqtSignal(int)
3434
scrollRequest = pyqtSignal(int, int)
35+
pixelScrollRequest = pyqtSignal(int, int)
3536
newShape = pyqtSignal()
3637
# selectionChanged = pyqtSignal(bool)
3738
selectionChanged = pyqtSignal(list)
@@ -212,10 +213,11 @@ def mouseMoveEvent(self, ev):
212213
self.movingShape = True
213214
else:
214215
# pan
215-
delta_x = pos.x() - self.pan_initial_pos.x()
216-
delta_y = pos.y() - self.pan_initial_pos.y()
217-
self.scrollRequest.emit(delta_x, Qt.Horizontal)
218-
self.scrollRequest.emit(delta_y, Qt.Vertical)
216+
delta = ev.globalPos() - self.pan_initial_pos
217+
if delta.x() != 0 or delta.y() != 0:
218+
self.overrideCursor(CURSOR_MOVE)
219+
self.pixelScrollRequest.emit(delta.x(), delta.y())
220+
self.pan_initial_pos = ev.globalPos()
219221
self.update()
220222
return
221223

@@ -282,7 +284,7 @@ def mousePressEvent(self, ev):
282284
group_mode = int(ev.modifiers()) == Qt.ControlModifier
283285
self.selectShapePoint(pos, multiple_selection_mode=group_mode)
284286
self.prevPoint = pos
285-
self.pan_initial_pos = pos
287+
self.pan_initial_pos = ev.globalPos()
286288

287289
elif ev.button() == Qt.RightButton and self.editing():
288290
group_mode = int(ev.modifiers()) == Qt.ControlModifier
@@ -306,13 +308,14 @@ def mouseReleaseEvent(self, ev):
306308
else:
307309
self.overrideCursor(CURSOR_GRAB)
308310

309-
elif ev.button() == Qt.LeftButton and not self.fourpoint:
310-
pos = self.transformPos(ev.pos())
311+
elif ev.button() == Qt.LeftButton:
311312
if self.drawing():
312-
self.handleDrawing(pos)
313-
else:
313+
if not self.fourpoint:
314+
pos = self.transformPos(ev.pos())
315+
self.handleDrawing(pos)
316+
elif not self.selectedShapes:
314317
# pan
315-
QApplication.restoreOverrideCursor() # ?
318+
self.overrideCursor(CURSOR_DEFAULT)
316319

317320
if self.movingShape and self.hShape:
318321
if self.hShape in self.shapes:

0 commit comments

Comments
 (0)