NOISSUE add hack for system themes. Maybe it works?

This commit is contained in:
Petr Mrázek 2017-01-15 22:56:03 +01:00
parent 71584fb8cc
commit 944ff256b2
10 changed files with 71 additions and 3 deletions

View File

@ -355,7 +355,7 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv)
connect(this, SIGNAL(aboutToQuit()), SLOT(onExit()));
setIconTheme(settings()->get("IconTheme").toString());
//setApplicationTheme(settings()->get("ApplicationTheme").toString());
setApplicationTheme(settings()->get("ApplicationTheme").toString());
initAnalytics();
@ -876,9 +876,19 @@ void MultiMC::setApplicationTheme(const QString& name)
{
auto & theme = (*themeIter).second;
setStyle(QStyleFactory::create(theme->qtTheme()));
setPalette(theme->colorScheme());
if(theme->hasColorScheme())
{
setPalette(theme->colorScheme());
}
if(theme->hasStyleSheet())
{
setStyleSheet(theme->appStyleSheet());
}
else
{
setStyleSheet(QString());
}
QDir::setSearchPaths("theme", theme->searchPaths());
setStyleSheet(theme->appStyleSheet());
}
else
{

View File

@ -10,6 +10,11 @@ QString BrightTheme::name()
return QObject::tr("Bright");
}
bool BrightTheme::hasColorScheme()
{
return true;
}
QPalette BrightTheme::colorScheme()
{
QPalette brightPalette;
@ -39,6 +44,11 @@ QColor BrightTheme::fadeColor()
return QColor(239,240,241);
}
bool BrightTheme::hasStyleSheet()
{
return false;
}
QString BrightTheme::appStyleSheet()
{
return QString();

View File

@ -9,7 +9,9 @@ public:
QString id() override;
QString name() override;
bool hasStyleSheet() override;
QString appStyleSheet() override;
bool hasColorScheme() override;
QPalette colorScheme() override;
double fadeAmount() override;
QColor fadeColor() override;

View File

@ -208,11 +208,21 @@ QString CustomTheme::name()
return m_name;
}
bool CustomTheme::hasColorScheme()
{
return true;
}
QPalette CustomTheme::colorScheme()
{
return m_palette;
}
bool CustomTheme::hasStyleSheet()
{
return true;
}
QString CustomTheme::appStyleSheet()
{
return m_styleSheet;

View File

@ -10,7 +10,9 @@ public:
QString id() override;
QString name() override;
bool hasStyleSheet() override;
QString appStyleSheet() override;
bool hasColorScheme() override;
QPalette colorScheme() override;
double fadeAmount() override;
QColor fadeColor() override;

View File

@ -10,6 +10,11 @@ QString DarkTheme::name()
return QObject::tr("Dark");
}
bool DarkTheme::hasColorScheme()
{
return true;
}
QPalette DarkTheme::colorScheme()
{
QPalette darkPalette;
@ -39,6 +44,11 @@ QColor DarkTheme::fadeColor()
return QColor(49,54,59);
}
bool DarkTheme::hasStyleSheet()
{
return true;
}
QString DarkTheme::appStyleSheet()
{
return "QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }";

View File

@ -9,7 +9,9 @@ public:
QString id() override;
QString name() override;
bool hasStyleSheet() override;
QString appStyleSheet() override;
bool hasColorScheme() override;
QPalette colorScheme() override;
double fadeAmount() override;
QColor fadeColor() override;

View File

@ -2,14 +2,18 @@
#include <QString>
#include <QPalette>
class QStyle;
class ITheme
{
public:
virtual ~ITheme() {}
virtual QString id() = 0;
virtual QString name() = 0;
virtual bool hasStyleSheet() = 0;
virtual QString appStyleSheet() = 0;
virtual QString qtTheme() = 0;
virtual bool hasColorScheme() = 0;
virtual QPalette colorScheme() = 0;
virtual QColor fadeColor() = 0;
virtual double fadeAmount() = 0;

View File

@ -21,6 +21,7 @@ SystemTheme::SystemTheme()
}
// fall back to fusion if we can't find the current theme.
systemTheme = "Fusion";
qWarning() << "System theme not found, defaulted to Fusion";
}
QString SystemTheme::id()
@ -57,3 +58,18 @@ QColor SystemTheme::fadeColor()
{
return QColor(128,128,128);
}
bool SystemTheme::hasStyleSheet()
{
return false;
}
bool SystemTheme::hasColorScheme()
{
// FIXME: horrible hack to work around Qt's sketchy theming APIs
#if defined(Q_OS_LINUX)
return true;
#else
return false;
#endif
}

View File

@ -11,7 +11,9 @@ public:
QString id() override;
QString name() override;
QString qtTheme() override;
bool hasStyleSheet() override;
QString appStyleSheet() override;
bool hasColorScheme() override;
QPalette colorScheme() override;
double fadeAmount() override;
QColor fadeColor() override;