提交 80bfc444 编写于 作者: M Martijn Buijs 提交者: Kentaro Wada

Simplified zooming on cursor to scrollbar manipulation

上级 039c7ff6
......@@ -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:
......
......@@ -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(),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册