/** * @RDE_HEADER@ * RDE Dark Style Plugin * $Id$ * $HeadURL$ * $Author$ * * Created by Mike Wille, NLSE, 2018-02-15 */ #include "rme_dark_style.h" #include "../Base/styles_color_scheme.h" #include #include #include #include #include #include #include #include #include #include RmeDarkStyle::RmeDarkStyle() { //loadStyle(); } void RmeDarkStyle::loadStyle(bool highDpi) { Q_INIT_RESOURCE(rme_dark_style); // newer rde colors const QColor RDE_DARK_LIGHT (QRgb(0x1E2530)); const QColor NEW_RDE_LIGHT_BLUE (QRgb(0x1B79A2)); const QColor NEW_RDE_LIGHT_GRAY (QRgb(0x999999)); const QColor NEW_RDE_GRAY (QRgb(0x858A95)); //text const QColor RDE_TEXT (QRgb(0xCCCED3)); //text const QColor RDE_TEXT_DIS (QRgb(0x858A95)); //disbale text // new rde colors const QColor TEST_GRAY (QRgb(0x272e41)); const QColor RDE_WHITE (QRgb(0x323A4E)); //button back etc toll const QColor RDE_BLUE (QRgb(0x013a6f)); const QColor RDE_LIGHT_BLUE (QRgb(0x20609b)); const QColor RDE_LIGHTER_BLUE (QRgb(0x515660)); const QColor RDE_BORDER_BLUE (QRgb(0x43b0e0)); const QColor RDE_DARK_BLUE (QRgb(0x2d4162)); const QColor RDE_GRAY (QRgb(0x171e26)); const QColor RDE_LIGHT_GRAY (QRgb(0x515660)); const QColor RDE_LIGHTER_GRAY (QRgb(0x3F4654)); const QColor RDE_DISABLED_GRAY (QRgb(0x252C3B)); #ifdef Q_OS_WIN const char* font = "Calibri"; int fontSize = 12; #else const char* font = "Noto Sans"; int fontSize = 11; #endif QApplication::setStyle(QStyleFactory::create(QStringLiteral("Fusion"))); int splitterHandleSize = 10; // desktop if (QApplication::desktop()->logicalDpiX() > 999) // TODO: which DPI ? { splitterHandleSize = 25; // tablet } QPalette p(QGuiApplication::palette()); p.setColor( QPalette::Base, RDE_DARK_LIGHT); p.setColor( QPalette::Button, TEST_GRAY); p.setColor( QPalette::Highlight, RDE_BLUE); p.setColor(QPalette::Inactive, QPalette::Highlight, RDE_BLUE); p.setColor( QPalette::Text, RDE_TEXT); //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, RDE_TEXT); p.setColor(QPalette::Disabled, QPalette::ButtonText, RDE_TEXT_DIS); p.setColor( QPalette::WindowText, RDE_TEXT); 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_TEXT_DIS); p.setColor(QPalette::Disabled, QPalette::Button, RDE_LIGHT_GRAY); // 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, RDE_WHITE); p.setColor( QPalette::Light, RDE_LIGHT_BLUE); QApplication::setPalette(p); QStringList css; // QPushButton (border, bg, fg) css << QPushButtonColorScheme::get(ColorScheme::normal(), RDE_BORDER_BLUE, RDE_WHITE, RDE_TEXT); //RDE_DARKER_BLUE, RDE_BLUE, RDE_WHITE); TODO: ! css << QPushButtonColorScheme::get(ColorScheme::hover(), RDE_LIGHTER_GRAY, RDE_LIGHT_BLUE, RDE_TEXT); css << QPushButtonColorScheme::get(ColorScheme::pressed(), RDE_BLUE, RDE_WHITE, RDE_BORDER_BLUE); css << QPushButtonColorScheme::get(ColorScheme::checked(), RDE_BLUE, RDE_LIGHTER_BLUE, RDE_TEXT); css << QPushButtonColorScheme::get(ColorScheme::disabled(), RDE_DISABLED_GRAY, RDE_DISABLED_GRAY, RDE_TEXT_DIS); css << QPushButtonColorScheme::get(ColorScheme::disabledChecked(), RDE_LIGHTER_GRAY, RDE_GRAY, RDE_TEXT_DIS); css << QPushButtonColorScheme::get(ColorScheme::disabledDefaulted(), RDE_DISABLED_GRAY, RDE_DISABLED_GRAY, RDE_TEXT_DIS, 3, QStringLiteral("groove")); css << QPushButtonColorScheme::get(ColorScheme::defaulted(), RDE_BORDER_BLUE, RDE_WHITE, RDE_TEXT, 3, QStringLiteral("groove")); css << QPushButtonColorScheme::get(ColorScheme::hoverDefault(), RDE_BORDER_BLUE, RDE_LIGHT_BLUE, RDE_TEXT, 3, QStringLiteral("groove")); //#error hier weiter machen // QToolButton (border, bg, fg) css << QToolButtonDefaultColorScheme::get(ColorScheme::normal(), 1, RDE_DARK_BLUE, RDE_WHITE, RDE_TEXT); css << QToolButtonDefaultColorScheme::get(ColorScheme::hover(), 1, RDE_BLUE, RDE_LIGHT_BLUE, RDE_TEXT); css << QToolButtonDefaultColorScheme::get(ColorScheme::pressed(), 3, RDE_BLUE, RDE_LIGHTER_GRAY, RDE_LIGHT_BLUE); css << QToolButtonDefaultColorScheme::get(ColorScheme::checked(), 2, RDE_BLUE, RDE_LIGHT_GRAY, RDE_TEXT); css << QToolButtonDefaultColorScheme::get(ColorScheme::disabled(), 1, RDE_GRAY, RDE_DISABLED_GRAY, RDE_TEXT_DIS); css << QToolButtonDefaultColorScheme::get(ColorScheme::disabledChecked(), 1, RDE_LIGHTER_GRAY, RDE_GRAY, RDE_TEXT_DIS); css << QToolButtonDefaultColorScheme::get(ColorScheme::defaulted(), 3, RDE_BORDER_BLUE, RDE_WHITE, RDE_TEXT); // 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, RDE_DARK_BLUE, RDE_WHITE, RDE_BLUE); css << QToolButtonIconOnlyColorScheme::get(ColorScheme::hover(), 1, RDE_BLUE, RDE_LIGHTER_GRAY, RDE_BLUE); css << QToolButtonIconOnlyColorScheme::get(ColorScheme::pressed(), 3, RDE_BLUE, RDE_LIGHT_GRAY, RDE_LIGHTER_BLUE); css << QToolButtonIconOnlyColorScheme::get(ColorScheme::checked(), 2, RDE_BLUE, RDE_LIGHTER_GRAY, RDE_BLUE); css << QToolButtonIconOnlyColorScheme::get(ColorScheme::disabled(), 1, RDE_DISABLED_GRAY, RDE_WHITE, RDE_TEXT_DIS); css << QToolButtonIconOnlyColorScheme::get(ColorScheme::disabledChecked(), 1, RDE_LIGHTER_GRAY, RDE_GRAY, RDE_TEXT_DIS); css << QToolButtonIconOnlyColorScheme::get(ColorScheme::defaulted(), 3, RDE_BORDER_BLUE, RDE_WHITE, RDE_TEXT); // QRadioButton (???) TODO: ! // QLineEdit, QTextEdit, QPlainTextEdit (border, bg, fg) css << EditsColorScheme::get(ColorScheme::normal(), 0x76797c, RDE_WHITE, RDE_TEXT); css << EditsColorScheme::get(ColorScheme::disabled(), RDE_DISABLED_GRAY, RDE_LIGHTER_GRAY, RDE_TEXT_DIS); css << SearchLineEditColorScheme::get(ColorScheme::normal(), RDE_WHITE, RDE_TEXT); css << SearchLineEditColorScheme::get(ColorScheme::disabled(), RDE_LIGHTER_GRAY, RDE_TEXT_DIS); // 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); 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()); 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); 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: #323A4E; border-radius: 7px; }"); css << QStringLiteral("QSlider::add-page { background: #3F4654; 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("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(' '))); } void RmeDarkStyle::unloadStyle() { Q_CLEANUP_RESOURCE(rme_dark_style); } RmeDarkStyle::~RmeDarkStyle() { unloadStyle(); }