diff --git a/lib/documentview/abstractdocumentviewadapter.h b/lib/documentview/abstractdocumentviewadapter.h --- a/lib/documentview/abstractdocumentviewadapter.h +++ b/lib/documentview/abstractdocumentviewadapter.h @@ -93,7 +93,7 @@ } // Implementation must emit zoomToFillChanged() - virtual void setZoomToFill(bool) + virtual void setZoomToFill(bool /*on*/, const QPointF& /*center*/ = QPointF(-1, -1)) {} virtual bool zoomToFill() const diff --git a/lib/documentview/abstractimageview.h b/lib/documentview/abstractimageview.h --- a/lib/documentview/abstractimageview.h +++ b/lib/documentview/abstractimageview.h @@ -63,7 +63,7 @@ virtual void setZoomToFit(bool value); - virtual void setZoomToFill(bool value); + virtual void setZoomToFill(bool value, const QPointF& center = QPointF(-1, -1)); virtual void setDocument(Document::Ptr doc); diff --git a/lib/documentview/abstractimageview.cpp b/lib/documentview/abstractimageview.cpp --- a/lib/documentview/abstractimageview.cpp +++ b/lib/documentview/abstractimageview.cpp @@ -277,12 +277,12 @@ zoomToFitChanged(d->mZoomToFit); } -void AbstractImageView::setZoomToFill(bool on) +void AbstractImageView::setZoomToFill(bool on, const QPointF& center) { d->mZoomToFill = on; if (on) { d->mZoomToFit = false; - setZoom(computeZoomToFill()); + setZoom(computeZoomToFill(), center); } // We do not set zoom to 1 if zoomToFit is off, this is up to the code // calling us. It may went to zoom to some other level and/or to zoom on diff --git a/lib/documentview/documentview.h b/lib/documentview/documentview.h --- a/lib/documentview/documentview.h +++ b/lib/documentview/documentview.h @@ -218,8 +218,8 @@ void zoomActualSize(); - void zoomIn(const QPointF& center = QPointF(-1, -1)); - void zoomOut(const QPointF& center = QPointF(-1, -1)); + void zoomIn(QPointF center = QPointF(-1, -1)); + void zoomOut(QPointF center = QPointF(-1, -1)); void slotZoomChanged(qreal); diff --git a/lib/documentview/documentview.cpp b/lib/documentview/documentview.cpp --- a/lib/documentview/documentview.cpp +++ b/lib/documentview/documentview.cpp @@ -630,12 +630,12 @@ if (on == d->mAdapter->zoomToFill()) { return; } - d->mAdapter->setZoomToFill(on); + d->mAdapter->setZoomToFill(on, d->cursorPosition()); } void DocumentView::toggleZoomToFill() { const bool zoomToFillOn = d->mAdapter->zoomToFill(); - d->mAdapter->setZoomToFill(!zoomToFillOn); + d->mAdapter->setZoomToFill(!zoomToFillOn, d->cursorPosition()); if (zoomToFillOn) { d->setZoom(1., d->cursorPosition()); } @@ -655,11 +655,14 @@ { d->uncheckZoomToFit(); d->uncheckZoomToFill(); - d->mAdapter->setZoom(1.); + d->mAdapter->setZoom(1., d->cursorPosition()); } -void DocumentView::zoomIn(const QPointF& center) +void DocumentView::zoomIn(QPointF center) { + if (center == QPointF(-1, -1)) { + center = d->cursorPosition(); + } qreal currentZoom = d->mAdapter->zoom(); Q_FOREACH(qreal zoom, d->mZoomSnapValues) { @@ -670,8 +673,11 @@ } } -void DocumentView::zoomOut(const QPointF& center) +void DocumentView::zoomOut(QPointF center) { + if (center == QPointF(-1, -1)) { + center = d->cursorPosition(); + } qreal currentZoom = d->mAdapter->zoom(); QListIterator it(d->mZoomSnapValues); diff --git a/lib/documentview/rasterimageviewadapter.h b/lib/documentview/rasterimageviewadapter.h --- a/lib/documentview/rasterimageviewadapter.h +++ b/lib/documentview/rasterimageviewadapter.h @@ -57,7 +57,7 @@ void setZoomToFit(bool) Q_DECL_OVERRIDE; - void setZoomToFill(bool) Q_DECL_OVERRIDE; + void setZoomToFill(bool on, const QPointF& center) Q_DECL_OVERRIDE; bool zoomToFit() const Q_DECL_OVERRIDE; diff --git a/lib/documentview/rasterimageviewadapter.cpp b/lib/documentview/rasterimageviewadapter.cpp --- a/lib/documentview/rasterimageviewadapter.cpp +++ b/lib/documentview/rasterimageviewadapter.cpp @@ -94,9 +94,9 @@ d->mView->setZoomToFit(on); } -void RasterImageViewAdapter::setZoomToFill(bool on) +void RasterImageViewAdapter::setZoomToFill(bool on, const QPointF& center) { - d->mView->setZoomToFill(on); + d->mView->setZoomToFill(on, center); } bool RasterImageViewAdapter::zoomToFit() const diff --git a/lib/documentview/svgviewadapter.h b/lib/documentview/svgviewadapter.h --- a/lib/documentview/svgviewadapter.h +++ b/lib/documentview/svgviewadapter.h @@ -95,7 +95,7 @@ void setZoomToFit(bool) Q_DECL_OVERRIDE; - void setZoomToFill(bool) Q_DECL_OVERRIDE; + void setZoomToFill(bool on, const QPointF& center) Q_DECL_OVERRIDE; bool zoomToFit() const Q_DECL_OVERRIDE; diff --git a/lib/documentview/svgviewadapter.cpp b/lib/documentview/svgviewadapter.cpp --- a/lib/documentview/svgviewadapter.cpp +++ b/lib/documentview/svgviewadapter.cpp @@ -211,9 +211,9 @@ d->mView->setZoomToFit(on); } -void SvgViewAdapter::setZoomToFill(bool on) +void SvgViewAdapter::setZoomToFill(bool on, const QPointF& center) { - d->mView->setZoomToFill(on); + d->mView->setZoomToFill(on, center); } bool SvgViewAdapter::zoomToFit() const