ctrl+wheel to zoom should also work outside the image

This commit is contained in:
Kovid Goyal 2022-04-26 20:46:38 +05:30
parent 877a43d85e
commit 065ba80ed9
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -42,6 +42,7 @@ class Label(QLabel):
def __init__(self, scrollarea): def __init__(self, scrollarea):
super().__init__(scrollarea) super().__init__(scrollarea)
scrollarea.zoom_requested.connect(self.zoom_requested)
self.setBackgroundRole(QPalette.ColorRole.Text if QApplication.instance().is_dark_theme else QPalette.ColorRole.Base) self.setBackgroundRole(QPalette.ColorRole.Text if QApplication.instance().is_dark_theme else QPalette.ColorRole.Base)
self.setSizePolicy(QSizePolicy.Policy.Ignored, QSizePolicy.Policy.Ignored) self.setSizePolicy(QSizePolicy.Policy.Ignored, QSizePolicy.Policy.Ignored)
self.setScaledContents(True) self.setScaledContents(True)
@ -49,7 +50,6 @@ class Label(QLabel):
self.in_drag = False self.in_drag = False
self.prev_drag_position = None self.prev_drag_position = None
self.scrollarea = scrollarea self.scrollarea = scrollarea
self.current_wheel_angle_delta = 0
@property @property
def is_pannable(self): def is_pannable(self):
@ -76,17 +76,6 @@ class Label(QLabel):
self.dragged(pos.x() - p.x(), pos.y() - p.y()) self.dragged(pos.x() - p.x(), pos.y() - p.y())
return super().mouseMoveEvent(ev) return super().mouseMoveEvent(ev)
def wheelEvent(self, ev):
if ev.modifiers() == Qt.KeyboardModifier.ControlModifier:
ad = ev.angleDelta().y()
if ad * self.current_wheel_angle_delta < 0:
self.current_wheel_angle_delta = 0
self.current_wheel_angle_delta += ad
if abs(self.current_wheel_angle_delta) >= 120:
self.zoom_requested.emit(self.current_wheel_angle_delta < 0)
self.current_wheel_angle_delta = 0
ev.accept()
def dragged(self, dx, dy): def dragged(self, dx, dy):
h = self.scrollarea.horizontalScrollBar() h = self.scrollarea.horizontalScrollBar()
if h.isVisible(): if h.isVisible():
@ -99,11 +88,24 @@ class Label(QLabel):
class ScrollArea(QScrollArea): class ScrollArea(QScrollArea):
toggle_fit = pyqtSignal() toggle_fit = pyqtSignal()
zoom_requested = pyqtSignal(bool)
current_wheel_angle_delta = 0
def mouseDoubleClickEvent(self, ev): def mouseDoubleClickEvent(self, ev):
if ev.button() == Qt.MouseButton.LeftButton: if ev.button() == Qt.MouseButton.LeftButton:
self.toggle_fit.emit() self.toggle_fit.emit()
def wheelEvent(self, ev):
if ev.modifiers() == Qt.KeyboardModifier.ControlModifier:
ad = ev.angleDelta().y()
if ad * self.current_wheel_angle_delta < 0:
self.current_wheel_angle_delta = 0
self.current_wheel_angle_delta += ad
if abs(self.current_wheel_angle_delta) >= 120:
self.zoom_requested.emit(self.current_wheel_angle_delta < 0)
self.current_wheel_angle_delta = 0
ev.accept()
class ImageView(QDialog): class ImageView(QDialog):