diff --git a/app/actionmanager.cpp b/app/actionmanager.cpp index 6351c47..c6e9944 100644 --- a/app/actionmanager.cpp +++ b/app/actionmanager.cpp @@ -21,6 +21,8 @@ ActionManager::~ActionManager() void ActionManager::setupAction(MainWindow *mainWindow) { + CREATE_NEW_ACTION(mainWindow, actionZoomIn); + CREATE_NEW_ACTION(mainWindow, actionZoomOut); CREATE_NEW_ACTION(mainWindow, actionCopyPixmap); CREATE_NEW_ACTION(mainWindow, actionCopyFilePath); CREATE_NEW_ACTION(mainWindow, actionPaste); @@ -40,6 +42,8 @@ void ActionManager::retranslateUi(MainWindow *mainWindow) { Q_UNUSED(mainWindow); + actionZoomIn->setText(QCoreApplication::translate("MainWindow", "Zoom in", nullptr)); + actionZoomOut->setText(QCoreApplication::translate("MainWindow", "Zoom out", nullptr)); actionCopyPixmap->setText(QCoreApplication::translate("MainWindow", "Copy P&ixmap", nullptr)); actionCopyFilePath->setText(QCoreApplication::translate("MainWindow", "Copy &File Path", nullptr)); actionPaste->setText(QCoreApplication::translate("MainWindow", "&Paste", nullptr)); diff --git a/app/actionmanager.h b/app/actionmanager.h index 6f88cfd..13b7cf5 100644 --- a/app/actionmanager.h +++ b/app/actionmanager.h @@ -16,6 +16,8 @@ public: void setupShortcuts(); public: + QAction *actionZoomIn; + QAction *actionZoomOut; QAction *actionCopyPixmap; QAction *actionCopyFilePath; QAction *actionPaste; diff --git a/app/graphicsview.cpp b/app/graphicsview.cpp index f47cf06..95b7f79 100644 --- a/app/graphicsview.cpp +++ b/app/graphicsview.cpp @@ -7,6 +7,7 @@ #include #include #include +#include GraphicsView::GraphicsView(QWidget *parent) : QGraphicsView (parent) @@ -109,12 +110,7 @@ void GraphicsView::setScene(GraphicsScene *scene) qreal GraphicsView::scaleFactor() const { - int angle = static_cast(m_rotateAngle); - if (angle == 0 || angle == 180) { - return qAbs(transform().m11()); - } else { - return qAbs(transform().m12()); - } + return QStyleOptionGraphicsItem::levelOfDetailFromTransform(transform()); } void GraphicsView::resetTransform() @@ -209,10 +205,13 @@ void GraphicsView::resizeEvent(QResizeEvent *event) if (m_enableFitInView) { QTransform tf; tf.rotate(m_rotateAngle); - if (isThingSmallerThanWindowWith(tf) && scaleFactor() >= 1) { + bool originalSizeSmallerThanWindow = isThingSmallerThanWindowWith(tf); + if (originalSizeSmallerThanWindow && scaleFactor() >= 1) { // no longer need to do fitInView() // but we leave the m_enableFitInView value unchanged in case // user resize down the window again. + } else if (originalSizeSmallerThanWindow && scaleFactor() < 1) { + resetScale(); } else { fitInView(sceneRect(), Qt::KeepAspectRatio); } diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index e84774c..f44b4ce 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -112,9 +111,9 @@ MainWindow::MainWindow(QWidget *parent) connect(m_bottomButtonGroup, &BottomButtonGroup::toggleWindowMaximum, this, &MainWindow::toggleMaximize); connect(m_bottomButtonGroup, &BottomButtonGroup::zoomInBtnClicked, - this, [ = ](){ m_graphicsView->zoomView(1.25); }); + this, &MainWindow::on_actionZoomIn_triggered); connect(m_bottomButtonGroup, &BottomButtonGroup::zoomOutBtnClicked, - this, [ = ](){ m_graphicsView->zoomView(0.8); }); + this, &MainWindow::on_actionZoomOut_triggered); connect(m_bottomButtonGroup, &BottomButtonGroup::toggleCheckerboardBtnClicked, this, [ = ](){ m_graphicsView->toggleCheckerboard(); }); connect(m_bottomButtonGroup, &BottomButtonGroup::rotateRightBtnClicked, @@ -354,7 +353,11 @@ void MainWindow::wheelEvent(QWheelEvent *event) if (needWeelEvent) { if (actionIsZoom) { - m_graphicsView->zoomView(wheelUp ? 1.25 : 0.8); + if (wheelUp) { + on_actionZoomIn_triggered(); + } else { + on_actionZoomOut_triggered(); + } } else { if (wheelUp) { galleryPrev(); @@ -532,6 +535,18 @@ QSize MainWindow::sizeHint() const return QSize(710, 530); } +void MainWindow::on_actionZoomIn_triggered() +{ + if (m_graphicsView->scaleFactor() < 1000) { + m_graphicsView->zoomView(1.25); + } +} + +void MainWindow::on_actionZoomOut_triggered() +{ + m_graphicsView->zoomView(0.8); +} + void MainWindow::on_actionCopyPixmap_triggered() { QClipboard *cb = QApplication::clipboard(); diff --git a/app/mainwindow.h b/app/mainwindow.h index 73d9eff..765b88a 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -62,6 +62,8 @@ protected: QSize sizeHint() const override; private slots: + void on_actionZoomIn_triggered(); + void on_actionZoomOut_triggered(); void on_actionCopyPixmap_triggered(); void on_actionCopyFilePath_triggered(); void on_actionPaste_triggered();