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:
RomanPudashkin 2021-10-15 22:04:26 +02:00 committed by GitHub
commit bf061936e3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 2 deletions

View file

@ -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();

View file

@ -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;

View file

@ -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()

View file

@ -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);