PeriDyno 1.0.0
Loading...
Searching...
No Matches
Styles.cpp
Go to the documentation of this file.
1/*
2 TabToolbar - a small utility library for Qt, providing tabbed toolbars
3 Copyright (C) 2018 Oleksii Sierov
4
5 TabToolbar is free software: you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 TabToolbar is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License
16 along with TabToolbar. If not, see <http://www.gnu.org/licenses/>.
17*/
18#include <QPalette>
19
20#include "StyleTools.h"
21
22using namespace tt;
23
24extern const QString tt::g_styleKool = "Kool";
25extern const QString tt::g_styleVienna = "Vienna";
26extern const QString tt::g_styleThreshold = "Threshold";
27
28namespace
29{
30struct TPalette
31{
32 TPalette()
33 {
34 const QPalette p;
35 light = p.light().color();
36 midlight = p.midlight().color();
37 dark = p.dark().color();
38 window = p.window().color();
39 text = p.text().color();
40 highlight = p.highlight().color();
41 htext = p.highlightedText().color();
42 }
43
44 QColor htext;
45 QColor highlight;
46 QColor light;
47 QColor midlight;
48 QColor dark;
49 QColor window;
50 QColor text;
51};
52
53struct DefaultStylesRegistrar
54{
55 DefaultStylesRegistrar()
56 {
57 auto clampColor = [](int v)
58 {
59 if(v < 0)
60 return 0;
61 if(v > 255)
62 return 255;
63 return v;
64 };
65 auto lcomb = [clampColor](const QColor& c1, const QColor& c2, float f)
66 {
67 const float fi = 1.0f - f;
68 return QColor(clampColor(c1.red() *f + c2.red() *fi),
69 clampColor(c1.green()*f + c2.green()*fi),
70 clampColor(c1.blue() *f + c2.blue() *fi),
71 clampColor(c1.alpha()*f + c2.alpha()*fi));
72 };
73 auto dimmed = [lcomb](const QColor& c, float factor)
74 {
75 return lcomb(c, Qt::black, 1.0f-factor);
76 };
77 auto coeff = [clampColor](const QColor& c, float cr, float cg, float cb)
78 {
79 return QColor(clampColor(c.red() * cr), clampColor(c.green() * cg), clampColor(c.blue() * cb));
80 };
81 auto add = [clampColor](const QColor& c1, const QColor& c2)
82 {
83 return QColor(clampColor(c1.red() + c2.red()),
84 clampColor(c1.green() + c2.green()),
85 clampColor(c1.blue() + c2.blue()),
86 clampColor(c1.alpha() + c2.alpha()));
87 };
88 auto toBase = [](const QColor& c)
89 {
90 const int minColor = std::min(std::min(c.red(), c.green()), c.blue());
91 return QColor(c.red() - minColor,
92 c.green() - minColor,
93 c.blue() - minColor);
94 };
95
96 RegisterStyle(g_styleKool, [lcomb, dimmed]()
97 {
98 const TPalette p;
99 StyleParams* params = new StyleParams();
100
101 params->UseTemplateSheet = true;
102 params->AdditionalStyleSheet = "";
103 params->TabBorderRadius = 0;
104 params->TabFontColor = p.text;
105 params->ToolbarBackgroundColor = p.window;
106 params->BorderColor = dimmed(p.light, 0.25f);
107 params->GroupNameColor = lcomb(p.text, p.midlight, 0.4f);
108
109 params->TabSpecialColor = {{0.0f, dimmed(p.highlight, 0.2f)},
110 {1.0f, p.highlight}};
111
112 params->TabSpecialHoverColor = {{0.0f, params->TabSpecialColor[1].value},
113 {1.0f, params->TabSpecialColor[0].value}};
114
115 params->TabSpecialHoverBorderColor = p.highlight;
116 params->TabSpecialHoverBorderColorSide = params->TabSpecialHoverBorderColor;
117 params->TabSpecialBorderColor = p.highlight;
118 params->TabSpecialBorderColorSide = params->TabSpecialBorderColor;
119 params->TabSpecialFontColor = p.htext;
120
121 params->TabUnselectedHoverBorderColorTop =
122 params->TabHoverBorderColorTop = p.highlight;
123
124 params->TabUnselectedHoverBorderColorSide =
125 params->TabHoverBorderColorSide = {{0.0f, params->BorderColor},
126 {0.1f, params->BorderColor},
127 {0.7f, params->TabHoverBorderColorTop},
128 {1.0f, params->TabHoverBorderColorTop}};
129
130 params->PaneColor = {{0.0f, dimmed(p.light, 0.1f)},
131 {0.7f, p.light},
132 {1.0f, p.light}};
133
134 params->TabSelectedColor = p.light;
135
136 params->TabUnselectedColor = lcomb(params->ToolbarBackgroundColor, params->TabSelectedColor[0].value, 0.5f);
137
138 params->SeparatorColor = {{0.0f, Qt::transparent},
139 {0.05f, Qt::transparent},
140 {0.1f, params->BorderColor},
141 {0.9f, params->BorderColor},
142 {0.95f, Qt::transparent},
143 {1.0f, Qt::transparent}};
144
145 params->HorizontalFrameBackgroundColor = params->PaneColor;
146 for(auto& c : params->HorizontalFrameBackgroundColor)
147 c.value.setAlpha(100);
148 params->HorizontalFrameBorderColor = params->BorderColor;
149 params->HorizontalFrameBorderSize = 2;
150 params->TabSpacing = 3;
151
152 params->HideArrowColor = lcomb(p.text, p.midlight, 0.4f);
153 return params;
154 });
155
156 RegisterStyle(g_styleVienna, [lcomb, dimmed, coeff, add, toBase]()
157 {
158 const TPalette p;
159 const QColor vienna = (p.window.lightnessF() > 0.5f ? QColor(51, 153, 255) : QColor(25, 40, 70));
160 StyleParams* params = new StyleParams();
161
162 params->UseTemplateSheet = true;
163 params->AdditionalStyleSheet = "";
164 params->TabBorderRadius = 2;
165 params->TabFontColor = lcomb(p.text, vienna, 0.588f);
166 params->ToolbarBackgroundColor = add(dimmed(p.window, 0.07f), toBase(dimmed(vienna, 0.892f)));
167 const float dimmCoeff = (p.window.lightnessF() > 0.5f ? 0.225f : 0.5f);
168 params->BorderColor = add(dimmed(p.window, dimmCoeff), toBase(dimmed(vienna, 0.838f)));
169 params->GroupNameColor = lcomb(p.text, params->ToolbarBackgroundColor, 0.484f);
170
171 params->PaneColor = {{0.0f, params->ToolbarBackgroundColor},
172 {0.5f, params->ToolbarBackgroundColor},
173 {0.75f, lcomb(params->ToolbarBackgroundColor, p.light, 0.5f)},
174 {1.0f, p.light}};
175
176 params->TabSpecialColor = {{0.0f, add(dimmed(p.window, 0.7125f), coeff(toBase(dimmed(p.highlight, 0.294f)), 1.0f, 1.29f, 1.0f))},
177 {0.6f, add(dimmed(p.window, 0.891f), coeff(toBase(dimmed(p.highlight, 0.46f)), 1.0f, 0.69f, 1.0f))},
178 {0.6001f, add(dimmed(p.window, 0.825f), coeff(toBase(dimmed(p.highlight, 0.362f)), 1.0f, 0.815f, 1.0f))},
179 {1.0f, add(dimmed(p.window, 0.7125f), coeff(toBase(dimmed(p.highlight, 0.416f)), 1.0f, 0.924f, 1.0f))}};
180
181 params->TabSpecialHoverColor = {{0.0f, coeff(params->TabSpecialColor[0].value, 2.17f, 1.48f, 1.197f)},
182 {0.6f, coeff(params->TabSpecialColor[1].value, 0.653f, 1.218f, 1.286f)},
183 {0.6001f, coeff(params->TabSpecialColor[2].value, 1.69f, 1.326f, 1.191f)},
184 {1.0f, coeff(params->TabSpecialColor[3].value, 1.768f, 1.44f, 1.255f)}};
185
186 params->TabSpecialHoverBorderColor =
187 params->TabSpecialBorderColor = add(dimmed(p.window, 0.729f), coeff(toBase(dimmed(p.highlight, 0.392f)), 1.0f, 0.66f, 1.0f));
188 params->TabSpecialHoverBorderColorSide =
189 params->TabSpecialBorderColorSide = params->TabSpecialBorderColor;
190 params->TabSpecialFontColor = p.htext;
191
192 params->TabUnselectedHoverBorderColorTop =
193 params->TabHoverBorderColorTop = QColor(255, 183, 0);
194
195 params->TabUnselectedHoverBorderColorSide =
196 params->TabHoverBorderColorSide = {{0.0f, params->BorderColor},
197 {0.3f, QColor(255, 183, 0)},
198 {1.0f, QColor(255, 183, 0)}};
199
200 params->TabUnselectedColor = add(dimmed(p.window, 0.02f), toBase(dimmed(vienna, 0.9264f)));
201
202 params->TabSelectedColor = p.light;
203
204 params->SeparatorColor = {{0.0f, Qt::transparent},
205 {0.075f, Qt::transparent},
206 {0.0751f, add(dimmed(p.window, 0.3125f), toBase(dimmed(vienna, 0.789f)))},
207 {0.925f, add(dimmed(p.window, 0.3125f), toBase(dimmed(vienna, 0.789f)))},
208 {0.9251f, Qt::transparent},
209 {1.0f, Qt::transparent}};
210
211 params->HorizontalFrameBackgroundColor =
212 {{0.0f, add(dimmed(p.window, 0.033f), coeff(toBase(dimmed(vienna, 0.9362f)), 1.0f, 1.38f, 1.0f))},
213 {0.6f, add(dimmed(p.window, 0.05f), coeff(toBase(dimmed(vienna, 0.8333f)), 1.0f, 0.588f, 1.0f))},
214 {0.6001f, add(p.window, coeff(toBase(dimmed(vienna, 0.9166f)), 1.0f, 0.82f, 1.0f))},
215 {1.0f, p.light}};
216
217 params->HorizontalFrameBorderColor = params->BorderColor;
218 params->HorizontalFrameBorderSize = 2;
219 params->TabSpacing = 4;
220
221 params->HideArrowColor = lcomb(p.text, p.light, 0.62f);
222 return params;
223 });
224
225 RegisterStyle(g_styleThreshold, [lcomb, dimmed, coeff]()
226 {
227 const TPalette p;
228 StyleParams* params = new StyleParams();
229
230 params->UseTemplateSheet = true;
231 params->AdditionalStyleSheet = "";
232 params->TabBorderRadius = 0;
233 params->TabFontColor = p.text;
234 params->ToolbarBackgroundColor = p.light;
235 const float paneDimmCoeff = (p.window.lightnessF() > 0.5f ? 0.03529f : 0.1f);
236 params->PaneColor = dimmed(p.light, paneDimmCoeff);
237 const float borderDimmCoeff = (p.window.lightnessF() > 0.5f ? 0.15f : 0.3f);
238 params->BorderColor = dimmed(params->ToolbarBackgroundColor, borderDimmCoeff);
239 params->GroupNameColor = lcomb(p.text, p.light, 0.43f);
240
241 params->TabSpecialColor = coeff(p.highlight, 0.5f, 0.8f, 0.8f);
242 params->TabSpecialHoverColor = coeff(p.highlight, 0.8f, 0.9f, 0.88f);
243 params->TabSpecialHoverBorderColor =
244 params->TabSpecialBorderColor = params->TabSpecialColor;
245 params->TabSpecialHoverBorderColorSide =
246 params->TabSpecialBorderColorSide = params->TabSpecialColor;
247 params->TabSpecialFontColor = p.htext;
248
249 params->TabUnselectedHoverBorderColorTop = dimmed(params->PaneColor, 0.04f);
250 params->TabHoverBorderColorTop = params->BorderColor;
251 params->TabUnselectedHoverBorderColorSide = params->TabUnselectedHoverBorderColorTop;
252
253 params->TabHoverBorderColorSide = params->BorderColor;
254
255 const float unselectedDimmCoeff = (p.window.lightnessF() > 0.5f ? 0.008f : 0.1f);
256 params->TabUnselectedColor = dimmed(params->ToolbarBackgroundColor, unselectedDimmCoeff);
257
258 params->TabSelectedColor = params->PaneColor;
259
260 params->SeparatorColor = {{0.0f, Qt::transparent},
261 {0.05f, Qt::transparent},
262 {0.051f, params->BorderColor},
263 {0.95f, params->BorderColor},
264 {0.951f, Qt::transparent},
265 {1.0f, Qt::transparent}};
266
267 params->HorizontalFrameBackgroundColor = Qt::transparent;
268 params->HorizontalFrameBorderColor = Qt::transparent;
269 params->HorizontalFrameBorderSize = 0;
270 params->TabSpacing = 2;
271
272 params->HideArrowColor = lcomb(p.text, p.light, 0.62f);
273 return params;
274 });
275
276 RegisterStyle("White Mercy", [dimmed]()
277 {
278 StyleParams* params = CreateStyle(g_styleThreshold).release();
279 params->TabUnselectedColor = params->PaneColor;
280 params->PaneColor = params->ToolbarBackgroundColor;
281 params->TabSelectedColor = params->PaneColor;
282 params->BorderColor = dimmed(params->BorderColor, 0.1f);
283 params->TabHoverBorderColorTop = params->BorderColor;
284 params->TabHoverBorderColorSide = params->BorderColor;
285 params->SeparatorColor = {{0.0f, Qt::transparent},
286 {0.05f, Qt::transparent},
287 {0.051f, params->BorderColor},
288 {0.95f, params->BorderColor},
289 {0.951f, Qt::transparent},
290 {1.0f, Qt::transparent}};
291 return params;
292 });
293 }
294};
295
296static DefaultStylesRegistrar g;
297}
bool UseTemplateSheet
Definition Styles.h:127
QString AdditionalStyleSheet
Definition Styles.h:128
Definition Builder.h:33
TT_API const QString g_styleVienna
Definition Styles.cpp:25
void RegisterStyle(const QString &styleName, const TStyleCreator &creator)
TT_API const QString g_styleThreshold
Definition Styles.cpp:26
std::unique_ptr< StyleParams > CreateStyle(const QString &styleName)
TT_API const QString g_styleKool
Definition Styles.cpp:24