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.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,16 +655,18 @@ { d->uncheckZoomToFit(); d->uncheckZoomToFill(); - d->mAdapter->setZoom(1.); + d->mAdapter->setZoom(1., d->cursorPosition()); } void DocumentView::zoomIn(const QPointF& center) { qreal currentZoom = d->mAdapter->zoom(); Q_FOREACH(qreal zoom, d->mZoomSnapValues) { if (zoom > currentZoom + REAL_DELTA) { - d->setZoom(zoom, center); + d->setZoom(zoom, center == QPointF(-1, -1) + ? d->cursorPosition() + : center); return; } } @@ -679,7 +681,9 @@ while (it.hasPrevious()) { qreal zoom = it.previous(); if (zoom < currentZoom - REAL_DELTA) { - d->setZoom(zoom, center); + d->setZoom(zoom, center == QPointF(-1, -1) + ? d->cursorPosition() + : center); return; } } 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