Merge pull request #9365 from martin-danhier/center-editor-zoom
Fix #9201 Set the notation zoom focus point to the selection or the center of the view
This commit is contained in:
commit
bf061936e3
4 changed files with 25 additions and 2 deletions
|
@ -804,6 +804,11 @@ qreal NotationPaintView::height() const
|
|||
return QQuickPaintedItem::height();
|
||||
}
|
||||
|
||||
PointF NotationPaintView::canvasPos() const
|
||||
{
|
||||
return PointF(m_matrix.dx(), m_matrix.dy());
|
||||
}
|
||||
|
||||
PointF NotationPaintView::toLogical(const QPoint& point) const
|
||||
{
|
||||
double scale = guiScaling();
|
||||
|
|
|
@ -81,6 +81,8 @@ public:
|
|||
qreal width() const override;
|
||||
qreal height() const override;
|
||||
|
||||
PointF canvasPos() const override;
|
||||
|
||||
PointF toLogical(const QPoint& point) const override;
|
||||
|
||||
Q_INVOKABLE void moveCanvas(int dx, int dy) override;
|
||||
|
|
|
@ -128,7 +128,7 @@ void NotationViewInputController::zoomIn()
|
|||
|
||||
int zoom = m_possibleZoomsPercentage[currentIndex];
|
||||
|
||||
setZoom(zoom);
|
||||
setZoom(zoom, findZoomFocusPoint());
|
||||
}
|
||||
|
||||
void NotationViewInputController::zoomOut()
|
||||
|
@ -137,7 +137,20 @@ void NotationViewInputController::zoomOut()
|
|||
|
||||
int zoom = m_possibleZoomsPercentage[currentIndex];
|
||||
|
||||
setZoom(zoom);
|
||||
setZoom(zoom, findZoomFocusPoint());
|
||||
}
|
||||
|
||||
QPoint NotationViewInputController::findZoomFocusPoint() const
|
||||
{
|
||||
INotationSelectionPtr selection = m_view->notationInteraction()->selection();
|
||||
|
||||
// No selection: zoom at the center of the view
|
||||
if (selection->isNone()) {
|
||||
return QPoint(m_view->width() / 2, m_view->height() / 2);
|
||||
}
|
||||
// Selection: zoom at the center of the selection
|
||||
return (selection->canvasBoundingRect().center().toPoint() * m_view->currentScaling())
|
||||
+ m_view->canvasPos().toQPoint();
|
||||
}
|
||||
|
||||
void NotationViewInputController::zoomToPageWidth()
|
||||
|
|
|
@ -45,6 +45,8 @@ public:
|
|||
virtual qreal width() const = 0;
|
||||
virtual qreal height() const = 0;
|
||||
|
||||
virtual PointF canvasPos() const = 0;
|
||||
|
||||
virtual void moveCanvas(int dx, int dy) = 0;
|
||||
virtual void moveCanvasHorizontal(int dx) = 0;
|
||||
virtual void moveCanvasVertical(int dy) = 0;
|
||||
|
@ -111,6 +113,7 @@ private:
|
|||
|
||||
int currentZoomIndex() const;
|
||||
int currentZoomPercentage() const;
|
||||
QPoint findZoomFocusPoint() const;
|
||||
void setZoom(int zoomPercentage, const QPoint& pos = QPoint());
|
||||
|
||||
void setViewMode(const ViewMode& viewMode);
|
||||
|
|
Loading…
Reference in a new issue