feat: new action for fit long image

This commit is contained in:
2025-08-25 12:48:35 +08:00
parent 8b0c8ec194
commit e52a6d8eed
5 changed files with 15 additions and 12 deletions

View File

@ -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));

View File

@ -41,6 +41,7 @@ public:
QAction *actionHorizontalFlip;
QAction *actionFitInView;
QAction *actionFitByWidth;
QAction *actionFitLongImage;
QAction *actionCopyPixmap;
QAction *actionCopyFilePath;
QAction *actionPaste;

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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();