diff --git a/qrenderdoc/Code/Interface/PersistantConfig.cpp b/qrenderdoc/Code/Interface/PersistantConfig.cpp index e70dfcafb..897d3efd1 100644 --- a/qrenderdoc/Code/Interface/PersistantConfig.cpp +++ b/qrenderdoc/Code/Interface/PersistantConfig.cpp @@ -255,7 +255,9 @@ bool PersistantConfig::SetStyle() { if(UIStyle == rdcstr(StyleData::availStyles[i].styleID)) { - QApplication::setStyle(StyleData::availStyles[i].creator()); + QStyle *style = StyleData::availStyles[i].creator(); + Formatter::setPalette(style->standardPalette()); + QApplication::setStyle(style); return true; } } diff --git a/qrenderdoc/Code/QRDUtils.cpp b/qrenderdoc/Code/QRDUtils.cpp index 1470b3cfb..31ce25ffd 100644 --- a/qrenderdoc/Code/QRDUtils.cpp +++ b/qrenderdoc/Code/QRDUtils.cpp @@ -1142,7 +1142,12 @@ void Formatter::setParams(const PersistantConfig &config) *m_Font = config.Font_PreferMonospaced ? QFontDatabase::systemFont(QFontDatabase::FixedFont) : QFont(); - m_DarkChecker = QApplication::palette().color(QPalette::Mid); + Formatter::setPalette(QApplication::palette()); +} + +void Formatter::setPalette(QPalette palette) +{ + m_DarkChecker = palette.color(QPalette::Mid); m_LightChecker = m_DarkChecker.lighter(150); RENDERDOC_SetColors(m_DarkChecker, m_LightChecker, IsDarkTheme()); diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index 0ee16a105..f3c389a81 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -162,6 +162,7 @@ void RegisterMetatypeConversions(); struct Formatter { static void setParams(const PersistantConfig &config); + static void setPalette(QPalette palette); static void shutdown(); static QString Format(double f, bool hex = false); diff --git a/qrenderdoc/Styles/RDStyle/RDStyle.cpp b/qrenderdoc/Styles/RDStyle/RDStyle.cpp index bad3e9a75..8b2b4c200 100644 --- a/qrenderdoc/Styles/RDStyle/RDStyle.cpp +++ b/qrenderdoc/Styles/RDStyle/RDStyle.cpp @@ -152,7 +152,7 @@ RDStyle::~RDStyle() { } -void RDStyle::polish(QPalette &pal) +void RDStyle::polishPalette(QPalette &pal) const { int h = 0, s = 0, v = 0; @@ -274,6 +274,15 @@ void RDStyle::unpolish(QWidget *widget) tabwidget->removeEventFilter(this); } +QPalette RDStyle::standardPalette() const +{ + QPalette ret = RDTweakedNativeStyle::standardPalette(); + + polishPalette(ret); + + return ret; +} + bool RDStyle::eventFilter(QObject *watched, QEvent *event) { QTabWidget *tabwidget = qobject_cast(watched); diff --git a/qrenderdoc/Styles/RDStyle/RDStyle.h b/qrenderdoc/Styles/RDStyle/RDStyle.h index 9f6a330a6..36e91815b 100644 --- a/qrenderdoc/Styles/RDStyle/RDStyle.h +++ b/qrenderdoc/Styles/RDStyle/RDStyle.h @@ -64,10 +64,11 @@ public: RDStyle(ColorScheme scheme); ~RDStyle(); - void polish(QPalette &pal) override; + void polish(QPalette &pal) override { polishPalette(pal); } void polish(QWidget *widget) override; void unpolish(QWidget *widget) override; + QPalette standardPalette() const override; QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget = Q_NULLPTR) const override; QRect subElementRect(SubElement element, const QStyleOption *option, @@ -92,6 +93,8 @@ protected: QBitmap m_PartialCheckPattern; + void polishPalette(QPalette &pal) const; + bool eventFilter(QObject *watched, QEvent *event) override; const QBrush &outlineBrush(const QPalette &pal) const; diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index e0bcbba8a..497a6c624 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -2793,7 +2793,11 @@ void BufferViewer::Reset() &BufferViewer::render_keyRelease); QObject::connect(ui->render, &CustomPaintWidget::mouseWheel, this, &BufferViewer::render_mouseWheel); + updateCheckerboardColours(); +} +void BufferViewer::updateCheckerboardColours() +{ ui->render->setColours(Formatter::DarkCheckerColor(), Formatter::LightCheckerColor()); } @@ -3253,6 +3257,15 @@ void BufferViewer::debugVertex() }); } +void BufferViewer::changeEvent(QEvent *event) +{ + if(event->type() == QEvent::PaletteChange || event->type() == QEvent::StyleChange) + { + updateCheckerboardColours(); + ui->render->update(); + } +} + void BufferViewer::SyncViews(RDTableView *primary, bool selection, bool scroll) { if(!ui->syncViews->isChecked()) diff --git a/qrenderdoc/Windows/BufferViewer.h b/qrenderdoc/Windows/BufferViewer.h index 04911d201..b16673aa5 100644 --- a/qrenderdoc/Windows/BufferViewer.h +++ b/qrenderdoc/Windows/BufferViewer.h @@ -127,6 +127,9 @@ private slots: void exportData(const BufferExport ¶ms); void debugVertex(); +protected: + void changeEvent(QEvent *event) override; + private: Ui::BufferViewer *ui; ICaptureContext &m_Ctx; @@ -242,6 +245,9 @@ private: void meshHeaderMenu(MeshDataStage stage, const QPoint &pos); void Reset(); + + void updateCheckerboardColours(); + void ClearModels(); void guessPositionColumn(BufferItemModel *model); diff --git a/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp b/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp index 72af3fa3c..161b306c7 100644 --- a/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp @@ -756,8 +756,6 @@ void SettingsDialog::on_UIStyle_currentIndexChanged(int index) if(ret == QMessageBox::Yes) { m_Ctx.Config().SetStyle(); - - m_Ctx.Config().SetupFormatting(); } m_Ctx.Config().Save(); diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index 17c03177e..f967aaf7d 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -672,6 +672,15 @@ void TextureViewer::showEvent(QShowEvent *event) HighlightUsage(); } +void TextureViewer::changeEvent(QEvent *event) +{ + if(event->type() == QEvent::PaletteChange || event->type() == QEvent::StyleChange) + { + updateBackgroundColors(); + ui->render->update(); + } +} + void TextureViewer::HighlightUsage() { TextureDescription *texptr = GetCurrentTexture(); diff --git a/qrenderdoc/Windows/TextureViewer.h b/qrenderdoc/Windows/TextureViewer.h index 38d30181c..93ab74ecb 100644 --- a/qrenderdoc/Windows/TextureViewer.h +++ b/qrenderdoc/Windows/TextureViewer.h @@ -209,6 +209,7 @@ private slots: protected: void enterEvent(QEvent *event) override; void showEvent(QShowEvent *event) override; + void changeEvent(QEvent *event) override; private: void RT_FetchCurrentPixel(uint32_t x, uint32_t y, PixelValue &pickValue, PixelValue &realValue);