From 954bae725e98525a601c3e4e46f9a5294b5bd961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Br=C3=A6strup=20Sayoc?= Date: Mon, 28 Oct 2024 16:48:47 +0100 Subject: [PATCH] [Gui] Make styles update on paint (#17376) * [Gui] Make styles update on paint Fixes #15756. Similar implementation to that already in FileCardDelegate.cpp * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../FreeCAD Classic/FreeCAD Classic.cfg | 1 - .../FreeCAD Dark/FreeCAD Dark.cfg | 1 - .../FreeCAD Light/FreeCAD Light.cfg | 1 - src/Mod/Start/Gui/FileCardDelegate.cpp | 50 ++++++++++--------- src/Mod/Start/Gui/StartView.cpp | 23 ++++----- src/Mod/Start/Gui/StartView.h | 2 + 6 files changed, 40 insertions(+), 38 deletions(-) diff --git a/src/Gui/PreferencePacks/FreeCAD Classic/FreeCAD Classic.cfg b/src/Gui/PreferencePacks/FreeCAD Classic/FreeCAD Classic.cfg index 80ef3b41b3..e05cfdfba9 100644 --- a/src/Gui/PreferencePacks/FreeCAD Classic/FreeCAD Classic.cfg +++ b/src/Gui/PreferencePacks/FreeCAD Classic/FreeCAD Classic.cfg @@ -80,7 +80,6 @@ - diff --git a/src/Gui/PreferencePacks/FreeCAD Dark/FreeCAD Dark.cfg b/src/Gui/PreferencePacks/FreeCAD Dark/FreeCAD Dark.cfg index 4170a55eb5..20382651e8 100644 --- a/src/Gui/PreferencePacks/FreeCAD Dark/FreeCAD Dark.cfg +++ b/src/Gui/PreferencePacks/FreeCAD Dark/FreeCAD Dark.cfg @@ -92,7 +92,6 @@ - diff --git a/src/Gui/PreferencePacks/FreeCAD Light/FreeCAD Light.cfg b/src/Gui/PreferencePacks/FreeCAD Light/FreeCAD Light.cfg index 3c1ff678c6..6e7f9755a6 100644 --- a/src/Gui/PreferencePacks/FreeCAD Light/FreeCAD Light.cfg +++ b/src/Gui/PreferencePacks/FreeCAD Light/FreeCAD Light.cfg @@ -10,7 +10,6 @@ - diff --git a/src/Mod/Start/Gui/FileCardDelegate.cpp b/src/Mod/Start/Gui/FileCardDelegate.cpp index 9a7a2cc5a4..35346ed13a 100644 --- a/src/Mod/Start/Gui/FileCardDelegate.cpp +++ b/src/Mod/Start/Gui/FileCardDelegate.cpp @@ -112,46 +112,50 @@ void FileCardDelegate::paint(QPainter* painter, thumbnail->setFixedSize(thumbnailSize, thumbnailSize); thumbnail->setSizePolicy(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Fixed); + QString style = QStringLiteral(""); + _widget->setProperty("state", QStringLiteral("")); if (option.state & QStyle::State_Selected) { _widget->setProperty("state", QStringLiteral("pressed")); if (qApp->styleSheet().isEmpty()) { QColor color = getSelectionColor(); - _widget->setStyleSheet(QString::fromLatin1("QWidget#thumbnailWidget {" - " border: 2px solid rgb(%1, %2, %3);" - " border-radius: 4px;" - " padding: 2px;" - "}") - .arg(color.red()) - .arg(color.green()) - .arg(color.blue())); + style = QString::fromLatin1("QWidget#thumbnailWidget {" + " border: 2px solid rgb(%1, %2, %3);" + " border-radius: 4px;" + " padding: 2px;" + "}") + .arg(color.red()) + .arg(color.green()) + .arg(color.blue()); } } else if (option.state & QStyle::State_MouseOver) { _widget->setProperty("state", QStringLiteral("hovered")); if (qApp->styleSheet().isEmpty()) { QColor color = getBorderColor(); - _widget->setStyleSheet(QString::fromLatin1("QWidget#thumbnailWidget {" - " border: 2px solid rgb(%1, %2, %3);" - " border-radius: 4px;" - " padding: 2px;" - "}") - .arg(color.red()) - .arg(color.green()) - .arg(color.blue())); + style = QString::fromLatin1("QWidget#thumbnailWidget {" + " border: 2px solid rgb(%1, %2, %3);" + " border-radius: 4px;" + " padding: 2px;" + "}") + .arg(color.red()) + .arg(color.green()) + .arg(color.blue()); } } else if (qApp->styleSheet().isEmpty()) { QColor color = getBackgroundColor(); - _widget->setStyleSheet(QString::fromLatin1("QWidget#thumbnailWidget {" - " background-color: rgb(%1, %2, %3);" - " border-radius: 8px;" - "}") - .arg(color.red()) - .arg(color.green()) - .arg(color.blue())); + style = QString::fromLatin1("QWidget#thumbnailWidget {" + " background-color: rgb(%1, %2, %3);" + " border-radius: 8px;" + "}") + .arg(color.red()) + .arg(color.green()) + .arg(color.blue()); } + _widget->setStyleSheet(style); + auto elided = painter->fontMetrics().elidedText(baseName, Qt::TextElideMode::ElideRight, cardWidth); auto name = std::make_unique(elided); diff --git a/src/Mod/Start/Gui/StartView.cpp b/src/Mod/Start/Gui/StartView.cpp index 67d69414cc..56df595f80 100644 --- a/src/Mod/Start/Gui/StartView.cpp +++ b/src/Mod/Start/Gui/StartView.cpp @@ -230,18 +230,6 @@ void StartView::configureNewFileButtons(QLayout* layout) const tr("Create an architectural project"), QLatin1String(":/icons/BIMWorkbench.svg")}); - auto hGrp = App::GetApplication().GetParameterGroupByPath( - "User parameter:BaseApp/Preferences/Mod/Start"); - if (hGrp->GetBool("FileCardUseStyleSheet", true)) { - QString style = fileCardStyle(); - newEmptyFile->setStyleSheet(style); - openFile->setStyleSheet(style); - partDesign->setStyleSheet(style); - assembly->setStyleSheet(style); - draft->setStyleSheet(style); - arch->setStyleSheet(style); - } - // TODO: Ensure all of the required WBs are actually available layout->addWidget(partDesign); layout->addWidget(assembly); @@ -258,6 +246,17 @@ void StartView::configureNewFileButtons(QLayout* layout) const connect(arch, &QPushButton::clicked, this, &StartView::newArchFile); } +void StartView::paintEvent(QPaintEvent* event) +{ + QString style = QStringLiteral(""); + if (qApp->styleSheet().isEmpty()) { + style = fileCardStyle(); + } + setStyleSheet(style); + + Gui::MDIView::paintEvent(event); +} + QString StartView::fileCardStyle() const { if (!qApp->styleSheet().isEmpty()) { diff --git a/src/Mod/Start/Gui/StartView.h b/src/Mod/Start/Gui/StartView.h index b9199018d5..9a0df584a2 100644 --- a/src/Mod/Start/Gui/StartView.h +++ b/src/Mod/Start/Gui/StartView.h @@ -96,6 +96,8 @@ protected: QString fileCardStyle() const; + void paintEvent(QPaintEvent* event) override; + private: void retranslateUi();