forked from qt-creator/qt-creator
ModelEditor: Zoom large diagrams at mouse cursor
Change-Id: I56da68cbf2175e76bbfe8c64641a366d0d38b878 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -101,6 +101,7 @@
|
||||
#include <QUndoStack>
|
||||
#include <QVBoxLayout>
|
||||
#include <QMenu>
|
||||
#include <QScrollBar>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
@@ -422,9 +423,9 @@ void ModelEditor::initDocument()
|
||||
this, &ModelEditor::onCurrentEditorChanged, Qt::QueuedConnection);
|
||||
|
||||
connect(d->diagramView, &EditorDiagramView::zoomIn,
|
||||
this, &ModelEditor::zoomIn);
|
||||
this, &ModelEditor::zoomInAtPos);
|
||||
connect(d->diagramView, &EditorDiagramView::zoomOut,
|
||||
this, &ModelEditor::zoomOut);
|
||||
this, &ModelEditor::zoomOutAtPos);
|
||||
|
||||
connect(d->modelTreeView->selectionModel(), &QItemSelectionModel::selectionChanged,
|
||||
this, &ModelEditor::onTreeViewSelectionChanged, Qt::QueuedConnection);
|
||||
@@ -646,6 +647,33 @@ void ModelEditor::zoomOut()
|
||||
showZoomIndicator();
|
||||
}
|
||||
|
||||
void ModelEditor::zoomInAtPos(const QPoint &pos)
|
||||
{
|
||||
zoomAtPos(pos, ZOOM_FACTOR);
|
||||
}
|
||||
|
||||
void ModelEditor::zoomOutAtPos(const QPoint &pos)
|
||||
{
|
||||
zoomAtPos(pos, 1.0 / ZOOM_FACTOR);
|
||||
}
|
||||
|
||||
void ModelEditor::zoomAtPos(const QPoint &pos, double scale)
|
||||
{
|
||||
QPointF scenePos = d->diagramView->mapToScene(pos);
|
||||
QTransform transform = d->diagramView->transform();
|
||||
transform.scale(scale, scale);
|
||||
d->diagramView->setTransform(transform);
|
||||
QPoint scaledPos = d->diagramView->mapFromScene(scenePos);
|
||||
QPoint delta = pos - scaledPos;
|
||||
QScrollBar *hBar = d->diagramView->horizontalScrollBar();
|
||||
if (hBar)
|
||||
hBar->setValue(hBar->value() - delta.x());
|
||||
QScrollBar *vBar = d->diagramView->verticalScrollBar();
|
||||
if (vBar)
|
||||
vBar->setValue(vBar->value() - delta.y());
|
||||
showZoomIndicator();
|
||||
}
|
||||
|
||||
void ModelEditor::resetZoom()
|
||||
{
|
||||
d->diagramView->setTransform(QTransform());
|
||||
|
||||
Reference in New Issue
Block a user