Created
June 15, 2016 21:50
-
-
Save asavonic/5b3c5e72f90d2b8da8d48ecadabb2cd6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From a5033180f1fd14ae810449b45ca11783e042fa5a Mon Sep 17 00:00:00 2001 | |
From: Andrew Savonichev <andrew.savonichev@gmail.com> | |
Date: Thu, 16 Jun 2016 00:39:27 +0300 | |
Subject: [PATCH] Zoom to 100% on middle click | |
--- | |
ImageLounge/src/DkGui/DkViewPort.cpp | 25 +++++++++++++++++++------ | |
ImageLounge/src/DkGui/DkViewPort.h | 4 ++++ | |
2 files changed, 23 insertions(+), 6 deletions(-) | |
diff --git a/ImageLounge/src/DkGui/DkViewPort.cpp b/ImageLounge/src/DkGui/DkViewPort.cpp | |
index 4be5f35..73bdf5d 100644 | |
--- a/ImageLounge/src/DkGui/DkViewPort.cpp | |
+++ b/ImageLounge/src/DkGui/DkViewPort.cpp | |
@@ -357,6 +357,10 @@ void DkViewPort::tcpSendImage(bool silent) { | |
emit sendImageSignal(mImgStorage.getImage(), "nomacs - Image Lounge"); | |
} | |
+float DkViewPort::getZoomFactor() { | |
+ return mImgMatrix.m11()*mWorldMatrix.m11(); | |
+} | |
+ | |
void DkViewPort::zoom(float factor, QPointF center) { | |
if (mImgStorage.getImage().isNull() || mBlockZooming) | |
@@ -448,10 +452,10 @@ void DkViewPort::zoom(float factor, QPointF center) { | |
DkStatusBarManager::instance().setMessage(QString::number(qRound((float)(mWorldMatrix.m11()*mImgMatrix.m11() * 100))) + "%", DkStatusBar::status_zoom_info); | |
} | |
-void DkViewPort::zoomTo(float zoomLevel, const QPoint&) { | |
+void DkViewPort::zoomTo(float zoomLevel, const QPoint& center) { | |
mWorldMatrix.reset(); | |
- zoom(zoomLevel/(float)mImgMatrix.m11()); | |
+ zoom(zoomLevel/(float)mImgMatrix.m11(), center); | |
} | |
void DkViewPort::resetView() { | |
@@ -487,8 +491,8 @@ void DkViewPort::fullView() { | |
void DkViewPort::showZoom() { | |
QString zoomStr; | |
- zoomStr.sprintf("%.1f%%", mImgMatrix.m11()*mWorldMatrix.m11()*100); | |
- | |
+ zoomStr.sprintf("%.1f%%", getZoomFactor()*100); | |
+ | |
if (!mController->getZoomWidget()->isVisible()) | |
mController->setInfo(zoomStr, 3000, DkControlWidget::bottom_left_label); | |
} | |
@@ -915,7 +919,13 @@ void DkViewPort::mousePressEvent(QMouseEvent *event) { | |
repeatZoom(); | |
mRepeatZoomTimer->start(); | |
} | |
- | |
+ | |
+ // zoom to 100% on middle click | |
+ if(event->button() & Qt::MidButton) { | |
+ mBeforeZoom = getZoomFactor(); | |
+ zoomTo(1.0f, event->pos()); | |
+ } | |
+ | |
// ok, start panning | |
if (mWorldMatrix.m11() > 1 && !imageInside() && event->buttons() == Qt::LeftButton) { | |
setCursor(Qt::ClosedHandCursor); | |
@@ -935,7 +945,10 @@ void DkViewPort::mousePressEvent(QMouseEvent *event) { | |
} | |
void DkViewPort::mouseReleaseEvent(QMouseEvent *event) { | |
- | |
+ if (mBeforeZoom > 0) { | |
+ zoomTo(mBeforeZoom); | |
+ mBeforeZoom = -1.f; | |
+ } | |
mRepeatZoomTimer->stop(); | |
int sa = swipeRecognition(event->pos(), mPosGrab.toPoint()); | |
diff --git a/ImageLounge/src/DkGui/DkViewPort.h b/ImageLounge/src/DkGui/DkViewPort.h | |
index 3430967..835d904 100644 | |
--- a/ImageLounge/src/DkGui/DkViewPort.h | |
+++ b/ImageLounge/src/DkGui/DkViewPort.h | |
@@ -188,6 +188,8 @@ public slots: | |
void animateFade(); | |
virtual void togglePattern(bool show); | |
+ float getZoomFactor(); | |
+ | |
protected: | |
// events | |
@@ -226,6 +228,8 @@ protected: | |
QSharedPointer<DkImageLoader> mLoader; | |
QPoint mCurrentPixelPos; | |
+ | |
+ float mBeforeZoom = -1.f; | |
// functions | |
#if QT_VERSION < 0x050000 | |
-- | |
2.7.4 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment