diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp index 819a52d2159..b7548020723 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp @@ -252,13 +252,21 @@ void GraphicsView::setPinned(TreeItem *item) void GraphicsView::setZoomX(double zoom, const QPoint &pivot) { - applyZoom(zoom, m_zoomY, pivot); + if (pivot.isNull()) + applyZoom(zoom, m_zoomY, viewportCenter()); + else + applyZoom(zoom, m_zoomY, pivot); + viewport()->update(); } void GraphicsView::setZoomY(double zoom, const QPoint &pivot) { - applyZoom(m_zoomX, zoom, pivot); + if (pivot.isNull()) + applyZoom(zoom, m_zoomY, viewportCenter()); + else + applyZoom(zoom, m_zoomY, pivot); + viewport()->update(); } @@ -514,7 +522,14 @@ void GraphicsView::applyZoom(double x, double y, const QPoint &pivot) m_transform = QTransform::fromScale(scaleX, scaleY); m_scene->setComponentTransform(m_transform); - QRectF sr = m_scene->rect().adjusted( + QRectF sr = m_scene->rect(); + if (sr.isNull()) { + sr.setLeft(m_scene->animationRangeMin()); + sr.setRight(m_scene->animationRangeMax()); + sr = m_transform.mapRect(sr); + } + + sr = sr.adjusted( -m_style.valueAxisWidth - m_style.canvasMargin, -m_style.timeAxisHeight - m_style.canvasMargin, m_style.canvasMargin, @@ -750,4 +765,10 @@ QRectF GraphicsView::rangeMaxHandle(const QRectF &rect) return QRectF(QPointF(handle, bottom), size); } +QPoint GraphicsView::viewportCenter() const +{ + QPoint viewCenter = viewport()->rect().center(); + return viewport()->mapToGlobal(viewCenter); +} + } // End namespace QmlDesigner. diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h index c292d0203da..120249b605f 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h @@ -136,6 +136,8 @@ private: QRectF rangeMaxHandle(const QRectF &rect); + QPoint viewportCenter() const; + private: bool m_dragging;