28 #include <QtGui/QColor>
29 #include <QtGui/QBrush>
30 #include <QtGui/QWidget>
38 QBrush brush(
const QBrush &background)
const;
39 QBrush brush(
const QBrush &foreground,
const QBrush &background)
const;
48 IntensityNoEffect = 0,
69 StateEffects::StateEffects(QPalette::ColorGroup state,
const KSharedConfigPtr &config)
73 if(state == QPalette::Disabled)
74 group =
"ColorEffects:Disabled";
75 else if(state == QPalette::Inactive)
76 group =
"ColorEffects:Inactive";
83 if(! group.isEmpty()) {
85 const bool enabledByDefault = (state == QPalette::Disabled);
86 if (cfg.readEntry(
"Enable", enabledByDefault)) {
87 _effects[Intensity] = cfg.readEntry(
"IntensityEffect",
88 (
int)(state == QPalette::Disabled ? IntensityDarken : IntensityNoEffect));
89 _effects[Color] = cfg.readEntry(
"ColorEffect",
90 (
int)(state == QPalette::Disabled ? ColorNoEffect : ColorDesaturate));
91 _effects[Contrast] = cfg.readEntry(
"ContrastEffect",
92 (
int)(state == QPalette::Disabled ? ContrastFade : ContrastTint));
93 _amount[Intensity] = cfg.readEntry(
"IntensityAmount", state == QPalette::Disabled ? 0.10 : 0.0 );
94 _amount[Color] = cfg.readEntry(
"ColorAmount", state == QPalette::Disabled ? 0.0 : -0.9 );
95 _amount[Contrast] = cfg.readEntry(
"ContrastAmount", state == QPalette::Disabled ? 0.65 : 0.25 );
96 if (_effects[Color] > ColorNoEffect)
97 _color = cfg.readEntry(
"Color", state == QPalette::Disabled ?
QColor(56, 56, 56) :
QColor(112, 111, 110));
102 QBrush StateEffects::brush(
const QBrush &background)
const
104 QColor color = background.color();
105 switch (_effects[Intensity]) {
109 case IntensityDarken:
112 case IntensityLighten:
116 switch (_effects[Color]) {
117 case ColorDesaturate:
127 return QBrush(color);
130 QBrush StateEffects::brush(
const QBrush &foreground,
const QBrush &background)
const
132 QColor color = foreground.color();
133 QColor bg = background.color();
135 switch (_effects[Contrast]) {
149 struct SetDefaultColors {
150 int NormalBackground[3];
151 int AlternateBackground[3];
162 struct DecoDefaultColors {
246 explicit KColorSchemePrivate(
const KSharedConfigPtr&, QPalette::ColorGroup,
const char*, SetDefaultColors);
247 explicit KColorSchemePrivate(
const KSharedConfigPtr&, QPalette::ColorGroup,
const char*, SetDefaultColors,
const QBrush&);
248 ~KColorSchemePrivate() {}
253 qreal contrast()
const;
256 QBrush fg[8], bg[8], deco[2];
260 void init(
const KSharedConfigPtr&, QPalette::ColorGroup,
const char*, SetDefaultColors);
263 #define DEFAULT(c) QColor( c[0], c[1], c[2] )
264 #define SET_DEFAULT(a) DEFAULT( defaults.a )
265 #define DECO_DEFAULT(a) DEFAULT( defaultDecorationColors.a )
268 QPalette::ColorGroup state,
280 init(config, state, group, defaults);
284 QPalette::ColorGroup state,
293 _brushes.bg[0] = cfg.readEntry(
"BackgroundNormal",
SET_DEFAULT(NormalBackground) );
294 _brushes.bg[1] = cfg.readEntry(
"BackgroundAlternate",
SET_DEFAULT(AlternateBackground) );
301 init(config, state, group, defaults);
305 QPalette::ColorGroup state,
307 SetDefaultColors defaults)
312 _brushes.fg[0] = cfg.readEntry(
"ForegroundNormal",
SET_DEFAULT(NormalText) );
313 _brushes.fg[1] = cfg.readEntry(
"ForegroundInactive",
SET_DEFAULT(InactiveText) );
314 _brushes.fg[2] = cfg.readEntry(
"ForegroundActive",
SET_DEFAULT(ActiveText) );
315 _brushes.fg[3] = cfg.readEntry(
"ForegroundLink",
SET_DEFAULT(LinkText) );
316 _brushes.fg[4] = cfg.readEntry(
"ForegroundVisited",
SET_DEFAULT(VisitedText) );
317 _brushes.fg[5] = cfg.readEntry(
"ForegroundNegative",
SET_DEFAULT(NegativeText) );
318 _brushes.fg[6] = cfg.readEntry(
"ForegroundNeutral",
SET_DEFAULT(NeutralText) );
319 _brushes.fg[7] = cfg.readEntry(
"ForegroundPositive",
SET_DEFAULT(PositiveText) );
321 _brushes.deco[0] = cfg.readEntry(
"DecorationHover",
DECO_DEFAULT(Hover) );
322 _brushes.deco[1] = cfg.readEntry(
"DecorationFocus",
DECO_DEFAULT(Focus) );
325 if (state != QPalette::Active) {
326 StateEffects effects(state, config);
327 for (
int i=0; i<8; i++) {
328 _brushes.fg[i] = effects.brush(_brushes.fg[i], _brushes.bg[0]);
330 _brushes.deco[0] = effects.brush(_brushes.deco[0], _brushes.bg[0]);
331 _brushes.deco[1] = effects.brush(_brushes.deco[1], _brushes.bg[0]);
332 _brushes.bg[0] = effects.brush(_brushes.bg[0]);
333 _brushes.bg[1] = effects.brush(_brushes.bg[1]);
337 _brushes.bg[2] =
KColorUtils::tint( _brushes.bg[0].color(), _brushes.fg[2].color() );
338 _brushes.bg[3] =
KColorUtils::tint( _brushes.bg[0].color(), _brushes.fg[3].color() );
339 _brushes.bg[4] =
KColorUtils::tint( _brushes.bg[0].color(), _brushes.fg[4].color() );
340 _brushes.bg[5] =
KColorUtils::tint( _brushes.bg[0].color(), _brushes.fg[5].color() );
341 _brushes.bg[6] =
KColorUtils::tint( _brushes.bg[0].color(), _brushes.fg[6].color() );
342 _brushes.bg[7] =
KColorUtils::tint( _brushes.bg[0].color(), _brushes.fg[7].color() );
349 return _brushes.bg[1];
351 return _brushes.bg[2];
353 return _brushes.bg[3];
355 return _brushes.bg[4];
357 return _brushes.bg[5];
359 return _brushes.bg[6];
361 return _brushes.bg[7];
363 return _brushes.bg[0];
371 return _brushes.fg[1];
373 return _brushes.fg[2];
375 return _brushes.fg[3];
377 return _brushes.fg[4];
379 return _brushes.fg[5];
381 return _brushes.fg[6];
383 return _brushes.fg[7];
385 return _brushes.fg[0];
393 return _brushes.deco[1];
395 return _brushes.deco[0];
399 qreal KColorSchemePrivate::contrast()
const
427 d =
new KColorSchemePrivate(config, state,
"Colors:Window", defaultWindowColors);
430 d =
new KColorSchemePrivate(config, state,
"Colors:Button", defaultButtonColors);
435 bool inactiveSelectionEffect = group.
readEntry(
"ChangeSelectionColor", group.
readEntry(
"Enable",
true));
438 if (state == QPalette::Active || (state == QPalette::Inactive && !inactiveSelectionEffect))
439 d =
new KColorSchemePrivate(config, state,
"Colors:Selection", defaultSelectionColors);
440 else if (state == QPalette::Inactive)
441 d =
new KColorSchemePrivate(config, state,
"Colors:Window", defaultWindowColors,
444 d =
new KColorSchemePrivate(config, state,
"Colors:Window", defaultWindowColors);
447 d =
new KColorSchemePrivate(config, state,
"Colors:Tooltip", defaultTooltipColors);
450 d =
new KColorSchemePrivate(config, state,
"Colors:View", defaultViewColors);
456 return d->background(role);
461 return d->foreground(role);
466 return d->decoration(role);
482 contrast = (1.0 > contrast ? (-1.0 < contrast ? contrast : -1.0) : 1.0);
514 qreal lightAmount = (0.05 + y * 0.55) * (0.25 + contrast * 0.75);
515 qreal darkAmount = ( - y ) * (0.55 + contrast * 0.35);
532 palette.setBrush(QPalette::Active, color,
KColorScheme(QPalette::Active,
set, config).
background(newRole));
533 palette.setBrush(QPalette::Inactive, color,
KColorScheme(QPalette::Inactive,
set, config).
background(newRole));
534 palette.setBrush(QPalette::Disabled, color,
KColorScheme(QPalette::Disabled,
set, config).
background(newRole));
539 palette.setBrush(QPalette::Active, color,
KColorScheme(QPalette::Active,
set, config).
foreground(newRole));
540 palette.setBrush(QPalette::Inactive, color,
KColorScheme(QPalette::Inactive,
set, config).
foreground(newRole));
541 palette.setBrush(QPalette::Disabled, color,
KColorScheme(QPalette::Disabled,
set, config).
foreground(newRole));
546 class KStatefulBrushPrivate :
public QBrush
549 KStatefulBrushPrivate() : QBrush() {}
550 KStatefulBrushPrivate(
const QBrush &brush) : QBrush(brush) {}
555 d =
new KStatefulBrushPrivate[3];
561 d =
new KStatefulBrushPrivate[3];
570 d =
new KStatefulBrushPrivate[3];
579 d =
new KStatefulBrushPrivate[3];
589 d =
new KStatefulBrushPrivate[3];
591 d[1] = StateEffects(QPalette::Disabled, config).brush(brush);
592 d[2] = StateEffects(QPalette::Inactive, config).brush(brush);
600 d =
new KStatefulBrushPrivate[3];
602 d[1] = StateEffects(QPalette::Disabled, config).brush(brush, background);
603 d[2] = StateEffects(QPalette::Inactive, config).brush(brush, background);
608 d =
new KStatefulBrushPrivate[3];
630 case QPalette::Inactive:
632 case QPalette::Disabled:
641 return brush(pal.currentColorGroup());
647 return brush(widget->palette());