From b1461505288d3d402d9bff26af50144ae534c070 Mon Sep 17 00:00:00 2001 From: Gary Wang Date: Mon, 1 Mar 2021 00:44:50 +0800 Subject: [PATCH] feat: Shift+Click to use color-inverted checkerboard --- app/actionmanager.cpp | 2 ++ app/actionmanager.h | 1 + app/graphicsview.cpp | 16 +++++++++------- app/graphicsview.h | 5 +++-- app/mainwindow.cpp | 12 +++++++++++- app/mainwindow.h | 2 ++ 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/app/actionmanager.cpp b/app/actionmanager.cpp index 65c4515..c0d2546 100644 --- a/app/actionmanager.cpp +++ b/app/actionmanager.cpp @@ -26,6 +26,7 @@ void ActionManager::setupAction(MainWindow *mainWindow) CREATE_NEW_ACTION(mainWindow, actionCopyPixmap); CREATE_NEW_ACTION(mainWindow, actionCopyFilePath); CREATE_NEW_ACTION(mainWindow, actionPaste); + CREATE_NEW_ACTION(mainWindow, actionToggleCheckerboard); CREATE_NEW_ACTION(mainWindow, actionToggleStayOnTop); CREATE_NEW_ACTION(mainWindow, actionToggleProtectMode); CREATE_NEW_ACTION(mainWindow, actionSettings); @@ -47,6 +48,7 @@ void ActionManager::retranslateUi(MainWindow *mainWindow) 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)); + actionToggleCheckerboard->setText(QCoreApplication::translate("MainWindow", "Toggle Checkerboard", nullptr)); actionToggleStayOnTop->setText(QCoreApplication::translate("MainWindow", "Stay on top", nullptr)); actionToggleProtectMode->setText(QCoreApplication::translate("MainWindow", "Protected mode", nullptr)); actionSettings->setText(QCoreApplication::translate("MainWindow", "Configure...", nullptr)); diff --git a/app/actionmanager.h b/app/actionmanager.h index 13b7cf5..e8fe8e7 100644 --- a/app/actionmanager.h +++ b/app/actionmanager.h @@ -21,6 +21,7 @@ public: QAction *actionCopyPixmap; QAction *actionCopyFilePath; QAction *actionPaste; + QAction *actionToggleCheckerboard; QAction *actionToggleStayOnTop; QAction *actionToggleProtectMode; QAction *actionSettings; diff --git a/app/graphicsview.cpp b/app/graphicsview.cpp index 95b7f79..ce64369 100644 --- a/app/graphicsview.cpp +++ b/app/graphicsview.cpp @@ -158,9 +158,9 @@ void GraphicsView::checkAndDoFitInView(bool markItOnAnyway) } } -void GraphicsView::toggleCheckerboard() +void GraphicsView::toggleCheckerboard(bool invertCheckerboardColor) { - setCheckerboardEnabled(!m_checkerboardEnabled); + setCheckerboardEnabled(!m_checkerboardEnabled, invertCheckerboardColor); } void GraphicsView::mousePressEvent(QMouseEvent *event) @@ -294,17 +294,19 @@ bool GraphicsView::shouldIgnoreMousePressMoveEvent(const QMouseEvent *event) con return false; } -void GraphicsView::setCheckerboardEnabled(bool enabled) +void GraphicsView::setCheckerboardEnabled(bool enabled, bool invertColor) { m_checkerboardEnabled = enabled; + m_isLastCheckerboardColorInverted = invertColor; if (m_checkerboardEnabled) { // Prepare background check-board pattern QPixmap tilePixmap(0x20, 0x20); - tilePixmap.fill(QColor(35, 35, 35, 170)); + tilePixmap.fill(invertColor ? QColor(220, 220, 220, 170) : QColor(35, 35, 35, 170)); QPainter tilePainter(&tilePixmap); - QColor color(45, 45, 45, 170); - tilePainter.fillRect(0, 0, 0x10, 0x10, color); - tilePainter.fillRect(0x10, 0x10, 0x10, 0x10, color); + constexpr QColor color(45, 45, 45, 170); + constexpr QColor invertedColor(210, 210, 210, 170); + tilePainter.fillRect(0, 0, 0x10, 0x10, invertColor ? invertedColor : color); + tilePainter.fillRect(0x10, 0x10, 0x10, 0x10, invertColor ? invertedColor : color); tilePainter.end(); setBackgroundBrush(tilePixmap); diff --git a/app/graphicsview.h b/app/graphicsview.h index b3234e6..79deb2f 100644 --- a/app/graphicsview.h +++ b/app/graphicsview.h @@ -38,7 +38,7 @@ signals: void requestGallery(const QString &filePath); public slots: - void toggleCheckerboard(); + void toggleCheckerboard(bool invertCheckerboardColor = false); private: void mousePressEvent(QMouseEvent * event) override; @@ -53,13 +53,14 @@ private: bool isThingSmallerThanWindowWith(const QTransform &transform) const; bool shouldIgnoreMousePressMoveEvent(const QMouseEvent *event) const; - void setCheckerboardEnabled(bool enabled); + void setCheckerboardEnabled(bool enabled, bool invertColor = false); void applyTransformationModeByScaleFactor(); void resetWithScaleAndRotate(qreal scaleFactor, qreal rotateAngle); bool m_enableFitInView = false; bool m_checkerboardEnabled = false; + bool m_isLastCheckerboardColorInverted = false; qreal m_rotateAngle = 0; }; diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index be120c8..242adf3 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -117,7 +117,7 @@ MainWindow::MainWindow(QWidget *parent) connect(m_bottomButtonGroup, &BottomButtonGroup::zoomOutBtnClicked, this, &MainWindow::on_actionZoomOut_triggered); connect(m_bottomButtonGroup, &BottomButtonGroup::toggleCheckerboardBtnClicked, - this, [ = ](){ m_graphicsView->toggleCheckerboard(); }); + this, &MainWindow::toggleCheckerboard); connect(m_bottomButtonGroup, &BottomButtonGroup::rotateRightBtnClicked, this, [ = ](){ m_graphicsView->resetScale(); @@ -470,6 +470,11 @@ void MainWindow::updateWidgetsPosition() m_gv->move(width() - m_gv->width(), height() - m_gv->height()); } +void MainWindow::toggleCheckerboard() +{ + m_graphicsView->toggleCheckerboard(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier)); +} + void MainWindow::toggleProtectedMode() { m_protectedMode = !m_protectedMode; @@ -595,6 +600,11 @@ void MainWindow::on_actionPaste_triggered() } } +void MainWindow::on_actionToggleCheckerboard_triggered() +{ + m_graphicsView->toggleCheckerboard(); +} + void MainWindow::on_actionToggleStayOnTop_triggered() { toggleStayOnTop(); diff --git a/app/mainwindow.h b/app/mainwindow.h index 765b88a..d12c6ed 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -50,6 +50,7 @@ protected slots: void centerWindow(); void closeWindow(); void updateWidgetsPosition(); + void toggleCheckerboard(); void toggleProtectedMode(); void toggleStayOnTop(); bool stayOnTop(); @@ -67,6 +68,7 @@ private slots: void on_actionCopyPixmap_triggered(); void on_actionCopyFilePath_triggered(); void on_actionPaste_triggered(); + void on_actionToggleCheckerboard_triggered(); void on_actionToggleStayOnTop_triggered(); void on_actionToggleProtectMode_triggered(); void on_actionSettings_triggered();