mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
ctrl+wheel to zoom should also work outside the image
This commit is contained in:
parent
877a43d85e
commit
065ba80ed9
@ -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):
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user