feat: Shift+Click to use color-inverted checkerboard

This commit is contained in:
Gary Wang 2021-03-01 00:44:50 +08:00
parent aecc3cf163
commit b146150528
6 changed files with 28 additions and 10 deletions

View File

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

View File

@ -21,6 +21,7 @@ public:
QAction *actionCopyPixmap;
QAction *actionCopyFilePath;
QAction *actionPaste;
QAction *actionToggleCheckerboard;
QAction *actionToggleStayOnTop;
QAction *actionToggleProtectMode;
QAction *actionSettings;

View File

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

View File

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

View File

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

View File

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