Skip to content

Commit 5d0d9b8

Browse files
committed
Canvas: Add zoom
1 parent e1cc469 commit 5d0d9b8

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

Orange/canvas/canvas/view.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import logging
55

66
from AnyQt.QtWidgets import QGraphicsView
7-
from AnyQt.QtGui import QCursor, QIcon
7+
from AnyQt.QtGui import QCursor, QIcon, QTransform
88
from AnyQt.QtCore import Qt, QRect, QSize, QRectF, QPoint, QTimer
99

1010
log = logging.getLogger(__name__)
@@ -25,6 +25,8 @@ def __init__(self, *args):
2525
self.__autoScrollTimer = QTimer(self)
2626
self.__autoScrollTimer.timeout.connect(self.__autoScrollAdvance)
2727

28+
self.__scale = 1.0
29+
2830
def setScene(self, scene):
2931
QGraphicsView.setScene(self, scene)
3032
self._ensureSceneRect(scene)
@@ -63,6 +65,18 @@ def mouseReleaseEvent(self, event):
6365

6466
return QGraphicsView.mouseReleaseEvent(self, event)
6567

68+
def wheelEvent(self, event):
69+
# use mouse position as anchor while zooming
70+
self.setTransformationAnchor(2)
71+
if event.modifiers() & Qt.ControlModifier:
72+
self.__scale += min(50, event.angleDelta().y()) / 120
73+
self.__scale = min(1.5, max(self.__scale, 0.25))
74+
transform = QTransform()
75+
transform.scale(self.__scale, self.__scale)
76+
self.setTransform(transform)
77+
else:
78+
super().wheelEvent(event)
79+
6680
def __shouldAutoScroll(self, pos):
6781
if self.__autoScroll:
6882
margin = self.__autoScrollMargin

0 commit comments

Comments
 (0)