Files
qt5-legatus-legacy/Lts/Plugins/Styles/Light/rme_light_style.cpp
T
2026-08-13 18:33:10 +02:00

272 lines
14 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @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);
}