diff --git a/labelme/app.py b/labelme/app.py index 3a80fd5935ba64bc0feb5866ed3d2734fa19a5f7..d21385b1f5c0c0804bb7226307196d65f81c6dfd 100644 --- a/labelme/app.py +++ b/labelme/app.py @@ -773,12 +773,24 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin): def addZoom(self, increment=10): self.setZoom(self.zoomWidget.value() + increment) - def zoomRequest(self, delta, pos): + def zoomRequest(self, delta, pos, globalPos): + canvas_width_old = self.canvas.width() + units = delta * 0.1 self.addZoom(units) - x, y = pos.x(), pos.y() - w, h = self.scrollArea.width(), self.scrollArea.height() - self.scrollArea.ensureVisible(x, y, w // 2, h // 2) + + canvas_width_new = self.canvas.width() + if canvas_width_old != canvas_width_new: + canvas_scale_factor = canvas_width_new / canvas_width_old + + x_shift = round(pos.x() * canvas_scale_factor) - pos.x() + y_shift = round(pos.y() * canvas_scale_factor) - pos.y() + + sb_h = self.scrollArea.horizontalScrollBar() + sb_v = self.scrollArea.verticalScrollBar() + + sb_h.setValue(sb_h.value() + x_shift) + sb_v.setValue(sb_v.value() + y_shift) def setFitWindow(self, value=True): if value: diff --git a/labelme/canvas.py b/labelme/canvas.py index 52ca802a19e507807d431e14279e8f5d4d832d03..13e05e35a67c2098dea527e0cb7d591839e3766a 100644 --- a/labelme/canvas.py +++ b/labelme/canvas.py @@ -29,7 +29,7 @@ CURSOR_GRAB = QtCore.Qt.OpenHandCursor class Canvas(QtWidgets.QWidget): - zoomRequest = QtCore.pyqtSignal(int, QtCore.QPointF) + zoomRequest = QtCore.pyqtSignal(int, QtCore.QPoint, QtCore.QPoint) scrollRequest = QtCore.pyqtSignal(int, int) newShape = QtCore.pyqtSignal() selectionChanged = QtCore.pyqtSignal(bool) @@ -497,7 +497,7 @@ class Canvas(QtWidgets.QWidget): if QtCore.Qt.ControlModifier == int(mods): # with Ctrl/Command key # zoom - self.zoomRequest.emit(delta.y(), ev.pos()) + self.zoomRequest.emit(delta.y(), ev.pos(), ev.globalPos()) else: # scroll self.scrollRequest.emit(delta.x(), QtCore.Qt.Horizontal) @@ -507,7 +507,7 @@ class Canvas(QtWidgets.QWidget): mods = ev.modifiers() if QtCore.Qt.ControlModifier == int(mods): # with Ctrl/Command key - self.zoomRequest.emit(ev.delta(), ev.pos()) + self.zoomRequest.emit(ev.delta(), ev.pos(), ev.globalPos()) else: self.scrollRequest.emit( ev.delta(),