feat: Shift+Click to use color-inverted checkerboard
This commit is contained in:
		@ -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));
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ public:
 | 
			
		||||
    QAction *actionCopyPixmap;
 | 
			
		||||
    QAction *actionCopyFilePath;
 | 
			
		||||
    QAction *actionPaste;
 | 
			
		||||
    QAction *actionToggleCheckerboard;
 | 
			
		||||
    QAction *actionToggleStayOnTop;
 | 
			
		||||
    QAction *actionToggleProtectMode;
 | 
			
		||||
    QAction *actionSettings;
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user