Explorar o código

First attempt to zoom at pointer location

Martijn Buijs %!s(int64=7) %!d(string=hai) anos
pai
achega
908faa8457
Modificáronse 2 ficheiros con 13 adicións e 10 borrados
  1. 10 7
      labelme/app.py
  2. 3 3
      labelme/canvas.py

+ 10 - 7
labelme/app.py

@@ -202,12 +202,12 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin):
         self.canvas = self.labelList.canvas = Canvas()
         self.canvas.zoomRequest.connect(self.zoomRequest)
 
-        scroll = QtWidgets.QScrollArea()
-        scroll.setWidget(self.canvas)
-        scroll.setWidgetResizable(True)
+        self.scrollArea = QtWidgets.QScrollArea()
+        self.scrollArea.setWidget(self.canvas)
+        self.scrollArea.setWidgetResizable(True)
         self.scrollBars = {
-            Qt.Vertical: scroll.verticalScrollBar(),
-            Qt.Horizontal: scroll.horizontalScrollBar(),
+            Qt.Vertical: self.scrollArea.verticalScrollBar(),
+            Qt.Horizontal: self.scrollArea.horizontalScrollBar(),
         }
         self.canvas.scrollRequest.connect(self.scrollRequest)
 
@@ -216,7 +216,7 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin):
         self.canvas.selectionChanged.connect(self.shapeSelectionChanged)
         self.canvas.drawingPolygon.connect(self.toggleDrawingSensitive)
 
-        self.setCentralWidget(scroll)
+        self.setCentralWidget(self.scrollArea)
 
         self.addDockWidget(Qt.RightDockWidgetArea, self.labelsdock)
         self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
@@ -773,9 +773,12 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin):
     def addZoom(self, increment=10):
         self.setZoom(self.zoomWidget.value() + increment)
 
-    def zoomRequest(self, delta):
+    def zoomRequest(self, delta, pos):
         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)
 
     def setFitWindow(self, value=True):
         if value:

+ 3 - 3
labelme/canvas.py

@@ -29,7 +29,7 @@ CURSOR_GRAB = QtCore.Qt.OpenHandCursor
 
 
 class Canvas(QtWidgets.QWidget):
-    zoomRequest = QtCore.pyqtSignal(int)
+    zoomRequest = QtCore.pyqtSignal(int, QtCore.QPointF)
     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())
+                self.zoomRequest.emit(delta.y(), ev.pos())
             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())
+                    self.zoomRequest.emit(ev.delta(), ev.pos())
                 else:
                     self.scrollRequest.emit(
                         ev.delta(),