From e52a6d8eedff6caaad30c9a5a0fcb0ff712b3ed5 Mon Sep 17 00:00:00 2001 From: Gary Wang Date: Mon, 25 Aug 2025 12:48:35 +0800 Subject: [PATCH] feat: new action for fit long image --- app/actionmanager.cpp | 2 ++ app/actionmanager.h | 1 + app/graphicsview.cpp | 17 +++++------------ app/mainwindow.cpp | 6 ++++++ app/mainwindow.h | 1 + 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/app/actionmanager.cpp b/app/actionmanager.cpp index 4a89423..f1ea52e 100644 --- a/app/actionmanager.cpp +++ b/app/actionmanager.cpp @@ -58,6 +58,7 @@ void ActionManager::setupAction(MainWindow *mainWindow) CREATE_NEW_ACTION(mainWindow, actionHorizontalFlip); CREATE_NEW_ACTION(mainWindow, actionFitInView); CREATE_NEW_ACTION(mainWindow, actionFitByWidth); + CREATE_NEW_ACTION(mainWindow, actionFitLongImage); CREATE_NEW_THEMEICON_ACTION(mainWindow, actionCopyPixmap, edit-copy); CREATE_NEW_ACTION(mainWindow, actionCopyFilePath); CREATE_NEW_THEMEICON_ACTION(mainWindow, actionPaste, edit-paste); @@ -101,6 +102,7 @@ void ActionManager::retranslateUi(MainWindow *mainWindow) actionHorizontalFlip->setText(QCoreApplication::translate("MainWindow", "Flip &Horizontally", nullptr)); actionFitInView->setText(QCoreApplication::translate("MainWindow", "Fit to view", nullptr)); actionFitByWidth->setText(QCoreApplication::translate("MainWindow", "Fit to width", nullptr)); + actionFitLongImage->setText(QCoreApplication::translate("MainWindow", "Fit long image", 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 af5cfcc..27ee8cd 100644 --- a/app/actionmanager.h +++ b/app/actionmanager.h @@ -41,6 +41,7 @@ public: QAction *actionHorizontalFlip; QAction *actionFitInView; QAction *actionFitByWidth; + QAction *actionFitLongImage; QAction *actionCopyPixmap; QAction *actionCopyFilePath; QAction *actionPaste; diff --git a/app/graphicsview.cpp b/app/graphicsview.cpp index d027770..37e5b05 100644 --- a/app/graphicsview.cpp +++ b/app/graphicsview.cpp @@ -282,19 +282,12 @@ bool GraphicsView::isLongImage() const void GraphicsView::fitLongImage() { - // Determine image orientation based on current transform QRectF transformedRect = transform().mapRect(sceneRect()); - qreal aspectRatio = transformedRect.width() / transformedRect.height(); - bool isTallImage = aspectRatio < 0.4; - bool isWideImage = aspectRatio > 2.5; - - // Use fitByOrientation with the migrated logic - if (isTallImage) { - // Tall image (height >> width): fit by width - fitByOrientation(Qt::Horizontal, true); // scaleDownOnly = true - } else if (isWideImage) { - // Wide image (width >> height): fit by height - fitByOrientation(Qt::Vertical, true); // scaleDownOnly = true + + if (transformedRect.width() < transformedRect.height()) { + fitByOrientation(Qt::Horizontal, true); + } else { + fitByOrientation(Qt::Vertical, true); } } diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index 6bb0eb6..8487c14 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -737,6 +737,12 @@ void MainWindow::on_actionFitByWidth_triggered() m_graphicsView->fitByOrientation(); } +void MainWindow::on_actionFitLongImage_triggered() +{ + m_graphicsView->setLongImageMode(true); + m_graphicsView->fitLongImage(); +} + void MainWindow::on_actionCopyPixmap_triggered() { QClipboard *cb = QApplication::clipboard(); diff --git a/app/mainwindow.h b/app/mainwindow.h index de19e8f..7241697 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -93,6 +93,7 @@ private slots: void on_actionHorizontalFlip_triggered(); void on_actionFitInView_triggered(); void on_actionFitByWidth_triggered(); + void on_actionFitLongImage_triggered(); void on_actionCopyPixmap_triggered(); void on_actionCopyFilePath_triggered(); void on_actionPaste_triggered();