272 lines
14 KiB
C++
Executable File
272 lines
14 KiB
C++
Executable File
/**
|
||
* @RDE_HEADER@
|
||
* RDE Light Style Plugin
|
||
* $Id$
|
||
* $HeadURL$
|
||
* $Author$
|
||
*/
|
||
|
||
#include "rme_light_style.h"
|
||
#include "../Base/styles_color_scheme.h"
|
||
|
||
#include <TabBarTabStyle/tab_bar_tab_style.h>
|
||
|
||
#include <QApplication>
|
||
#include <QDebug>
|
||
#include <QDesktopWidget>
|
||
#include <QFont>
|
||
#include <QPalette>
|
||
#include <QRgb>
|
||
#include <QString>
|
||
#include <QStyle>
|
||
#include <QStyleFactory>
|
||
|
||
|
||
// use 'rdeColorName.name()' => result: '#FFFFFFFF'
|
||
|
||
|
||
RmeLightStyle::RmeLightStyle()
|
||
{
|
||
//loadStyle();
|
||
}
|
||
|
||
|
||
void RmeLightStyle::loadStyle(bool highDpi)
|
||
{
|
||
Q_INIT_RESOURCE(rme_light_style);
|
||
|
||
// newer rde colors
|
||
const QColor NEW_RDE_LIGHT_BLUE (QRgb(0x43b0e0));
|
||
const QColor NEW_RDE_LIGHT_GRAY (QRgb(0x999999));
|
||
const QColor NEW_RDE_GRAY (QRgb(0x3e3d40));
|
||
const QColor NEW_RDE_BLUE (QRgb(0x2681cc));
|
||
|
||
// new rde colors
|
||
const QColor RDE_BLUE (QRgb(0x013a6f));
|
||
const QColor RDE_LIGHT_BLUE (QRgb(0x20609b));
|
||
const QColor RDE_LIGHTER_BLUE (QRgb(0x7f9db7));
|
||
|
||
const QColor RDE_DARK_BLUE (QRgb(0x2d4162));
|
||
const QColor RDE_DARKER_BLUE (QRgb(0x637380));
|
||
|
||
const QColor RDE_WHITE (QRgb(0xf9f9fb));
|
||
|
||
const QColor RDE_GRAY (QRgb(0xaebac6));
|
||
const QColor RDE_LIGHT_GRAY (QRgb(0xd1d7dd));
|
||
const QColor RDE_LIGHTER_GRAY (QRgb(0xf3f3f3));
|
||
|
||
|
||
const QColor TEST_GRAY (QRgb(0xfcfcfc));
|
||
|
||
|
||
#ifdef Q_OS_WIN
|
||
const char* font = "Calibri";
|
||
int fontSize = 12;
|
||
#else
|
||
const char* font = "Noto Sans";
|
||
int fontSize = 11;
|
||
#endif
|
||
|
||
//qWarning() << "available styles:" << QStyleFactory::keys();
|
||
QApplication::setStyle(QStyleFactory::create(QStringLiteral("Fusion")));
|
||
|
||
int splitterHandleSize = 10; // desktop
|
||
|
||
qDebug() << "RDELightStyle: dpi" << QApplication::desktop()->logicalDpiX();
|
||
|
||
if (QApplication::desktop()->logicalDpiX() > 999) // TODO: which DPI ?
|
||
{
|
||
splitterHandleSize = 25; // tablet
|
||
}
|
||
|
||
|
||
QPalette p(QGuiApplication::palette());
|
||
p.setColor( QPalette::Base, Qt::white);
|
||
p.setColor( QPalette::Button, TEST_GRAY);
|
||
p.setColor( QPalette::Highlight, NEW_RDE_BLUE);
|
||
p.setColor(QPalette::Inactive, QPalette::Highlight, RDE_BLUE);
|
||
p.setColor( QPalette::Text, NEW_RDE_GRAY);
|
||
//p.setColor(QPalette::Inactive, QPalette::Text, RDE_DARKER_BLUE); Not needed
|
||
//p.setColor( QPalette::ToolTipBase, QColor(QRgb(0x171e26)));
|
||
p.setColor( QPalette::Window, TEST_GRAY);
|
||
p.setColor( QPalette::Shadow, RDE_GRAY);
|
||
p.setColor( QPalette::ButtonText, NEW_RDE_GRAY);
|
||
p.setColor(QPalette::Disabled, QPalette::ButtonText, RDE_DARKER_BLUE);
|
||
p.setColor( QPalette::WindowText, NEW_RDE_GRAY);
|
||
p.setColor( QPalette::ToolTipBase, TEST_GRAY);
|
||
p.setColor( QPalette::ToolTipText, NEW_RDE_GRAY);
|
||
p.setColor( QPalette::AlternateBase, RDE_LIGHTER_GRAY);
|
||
p.setColor( QPalette::NoRole, Qt::magenta);
|
||
p.setColor(QPalette::Disabled, QPalette::Base, RDE_LIGHT_GRAY);
|
||
p.setColor(QPalette::Disabled, QPalette::Window, RDE_LIGHTER_GRAY);
|
||
p.setColor(QPalette::Disabled, QPalette::WindowText, RDE_GRAY);
|
||
p.setColor(QPalette::Disabled, QPalette::Button, Qt::white); // wenn im Style kein Farbverlauf ist koennte das sonst auch wieder flach wirken
|
||
//p.setColor( QPalette::BrightText, Qt::yellow);
|
||
p.setColor( QPalette::HighlightedText, QColor(Qt::white));//QRgb(0x80868f)));
|
||
p.setColor( QPalette::Link, QColor(QRgb(0x39de32)));
|
||
p.setColor( QPalette::LinkVisited, QColor(QRgb(0x39de32)));
|
||
p.setColor( QPalette::Dark, NEW_RDE_BLUE);
|
||
p.setColor( QPalette::Light, RDE_LIGHT_BLUE);
|
||
|
||
QApplication::setPalette(p);
|
||
|
||
QStringList css;
|
||
|
||
// QPushButton (border, bg, fg)
|
||
css << QPushButtonColorScheme::get(ColorScheme::normal(), 0x43b0e0, RDE_LIGHTER_GRAY, 0x31363b); //RDE_DARKER_BLUE, RDE_BLUE, RDE_WHITE); TODO: !
|
||
css << QPushButtonColorScheme::get(ColorScheme::hover(), RDE_LIGHT_GRAY, RDE_LIGHT_BLUE, RDE_WHITE);
|
||
css << QPushButtonColorScheme::get(ColorScheme::pressed(), RDE_BLUE, RDE_WHITE, RDE_BLUE);
|
||
css << QPushButtonColorScheme::get(ColorScheme::checked(), RDE_BLUE, RDE_LIGHTER_BLUE, RDE_WHITE);
|
||
css << QPushButtonColorScheme::get(ColorScheme::disabled(), RDE_LIGHT_GRAY, RDE_LIGHTER_GRAY, RDE_GRAY);
|
||
css << QPushButtonColorScheme::get(ColorScheme::disabledChecked(), RDE_GRAY, RDE_GRAY, RDE_WHITE);
|
||
css << QPushButtonColorScheme::get(ColorScheme::disabledDefaulted(), RDE_LIGHT_GRAY, RDE_LIGHTER_GRAY, RDE_GRAY, 3, QStringLiteral("groove"));
|
||
css << QPushButtonColorScheme::get(ColorScheme::defaulted(), 0x43b0e0, RDE_LIGHTER_GRAY, 0x31363b, 3, QStringLiteral("groove"));
|
||
css << QPushButtonColorScheme::get(ColorScheme::hoverDefault(), 0x43b0e0, RDE_LIGHT_BLUE, RDE_WHITE, 3, QStringLiteral("groove"));
|
||
|
||
|
||
// QToolButton (border, bg, fg)
|
||
css << QToolButtonDefaultColorScheme::get(ColorScheme::normal(), 1.2, RDE_DARK_BLUE, RDE_WHITE, RDE_BLUE);
|
||
css << QToolButtonDefaultColorScheme::get(ColorScheme::hover(), 1.2, RDE_BLUE, RDE_LIGHT_GRAY, RDE_BLUE);
|
||
css << QToolButtonDefaultColorScheme::get(ColorScheme::pressed(), 3, RDE_BLUE, RDE_LIGHT_GRAY, RDE_BLUE);
|
||
css << QToolButtonDefaultColorScheme::get(ColorScheme::checked(), 2, RDE_BLUE, NEW_RDE_LIGHT_GRAY, RDE_BLUE);
|
||
css << QToolButtonDefaultColorScheme::get(ColorScheme::disabled(), 1.2, RDE_LIGHT_GRAY, RDE_WHITE, RDE_DARKER_BLUE);
|
||
css << QToolButtonDefaultColorScheme::get(ColorScheme::disabledChecked(), 1.2, RDE_GRAY, RDE_GRAY, RDE_WHITE);
|
||
css << QToolButtonDefaultColorScheme::get(ColorScheme::defaulted(), 3, RDE_DARK_BLUE, RDE_WHITE, RDE_BLUE);
|
||
|
||
// QToolButton (Icon Only) (border size, border, bg, fg)
|
||
// FIXME: possible qt bug on these ones (causing invalid reads, probably caused by "[toolButtonStyle='0']")
|
||
css << QToolButtonIconOnlyColorScheme::get(ColorScheme::normal(), 1.2, RDE_DARK_BLUE, RDE_WHITE, RDE_BLUE);
|
||
css << QToolButtonIconOnlyColorScheme::get(ColorScheme::hover(), 1.2, RDE_BLUE, RDE_LIGHT_GRAY, RDE_BLUE);
|
||
css << QToolButtonIconOnlyColorScheme::get(ColorScheme::pressed(), 3, RDE_BLUE, RDE_LIGHT_GRAY, RDE_BLUE);
|
||
css << QToolButtonIconOnlyColorScheme::get(ColorScheme::checked(), 2, RDE_BLUE, RDE_LIGHT_GRAY, RDE_BLUE);
|
||
css << QToolButtonIconOnlyColorScheme::get(ColorScheme::disabled(), 1.2, RDE_LIGHT_GRAY, RDE_WHITE, RDE_DARKER_BLUE);
|
||
css << QToolButtonIconOnlyColorScheme::get(ColorScheme::disabledChecked(), 1.2, RDE_GRAY, RDE_GRAY, RDE_WHITE);
|
||
css << QToolButtonIconOnlyColorScheme::get(ColorScheme::defaulted(), 3, RDE_DARK_BLUE, RDE_WHITE, RDE_BLUE);
|
||
|
||
// QRadioButton (???) TODO: !
|
||
|
||
// QLineEdit, QTextEdit, QPlainTextEdit (border, bg, fg)
|
||
css << EditsColorScheme::get(ColorScheme::normal(), 0x76797c, RDE_WHITE, NEW_RDE_GRAY);
|
||
css << EditsColorScheme::get(ColorScheme::disabled(), RDE_LIGHT_GRAY, RDE_LIGHTER_GRAY, RDE_GRAY);
|
||
css << SearchLineEditColorScheme::get(ColorScheme::normal(), RDE_WHITE, NEW_RDE_GRAY);
|
||
css << SearchLineEditColorScheme::get(ColorScheme::disabled(), RDE_LIGHTER_GRAY, RDE_GRAY);
|
||
|
||
// QScrollBar (bg)
|
||
css << QScrollBarColorScheme::get(ColorScheme::normal(), RDE_LIGHT_GRAY);
|
||
css << QScrollBarColorScheme::get(ColorScheme::disabled(), RDE_LIGHTER_GRAY);
|
||
|
||
// QScrollBarHandle (bg)
|
||
css << QScrollBarHandleColorScheme::get(ColorScheme::normal(), RDE_BLUE);
|
||
css << QScrollBarHandleColorScheme::get(ColorScheme::disabled(), RDE_LIGHT_GRAY);
|
||
|
||
QStyle *style = QApplication::style();
|
||
const int sliderExt = style->pixelMetric(QStyle::PM_SliderThickness);
|
||
// maybe better using images here?
|
||
css << QStringLiteral("QScrollBar:vertical { margin: %1px 0 %1px 0; }").arg(sliderExt);
|
||
css << QStringLiteral("QScrollBar::handle:vertical { min-height: %1px; }").arg(sliderExt / 2);
|
||
css << QStringLiteral("QScrollBar::sub-line:vertical { height: %1px; subcontrol-position: top; subcontrol-origin: margin; }").arg(sliderExt);
|
||
css << QStringLiteral("QScrollBar::add-line:vertical { height: %1px; subcontrol-position: bottom; subcontrol-origin: margin; }").arg(sliderExt);
|
||
|
||
css << QStringLiteral("QScrollBar:horizontal { margin: 0 %1px 0 %1px; }").arg(sliderExt);
|
||
css << QStringLiteral("QScrollBar::handle:horizontal { min-width: %1px; }").arg(sliderExt / 2);
|
||
css << QStringLiteral("QScrollBar::sub-line:horizontal { width: %1px; subcontrol-position: left; subcontrol-origin: margin; }").arg(sliderExt);
|
||
css << QStringLiteral("QScrollBar::add-line:horizontal { width: %1px; subcontrol-position: right; subcontrol-origin: margin; }").arg(sliderExt);
|
||
|
||
// CloseButton (QTabBar)
|
||
|
||
/*/
|
||
* HACK: Qt does not give the possibility to get the StyleSheet-specified color of a TabBar's Tab!
|
||
* I need this color to paint the Close Button the same way the text looks! (Marketing order!)
|
||
* It took me > 1h to dig through the Qt sources to find a way to GET the colors.
|
||
* I found nothing that would be implemented in under 2 hrs.
|
||
* So I will do this super bad but quick hack, and I will not fix that, ever. It works perfectly, though.
|
||
/*/
|
||
|
||
Styles::TabBarTabStyle::primaryNormal = NEW_RDE_LIGHT_BLUE;
|
||
Styles::TabBarTabStyle::primarySelected = RDE_WHITE;
|
||
Styles::TabBarTabStyle::primaryDisabled = RDE_LIGHTER_GRAY;
|
||
|
||
Styles::TabBarTabStyle::secondaryNormal = Qt::black;
|
||
Styles::TabBarTabStyle::secondarySelected = Qt::black;
|
||
Styles::TabBarTabStyle::secondaryDisabled = RDE_WHITE;
|
||
|
||
// QTabWidget (bg)
|
||
css << QTabBarColorScheme::get(ColorScheme::normal(), RDE_BLUE);
|
||
css << QTabBarColorScheme::get(ColorScheme::disabled(), RDE_LIGHTER_BLUE);
|
||
|
||
css << QTabBarTabColorScheme::get(ColorScheme::normal(), RDE_BLUE, Styles::TabBarTabStyle::primaryNormal);
|
||
css << QTabBarTabColorScheme::get(ColorScheme::selected(), NEW_RDE_LIGHT_BLUE, Styles::TabBarTabStyle::primarySelected);
|
||
css << QTabBarTabColorScheme::get(ColorScheme::disabled(), RDE_GRAY, Styles::TabBarTabStyle::primaryDisabled);
|
||
|
||
// QTabWidget (Secondary Tab Bar) - with new rde colors ! (bg)
|
||
css << QSecondaryTabBarColorScheme::get(ColorScheme::normal(), NEW_RDE_LIGHT_GRAY);
|
||
css << QSecondaryTabBarColorScheme::get(ColorScheme::disabled(), RDE_WHITE);
|
||
|
||
css << QSecondaryTabBarTabColorScheme::get(ColorScheme::normal(), NEW_RDE_LIGHT_GRAY, Styles::TabBarTabStyle::secondaryNormal);
|
||
css << QSecondaryTabBarTabColorScheme::get(ColorScheme::selected(), RDE_WHITE, Styles::TabBarTabStyle::secondarySelected);
|
||
css << QSecondaryTabBarTabColorScheme::get(ColorScheme::disabled(), Qt::black, Styles::TabBarTabStyle::secondaryDisabled);
|
||
|
||
// QSplitter (bg)
|
||
css << QSplitter::get(ColorScheme::normal(), RDE_LIGHT_GRAY, splitterHandleSize);
|
||
css << QSplitter::get(ColorScheme::disabled(), RDE_WHITE, splitterHandleSize);
|
||
|
||
css << QStringLiteral("ReceiverElement[isChecked=true] { border: 3px solid; border-radius: 3px; border-color: %1; }").arg(RDE_BLUE.name());
|
||
css << QStringLiteral("ReceiverElement[isChecked=false] { border: 1px solid; border-radius: 3px; border-color: %1; }").arg(RDE_GRAY.name());
|
||
|
||
css << QStringLiteral("QGroupBox::title {}"); // showing whole title of group boxes, maybe a bug in Fusion style ?
|
||
|
||
//slider
|
||
|
||
//css << QStringLiteral("QSlider:horizontal {min-height: 62px;} ");
|
||
//css << QStringLiteral("QSlider::groove:horizontal {margin: -8px 0; }"); /* decrease this size (make it more negative)—I changed mine from –2px to –8px. */
|
||
//css << QStringLiteral("QSlider::handle { border: 3px solid black; min-width: 75px; min-height: 75px; margin: -30px 0; }");
|
||
if (highDpi)
|
||
{
|
||
css << QStringLiteral("QSlider {spacing: -2px; min-width: 200px; min-height: 60px;}");
|
||
css << QStringLiteral("QSlider::groove:horizontal { border: 1px solid #999999; height: 25px; margin: 2px 0; border-radius: 7px; }");
|
||
css << QStringLiteral("QSlider::handle:horizontal { background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f); border: 1px solid #5c5c5c; width: 50px; margin: -12px 0; border-radius: 3px; }");
|
||
css << QStringLiteral("QSlider::sub-page { background: #2d4162; border-radius: 7px;}");
|
||
css << QStringLiteral("QSlider::add-page { background: #f3f3f3; border-radius: 7px;}");
|
||
|
||
css << QStringLiteral("QCheckBox::indicator { width: 40px; height: 40px; }");
|
||
css << QStringLiteral("QCheckBox { spacing: 6px; }");
|
||
|
||
css << QStringLiteral("QTableView::indicator { width: 40px; height: 40px; }");
|
||
css << QStringLiteral("QTableView::item { spacing: 6px; height: 40px; }");
|
||
|
||
css << QStringLiteral("QTreeView::indicator { width: 40px; height: 40px; }");
|
||
css << QStringLiteral("QTreeView::item { spacing: 6px; height: 40px; }");
|
||
|
||
css << QStringLiteral("QTabBar::tab:top, QTabBar::tab:bottom { height: 40px; }");
|
||
|
||
css << QStringLiteral("LtsKeyPushButton { min-width : 90px ; min-height = 70;}");
|
||
|
||
css << QStringLiteral("LtsNotificationBox { background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop: 0 rgb(254, 45, 102), stop: 1 rgb(255, 92, 61)); border: 1px solid rgb(254, 45, 102); border-radius: 8px; margin: 14px }");
|
||
|
||
css << QStringLiteral("QRadioButton { min-height: 44px; font: 30px; }");
|
||
css << QStringLiteral("QRadioButton::indicator { width: 40px; height: 40px; }");
|
||
|
||
fontSize = fontSize*1.1;
|
||
}
|
||
|
||
QApplication::setFont(QFont(QLatin1String(font), fontSize));
|
||
|
||
qApp->setStyleSheet(css.join(QLatin1Char(' ')));
|
||
|
||
// qWarning() << "Set Style: Rme Light Style";
|
||
}
|
||
|
||
|
||
void RmeLightStyle::unloadStyle()
|
||
{
|
||
// qWarning() << "RmeLightStyle::unloadStyle";
|
||
Q_CLEANUP_RESOURCE(rme_light_style);
|
||
}
|
||
|
||
|
||
RmeLightStyle::~RmeLightStyle()
|
||
{
|
||
//qWarning() << "~RmeLightStyle";
|
||
Q_CLEANUP_RESOURCE(rme_light_style);
|
||
}
|