feat: able to disable built-in close window animation

This commit is contained in:
Gary Wang 2025-06-22 15:04:15 +08:00
parent 3cfb25db9a
commit 1623ca315a
No known key found for this signature in database
GPG Key ID: 5D30A4F15EA78760
6 changed files with 47 additions and 15 deletions

View File

@ -75,11 +75,7 @@ MainWindow::MainWindow(QWidget *parent)
m_exitAnimationGroup->addAnimation(m_fadeOutAnimation); m_exitAnimationGroup->addAnimation(m_fadeOutAnimation);
m_exitAnimationGroup->addAnimation(m_floatUpAnimation); m_exitAnimationGroup->addAnimation(m_floatUpAnimation);
connect(m_exitAnimationGroup, &QParallelAnimationGroup::finished, connect(m_exitAnimationGroup, &QParallelAnimationGroup::finished,
#ifdef Q_OS_MAC this, &MainWindow::doCloseWindow);
this, &QWidget::hide);
#else
this, &QWidget::close);
#endif
GraphicsScene * scene = new GraphicsScene(this); GraphicsScene * scene = new GraphicsScene(this);
@ -580,12 +576,16 @@ void MainWindow::centerWindow()
void MainWindow::closeWindow() void MainWindow::closeWindow()
{ {
if (Settings::instance()->useBuiltInCloseAnimation()) {
QRect windowRect(this->geometry()); QRect windowRect(this->geometry());
m_floatUpAnimation->setStartValue(windowRect); m_floatUpAnimation->setStartValue(windowRect);
m_floatUpAnimation->setEndValue(windowRect.adjusted(0, -80, 0, 0)); m_floatUpAnimation->setEndValue(windowRect.adjusted(0, -80, 0, 0));
m_floatUpAnimation->setStartValue(QRect(this->geometry().x(), this->geometry().y(), this->geometry().width(), this->geometry().height())); m_floatUpAnimation->setStartValue(QRect(this->geometry().x(), this->geometry().y(), this->geometry().width(), this->geometry().height()));
m_floatUpAnimation->setEndValue(QRect(this->geometry().x(), this->geometry().y()-80, this->geometry().width(), this->geometry().height())); m_floatUpAnimation->setEndValue(QRect(this->geometry().x(), this->geometry().y()-80, this->geometry().width(), this->geometry().height()));
m_exitAnimationGroup->start(); m_exitAnimationGroup->start();
} else {
doCloseWindow();
}
} }
void MainWindow::updateWidgetsPosition() void MainWindow::updateWidgetsPosition()
@ -912,6 +912,15 @@ void MainWindow::on_actionQuitApp_triggered()
quitAppAction(false); quitAppAction(false);
} }
void MainWindow::doCloseWindow()
{
#ifdef Q_OS_MAC
this->hide();
#else
this->close();
#endif
}
bool MainWindow::updateFileWatcher(const QString &basePath) bool MainWindow::updateFileWatcher(const QString &basePath)
{ {
m_fileSystemWatcher->removePaths(m_fileSystemWatcher->files()); m_fileSystemWatcher->removePaths(m_fileSystemWatcher->files());

View File

@ -106,6 +106,8 @@ private slots:
void on_actionLocateInFileManager_triggered(); void on_actionLocateInFileManager_triggered();
void on_actionQuitApp_triggered(); void on_actionQuitApp_triggered();
void doCloseWindow();
private: private:
bool updateFileWatcher(const QString & basePath = QString()); bool updateFileWatcher(const QString & basePath = QString());

View File

@ -45,12 +45,17 @@ Settings *Settings::instance()
return m_settings_instance; return m_settings_instance;
} }
bool Settings::stayOnTop() bool Settings::stayOnTop() const
{ {
return m_qsettings->value("stay_on_top", true).toBool(); return m_qsettings->value("stay_on_top", true).toBool();
} }
bool Settings::useLightCheckerboard() bool Settings::useBuiltInCloseAnimation() const
{
return m_qsettings->value("use_built_in_close_animation", true).toBool();
}
bool Settings::useLightCheckerboard() const
{ {
return m_qsettings->value("use_light_checkerboard", false).toBool(); return m_qsettings->value("use_light_checkerboard", false).toBool();
} }
@ -89,6 +94,12 @@ void Settings::setStayOnTop(bool on)
m_qsettings->sync(); m_qsettings->sync();
} }
void Settings::setUseBuiltInCloseAnimation(bool on)
{
m_qsettings->setValue("use_built_in_close_animation", on);
m_qsettings->sync();
}
void Settings::setUseLightCheckerboard(bool light) void Settings::setUseLightCheckerboard(bool light)
{ {
m_qsettings->setValue("use_light_checkerboard", light); m_qsettings->setValue("use_light_checkerboard", light);

View File

@ -34,14 +34,16 @@ public:
static Settings *instance(); static Settings *instance();
bool stayOnTop(); bool stayOnTop() const;
bool useLightCheckerboard(); bool useBuiltInCloseAnimation() const;
bool useLightCheckerboard() const;
DoubleClickBehavior doubleClickBehavior() const; DoubleClickBehavior doubleClickBehavior() const;
MouseWheelBehavior mouseWheelBehavior() const; MouseWheelBehavior mouseWheelBehavior() const;
WindowSizeBehavior initWindowSizeBehavior() const; WindowSizeBehavior initWindowSizeBehavior() const;
Qt::HighDpiScaleFactorRoundingPolicy hiDpiScaleFactorBehavior() const; Qt::HighDpiScaleFactorRoundingPolicy hiDpiScaleFactorBehavior() const;
void setStayOnTop(bool on); void setStayOnTop(bool on);
void setUseBuiltInCloseAnimation(bool on);
void setUseLightCheckerboard(bool light); void setUseLightCheckerboard(bool light);
void setDoubleClickBehavior(DoubleClickBehavior dcb); void setDoubleClickBehavior(DoubleClickBehavior dcb);
void setMouseWheelBehavior(MouseWheelBehavior mwb); void setMouseWheelBehavior(MouseWheelBehavior mwb);

View File

@ -20,6 +20,7 @@
SettingsDialog::SettingsDialog(QWidget *parent) SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent) : QDialog(parent)
, m_stayOnTop(new QCheckBox) , m_stayOnTop(new QCheckBox)
, m_useBuiltInCloseAnimation(new QCheckBox)
, m_useLightCheckerboard(new QCheckBox) , m_useLightCheckerboard(new QCheckBox)
, m_doubleClickBehavior(new QComboBox) , m_doubleClickBehavior(new QComboBox)
, m_mouseWheelBehavior(new QComboBox) , m_mouseWheelBehavior(new QComboBox)
@ -118,6 +119,7 @@ SettingsDialog::SettingsDialog(QWidget *parent)
} }
settingsForm->addRow(tr("Stay on top when start-up"), m_stayOnTop); settingsForm->addRow(tr("Stay on top when start-up"), m_stayOnTop);
settingsForm->addRow(tr("Use built-in close window animation"), m_useBuiltInCloseAnimation);
settingsForm->addRow(tr("Use light-color checkerboard"), m_useLightCheckerboard); settingsForm->addRow(tr("Use light-color checkerboard"), m_useLightCheckerboard);
settingsForm->addRow(tr("Double-click behavior"), m_doubleClickBehavior); settingsForm->addRow(tr("Double-click behavior"), m_doubleClickBehavior);
settingsForm->addRow(tr("Mouse wheel behavior"), m_mouseWheelBehavior); settingsForm->addRow(tr("Mouse wheel behavior"), m_mouseWheelBehavior);
@ -125,6 +127,7 @@ SettingsDialog::SettingsDialog(QWidget *parent)
settingsForm->addRow(tr("HiDPI scale factor rounding policy"), m_hiDpiRoundingPolicyBehavior); settingsForm->addRow(tr("HiDPI scale factor rounding policy"), m_hiDpiRoundingPolicyBehavior);
m_stayOnTop->setChecked(Settings::instance()->stayOnTop()); m_stayOnTop->setChecked(Settings::instance()->stayOnTop());
m_useBuiltInCloseAnimation->setChecked(Settings::instance()->useBuiltInCloseAnimation());
m_useLightCheckerboard->setChecked(Settings::instance()->useLightCheckerboard()); m_useLightCheckerboard->setChecked(Settings::instance()->useLightCheckerboard());
m_doubleClickBehavior->setModel(new QStringListModel(dcbDropDown)); m_doubleClickBehavior->setModel(new QStringListModel(dcbDropDown));
Settings::DoubleClickBehavior dcb = Settings::instance()->doubleClickBehavior(); Settings::DoubleClickBehavior dcb = Settings::instance()->doubleClickBehavior();
@ -148,6 +151,10 @@ SettingsDialog::SettingsDialog(QWidget *parent)
Settings::instance()->setStayOnTop(state == Qt::Checked); Settings::instance()->setStayOnTop(state == Qt::Checked);
}); });
connect(m_useBuiltInCloseAnimation, &QCheckBox::stateChanged, this, [ = ](int state){
Settings::instance()->setUseBuiltInCloseAnimation(state == Qt::Checked);
});
connect(m_useLightCheckerboard, &QCheckBox::stateChanged, this, [ = ](int state){ connect(m_useLightCheckerboard, &QCheckBox::stateChanged, this, [ = ](int state){
Settings::instance()->setUseLightCheckerboard(state == Qt::Checked); Settings::instance()->setUseLightCheckerboard(state == Qt::Checked);
}); });

View File

@ -23,6 +23,7 @@ public slots:
private: private:
QCheckBox * m_stayOnTop = nullptr; QCheckBox * m_stayOnTop = nullptr;
QCheckBox * m_useBuiltInCloseAnimation = nullptr;
QCheckBox * m_useLightCheckerboard = nullptr; QCheckBox * m_useLightCheckerboard = nullptr;
QComboBox * m_doubleClickBehavior = nullptr; QComboBox * m_doubleClickBehavior = nullptr;
QComboBox * m_mouseWheelBehavior = nullptr; QComboBox * m_mouseWheelBehavior = nullptr;