20#define CLAMP(x,l,u) (x) < (l) ? (l) :\
24#include <QApplication>
31 QPalette::ColorRole role;
33 role = QPalette::Window;
35 else if (w->parentWidget()) {
36 role = w->parentWidget()->backgroundRole();
39 role = w->backgroundRole();
43 return pal.color(role);
50 int ar, ag, ab, br,
bg, bb;
51 a.getRgb(&ar, &ag, &ab);
52 b.getRgb(&br, &
bg, &bb);
54 int diff = 299 * (ar - br) + 587 * (ag -
bg) + 114 * (ab - bb);
55 diff = (diff < 0) ? -diff : 90 * diff / 100;
56 int perc = diff / 2550;
58 diff = qMax(ar, br) + qMax(ag,
bg) + qMax(ab, bb)
59 - (qMin(ar, br) + qMin(ag,
bg) + qMin(ab, bb));
71 case QPalette::ButtonText:
72 return QPalette::Button;
73 case QPalette::WindowText:
74 return QPalette::Window;
75 case QPalette::HighlightedText:
76 return QPalette::Highlight;
77 case QPalette::Window:
78 return QPalette::WindowText;
80 return QPalette::Text;
82 return QPalette::Base;
83 case QPalette::Highlight:
84 return QPalette::HighlightedText;
85 case QPalette::Button:
86 return QPalette::ButtonText;
88 return QPalette::Window;
94 QPalette::ColorRole defTo)
97 case QPalette::WindowText:
98 to = QPalette::Window;
100 case QPalette::Window:
101 to = QPalette::WindowText;
109 case QPalette::Button:
110 to = QPalette::ButtonText;
112 case QPalette::ButtonText:
113 to = QPalette::Button;
115 case QPalette::Highlight:
116 to = QPalette::HighlightedText;
118 case QPalette::HighlightedText:
119 to = QPalette::Highlight;
134 c.getHsv(&h, &s, &v, &a);
135 if (v < 75 +
value) {
136 ret.setHsv(h, s,
CLAMP(85 +
value, 85, 255), a);
147 ret.setHsv(h,
CLAMP(s, 30, 255),
CLAMP(v, 0, 255), a);
151 ret.setHsv(h, s,
CLAMP(v -
value, 0, 255), a);
156 ret.setHsv(h, s,
CLAMP(v +
value, 0, 255), a);
159 ret.setHsv(h, s,
CLAMP(v -
value, 0, 255), a);
167 int ar, ag, ab, br,
bg, bb;
168 a.getRgb(&ar, &ag, &ab);
169 b.getRgb(&br, &
bg, &bb);
171 int diff = (299 * (ar - br) + 587 * (ag -
bg) + 114 * (ab - bb));
173 if (qAbs(diff) < 91001) {
177 diff = qMax(ar, br) + qMax(ag,
bg) + qMax(ab, bb)
178 - (qMin(ar, br) + qMin(ag,
bg) + qMin(ab, bb));
187 c.getHsv(&h, &s, &v, &a);
189 if (v < 255 -
value) {
190 ret.setHsv(h, s,
CLAMP(v +
value, 0, 255), a);
195 h -= (
value * 5 / 20);
199 s =
CLAMP((s << 3) / 9, 30, 255);
200 ret.setHsv(h, s, 255, a);
204 ret.setHsv(h, s >> 1, 255, a);
222 c1.getHsv(&r, &g, &b, &a);
223 c1.setHsv(r, g, 70, a);
226 r = (w1 * c1.red() + w2 * c2.red()) / sum;
227 r =
CLAMP(r, 0, 255);
228 g = (w1 * c1.green() + w2 * c2.green()) / sum;
229 g =
CLAMP(g, 0, 255);
230 b = (w1 * c1.blue() + w2 * c2.blue()) / sum;
231 b =
CLAMP(b, 0, 255);
232 a = (w1 * c1.alpha() + w2 * c2.alpha()) / sum;
233 a =
CLAMP(a, 0, 255);
234 return QColor(r, g, b, a);
QColor mid(const QColor &oc1, const QColor &c2, int w1=1, int w2=1)
int value(const QColor &c)
int contrast(const QColor &a, const QColor &b)
QPalette::ColorRole counterRole(QPalette::ColorRole role)
QColor light(const QColor &c, int value)
const QColor & bg(const QPalette &pal, const QWidget *w)
bool haveContrast(const QColor &a, const QColor &b)
QColor emphasize(const QColor &c, int value=10)