mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 02:49:46 +00:00
Fix dark/light mode setting and run-time switch with Qt 6.8
The old method doesn't work any longer. This one is also announced to work cross OSes -- verification on Mac and Win is needed!
This commit is contained in:
parent
5ec247a957
commit
4560cfd012
@ -124,10 +124,9 @@ bool ColorCache::isSystem(ColorCode const color) const
|
|||||||
|
|
||||||
bool ColorCache::isDarkMode() const
|
bool ColorCache::isDarkMode() const
|
||||||
{
|
{
|
||||||
QPalette palette = QPalette();
|
QColor text_color = pal_.color(QPalette::Active, QPalette::WindowText);
|
||||||
QColor text_color = palette.color(QPalette::Active, QPalette::WindowText);
|
QColor bg_color = pal_.color(QPalette::Active, QPalette::Window);
|
||||||
QColor bg_color = palette.color(QPalette::Active, QPalette::Window);
|
|
||||||
|
|
||||||
return (text_color.black() < bg_color.black());
|
return (text_color.black() < bg_color.black());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -639,17 +639,14 @@ IconInfo iconInfo(FuncRequest const & f, bool unknown, bool rtl)
|
|||||||
|
|
||||||
QPixmap prepareForDarkMode(QPixmap pixmap)
|
QPixmap prepareForDarkMode(QPixmap pixmap)
|
||||||
{
|
{
|
||||||
QPalette palette = QPalette();
|
|
||||||
QColor text_color = palette.color(QPalette::Active, QPalette::WindowText);
|
|
||||||
QColor bg_color = palette.color(QPalette::Active, QPalette::Window);
|
|
||||||
|
|
||||||
// guess whether we are in dark mode
|
// guess whether we are in dark mode
|
||||||
if (text_color.black() > bg_color.black())
|
if (!theGuiApp()->isInDarkMode())
|
||||||
// not in dark mode, do nothing
|
// not in dark mode, do nothing
|
||||||
return pixmap;
|
return pixmap;
|
||||||
|
|
||||||
// create a layer with black text turned to QPalette::WindowText
|
// create a layer with black text turned to QPalette::WindowText
|
||||||
QPixmap black_overlay(pixmap.size());
|
QPixmap black_overlay(pixmap.size());
|
||||||
|
QColor text_color = theGuiApp()->style()->standardPalette().color(QPalette::Active, QPalette::WindowText);
|
||||||
black_overlay.fill(text_color);
|
black_overlay.fill(text_color);
|
||||||
black_overlay.setMask(pixmap.createMaskFromColor(Qt::black, Qt::MaskOutColor));
|
black_overlay.setMask(pixmap.createMaskFromColor(Qt::black, Qt::MaskOutColor));
|
||||||
|
|
||||||
|
@ -659,7 +659,6 @@ GuiView::GuiView(int id)
|
|||||||
|
|
||||||
stat_counts_ = new GuiClickableLabel(statusBar());
|
stat_counts_ = new GuiClickableLabel(statusBar());
|
||||||
stat_counts_->setAlignment(Qt::AlignCenter);
|
stat_counts_->setAlignment(Qt::AlignCenter);
|
||||||
stat_counts_->setStyleSheet("padding-left: 5px; padding-right: 5px;");
|
|
||||||
stat_counts_->hide();
|
stat_counts_->hide();
|
||||||
statusBar()->addPermanentWidget(stat_counts_);
|
statusBar()->addPermanentWidget(stat_counts_);
|
||||||
|
|
||||||
@ -1509,7 +1508,9 @@ void GuiView::showStats()
|
|||||||
else
|
else
|
||||||
stats << toqstr(bformat(_("%1$d Characters (no Blanks)"), chars));
|
stats << toqstr(bformat(_("%1$d Characters (no Blanks)"), chars));
|
||||||
}
|
}
|
||||||
stat_counts_->setText(stats.join(qt_(", [[stats separator]]")));
|
// we need to add space before and after manually, using stylesheet
|
||||||
|
// would break with dark mode on Qt >= 6.8.
|
||||||
|
stat_counts_->setText(" " + stats.join(qt_(", [[stats separator]]")) + " ");
|
||||||
stat_counts_->show();
|
stat_counts_->show();
|
||||||
|
|
||||||
d.time_to_update = d.default_stats_rate;
|
d.time_to_update = d.default_stats_rate;
|
||||||
@ -1793,7 +1794,17 @@ bool GuiView::event(QEvent * e)
|
|||||||
return QMainWindow::event(e);
|
return QMainWindow::event(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// dark/light mode runtime switch support, OS-dependent.
|
// dark/light mode runtime switch support
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
|
||||||
|
case QEvent::ThemeChange: {
|
||||||
|
guiApp->setPalette(guiApp->style()->standardPalette());
|
||||||
|
// We need to update metrics here to avoid a crash (#12786)
|
||||||
|
theBufferList().changed(true);
|
||||||
|
refillToolbars();
|
||||||
|
return QMainWindow::event(e);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// Pre 6.8: OS-dependent
|
||||||
// 1. Mac OS X
|
// 1. Mac OS X
|
||||||
// Limit to Q_OS_MAC as this unnecessarily would also
|
// Limit to Q_OS_MAC as this unnecessarily would also
|
||||||
// trigger on Linux with grave performance issues
|
// trigger on Linux with grave performance issues
|
||||||
@ -1811,6 +1822,7 @@ bool GuiView::event(QEvent * e)
|
|||||||
theBufferList().changed(true);
|
theBufferList().changed(true);
|
||||||
return QMainWindow::event(e);
|
return QMainWindow::event(e);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return QMainWindow::event(e);
|
return QMainWindow::event(e);
|
||||||
|
Loading…
Reference in New Issue
Block a user