qskinny/designsystems/fusion/QskFusionPalette.cpp
2024-01-25 14:30:41 +01:00

182 lines
5.4 KiB
C++

/******************************************************************************
* QSkinny - Copyright (C) The authors
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#include "QskFusionPalette.h"
#include <QskRgbValue.h>
#if 0
extern QPalette qt_fusionPalette();
#endif
namespace
{
inline constexpr QRgb rgbGray( int value )
{
return qRgb( value, value, value );
}
}
QskFusionPalette::QskFusionPalette( QskSkin::ColorScheme colorScheme )
{
using namespace QskRgb;
using P = QPalette;
struct
{
QRgb base, background, text, disabledText, light, midLight, mid, dark,
darkDisabled, highlight, disabledHighlight, shadow, disabledShadow,
hightlightedText, link;
} colors;
if ( colorScheme == QskSkin::DarkScheme )
{
colors.base = rgbGray( 36 );
colors.background = rgbGray( 50 );
colors.text = rgbGray( 240 );
colors.disabledText = rgbGray( 130 );
colors.light = rgbGray( 75 );
colors.midLight = rgbGray( 42 );
colors.mid = rgbGray( 38 );
colors.dark = rgbGray( 33 );
colors.darkDisabled = rgbGray( 190 );
colors.highlight = qRgb( 48, 140, 198 );
colors.disabledHighlight = rgbGray( 145 );
colors.shadow = rgbGray( 25 );
colors.disabledShadow = rgbGray( 36 );
colors.hightlightedText = colors.text;
colors.link = colors.highlight;
}
else
{
colors.base = White;
colors.background = rgbGray( 239 );
colors.text = Black;
colors.disabledText = rgbGray( 190 );
colors.light = White;
colors.midLight = rgbGray( 202 );
colors.mid = rgbGray( 184 );
colors.dark = rgbGray( 159 );
colors.darkDisabled = rgbGray( 190 );
colors.highlight = qRgb( 48, 140, 198 );
colors.disabledHighlight = rgbGray( 145 );
colors.shadow = rgbGray( 118 );
colors.disabledShadow = rgbGray( 177 );
colors.hightlightedText = White;
colors.link = Blue;
}
setColor( P::WindowText, colors.text );
setColor( P::Button, colors.background );
setColor( P::Light, colors.light );
setColor( P::Midlight, colors.midLight );
setColor( P::Dark, colors.dark );
setColor( P::Mid, colors.mid );
setColor( P::Text, colors.text );
setColor( P::BrightText, colors.light );
setColor( P::ButtonText, colors.text );
setColor( P::Base, colors.base );
setColor( P::Window, colors.background );
setColor( P::Shadow, colors.shadow );
setColor( P::AlternateBase, interpolated( colors.base, colors.background, 0.5 ) );
setColor( P::Highlight, colors.highlight );
setColor( P::HighlightedText, colors.hightlightedText );
setColor( P::Link, colors.link);
setColor( P::LinkVisited, Magenta );
setColor( P::ToolTipBase, qRgb( 255, 255, 220 ) );
setColor( P::ToolTipText, Black );
setColor( P::PlaceholderText, toTransparent( colors.text, 128 ) );
// disabled colors
setColor( P::Disabled, P::Text, colors.disabledText );
setColor( P::Disabled, P::WindowText, colors.disabledText );
setColor( P::Disabled, P::ButtonText, colors.disabledText );
setColor( P::Disabled, P::Base, colors.background );
setColor( P::Disabled, P::Dark, colors.darkDisabled );
setColor( P::Disabled, P::Shadow, colors.disabledShadow );
setColor( P::Disabled, P::Highlight, colors.disabledHighlight );
#if QT_VERSION >= QT_VERSION_CHECK( 6, 6, 0 )
setColor( P::Active, P::Accent, active( P::Highlight ) );
setColor( P::Disabled, P::Accent, disabled( P::Highlight ) );
#endif
initExtraColors();
}
QskFusionPalette::QskFusionPalette( const QPalette& palette )
{
using P = QPalette;
for ( int i = 0; i < 2; i++ )
{
const auto group = static_cast< P::ColorGroup >( i );
for ( int j = 0; j < P::NColorRoles; j++ )
{
const auto role = static_cast< P::ColorRole >( j );
m_colors[ group ][ role ] = palette.color( group, role ).rgba();
}
}
initExtraColors();
}
QskFusionPalette::~QskFusionPalette()
{
}
void QskFusionPalette::initExtraColors()
{
using P = QPalette;
outline = QskRgb::darker( active( P::Window ), 140 );
button = active( P::Button );
{
auto c = QColor::fromRgba( button );
const int val = qGray( button );
c = c.lighter( 100 + qMax( 1, ( 180 - val ) / 6 ) );
c.setHsv(c.hue(), c.saturation() * 0.75, c.value() );
button = c.rgba();
}
{
auto c = QColor::fromRgba( button ).toHsv();
c.setHsv( c.hue(), qMin( 255, (int)( c.saturation() ) ),
qMin( 255, (int)( c.value() * 0.9 ) ) );
groove = c.rgba();
}
tabFrame = QskRgb::lighter( button, 104 );
highlightedOutline = active( QPalette::Highlight );
{
highlightedOutline = QskRgb::darker( highlightedOutline, 125 );
auto c = QColor::fromRgba( highlightedOutline );
if ( c.value() > 160 )
{
c.setHsl(c.hue(), c.saturation(), 160 );
highlightedOutline = c.rgba();
}
}
error = QskRgb::DarkRed; // ????
}