1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
|
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/themes/theme_properties.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "build/build_config.h"
#include "chrome/browser/themes/browser_theme_pack.h"
#include "grit/theme_resources.h"
#include "ui/base/material_design/material_design_controller.h"
#include "ui/gfx/color_palette.h"
#include "ui/resources/grit/ui_resources.h"
namespace {
// ----------------------------------------------------------------------------
// Defaults for properties which are stored in the browser theme pack. If you
// change these defaults, you must increment the version number in
// browser_theme_pack.cc.
// Default colors.
#if defined(OS_MACOSX)
// Used for theme fallback colors.
const SkColor kDefaultColorFrame[] = {
SkColorSetRGB(224, 224, 224), SkColorSetRGB(204, 204, 204)};
const SkColor kDefaultColorFrameInactive[] = {
SkColorSetRGB(246, 246, 246), SkColorSetRGB(246, 246, 246)};
#else
const SkColor kDefaultColorFrame[] = {
SkColorSetRGB(0xC3, 0xC3, 0xC4), SkColorSetRGB(204, 204, 204)};
const SkColor kDefaultColorFrameInactive[] = {
SkColorSetRGB(0xCD, 0xCD, 0xCE), SkColorSetRGB(220, 220, 220)};
#endif
// These colors are the same between CrOS and !CrOS for MD, so this ifdef can be
// removed when we stop supporting pre-MD.
#if defined(OS_CHROMEOS)
const SkColor kDefaultColorFrameIncognito[] = {SkColorSetRGB(0xA0, 0xA0, 0xA4),
SkColorSetRGB(0x28, 0x2B, 0x2D)};
const SkColor kDefaultColorFrameIncognitoInactive[] = {
SkColorSetRGB(0xAA, 0xAA, 0xAE), SkColorSetRGB(0x14, 0x17, 0x19)};
#elif defined(OS_MACOSX)
const SkColor kDefaultColorFrameIncognito[] = {
SkColorSetRGB(255, 0, 0), SkColorSetARGB(230, 20, 22, 24)};
const SkColor kDefaultColorFrameIncognitoInactive[] = {
SkColorSetRGB(255, 0, 0), SkColorSetRGB(30, 30, 30)};
#else
const SkColor kDefaultColorFrameIncognito[] = {SkColorSetRGB(83, 106, 139),
SkColorSetRGB(0x28, 0x2B, 0x2D)};
const SkColor kDefaultColorFrameIncognitoInactive[] = {
SkColorSetRGB(126, 139, 156), SkColorSetRGB(0x14, 0x17, 0x19)};
#endif
#if defined(OS_MACOSX)
const SkColor kDefaultColorToolbar[] = {
SkColorSetRGB(230, 230, 230), SkColorSetRGB(242, 242, 242)};
const SkColor kDefaultColorToolbarIncognito[] = {
SkColorSetRGB(230, 230, 230), SkColorSetRGB(0x50, 0x50, 0x50)};
#else
const SkColor kDefaultColorToolbar[] = {
SkColorSetRGB(223, 223, 223), SkColorSetRGB(242, 242, 242)};
const SkColor kDefaultColorToolbarIncognito[] = {
SkColorSetRGB(223, 223, 223), SkColorSetRGB(0x50, 0x50, 0x50)};
#endif // OS_MACOSX
const SkColor kDefaultDetachedBookmarkBarBackground[] = {
SkColorSetRGB(0xF1, 0xF1, 0xF1), SK_ColorWHITE};
const SkColor kDefaultDetachedBookmarkBarBackgroundIncognito[] = {
SkColorSetRGB(0xF1, 0xF1, 0xF1), SkColorSetRGB(0x32, 0x32, 0x32)};
const SkColor kDefaultColorTabText = SK_ColorBLACK;
const SkColor kDefaultColorTabTextIncognito[] = {SK_ColorBLACK, SK_ColorWHITE};
#if defined(OS_MACOSX)
const SkColor kDefaultColorBackgroundTabText[] = {
SK_ColorBLACK, SK_ColorBLACK };
const SkColor kDefaultColorBackgroundTabTextIncognito[] = {
SK_ColorBLACK, SK_ColorWHITE };
#else
const SkColor kDefaultColorBackgroundTabText[] = {
SkColorSetRGB(64, 64, 64), SK_ColorBLACK };
const SkColor kDefaultColorBackgroundTabTextIncognito[] = {
SkColorSetRGB(64, 64, 64), SK_ColorWHITE };
#endif // OS_MACOSX
const SkColor kDefaultColorBookmarkText = SK_ColorBLACK;
const SkColor kDefaultColorBookmarkTextIncognito[] = {SK_ColorBLACK,
SK_ColorWHITE};
#if defined(OS_WIN)
const SkColor kDefaultColorNTPBackground =
color_utils::GetSysSkColor(COLOR_WINDOW);
const SkColor kDefaultColorNTPText =
color_utils::GetSysSkColor(COLOR_WINDOWTEXT);
const SkColor kDefaultColorNTPLink =
color_utils::GetSysSkColor(COLOR_HOTLIGHT);
#else
// TODO(beng): source from theme provider.
const SkColor kDefaultColorNTPBackground = SK_ColorWHITE;
const SkColor kDefaultColorNTPText = SK_ColorBLACK;
const SkColor kDefaultColorNTPLink = SkColorSetRGB(6, 55, 116);
#endif // OS_WIN
const SkColor kDefaultColorNTPHeader = SkColorSetRGB(150, 150, 150);
const SkColor kDefaultColorNTPSection = SkColorSetRGB(229, 229, 229);
const SkColor kDefaultColorNTPSectionText = SK_ColorBLACK;
const SkColor kDefaultColorNTPSectionLink = SkColorSetRGB(6, 55, 116);
const SkColor kDefaultColorButtonBackground = SkColorSetARGB(0, 0, 0, 0);
// Default tints.
const color_utils::HSL kDefaultTintButtons = {-1, -1, -1};
// In pre-md, reuse the normal tint for incognito.
const color_utils::HSL kDefaultTintButtonsIncognito[] = {{-1, -1, -1},
{-1, -1, 0.85}};
const color_utils::HSL kDefaultTintFrame = {-1, -1, -1};
const color_utils::HSL kDefaultTintFrameInactive = {-1, -1, 0.75};
const color_utils::HSL kDefaultTintFrameIncognito = {-1, 0.2, 0.35};
const color_utils::HSL kDefaultTintFrameIncognitoInactive = {-1, 0.3, 0.6};
const color_utils::HSL kDefaultTintBackgroundTab = {-1, -1, 0.75};
// ----------------------------------------------------------------------------
// Defaults for properties which are not stored in the browser theme pack.
const SkColor kDefaultColorControlBackground = SK_ColorWHITE;
const SkColor kDefaultDetachedBookmarkBarSeparator[] = {
SkColorSetRGB(170, 170, 171), SkColorSetRGB(182, 180, 182)};
const SkColor kDefaultDetachedBookmarkBarSeparatorIncognito[] = {
SkColorSetRGB(170, 170, 171), SkColorSetRGB(0x28, 0x28, 0x28)};
const SkColor kDefaultToolbarTopSeparator = SkColorSetA(SK_ColorBLACK, 0x40);
#if defined(OS_MACOSX)
const SkColor kDefaultColorFrameVibrancyOverlay[] = {
SkColorSetARGB(25, 0, 0, 0), SkColorSetARGB(230, 20, 22, 24)};
const SkColor kDefaultColorToolbarInactive[] = {
SkColorSetRGB(255, 0, 0), SkColorSetRGB(246, 246, 246)};
const SkColor kDefaultColorToolbarInactiveIncognito[] = {
SkColorSetRGB(255, 0, 0), SkColorSetRGB(45, 45, 45)};
const SkColor kDefaultColorTabBackgroundInactive[] = {
SkColorSetRGB(255, 0, 0), SkColorSetRGB(236, 236, 236)};
const SkColor kDefaultColorTabBackgroundInactiveIncognito[] = {
SkColorSetRGB(255, 0, 0), SkColorSetRGB(40, 40, 40)};
const SkColor kDefaultColorToolbarButtonStroke = SkColorSetARGB(75, 81, 81, 81);
const SkColor kDefaultColorToolbarButtonStrokeInactive =
SkColorSetARGB(75, 99, 99, 99);
const SkColor kDefaultColorToolbarBezel = SkColorSetRGB(204, 204, 204);
const SkColor kDefaultColorToolbarStroke[] = {
SkColorSetRGB(103, 103, 103), SkColorSetARGB(37, 0, 0, 0)};
const SkColor kDefaultColorToolbarStrokeInactive = SkColorSetRGB(163, 163, 163);
const SkColor kDefaultColorToolbarIncognitoStroke[] = {
SkColorSetRGB(255, 0, 0), SkColorSetARGB(63, 0, 0, 0)};
const SkColor kDefaultColorToolbarStrokeTheme =
SkColorSetARGB(102, 255, 255, 255);
const SkColor kDefaultColorToolbarStrokeThemeInactive =
SkColorSetARGB(102, 76, 76, 76);
#endif // OS_MACOSX
// ----------------------------------------------------------------------------
// Strings used in alignment properties.
const char kAlignmentCenter[] = "center";
const char kAlignmentTop[] = "top";
const char kAlignmentBottom[] = "bottom";
const char kAlignmentLeft[] = "left";
const char kAlignmentRight[] = "right";
// Strings used in background tiling repetition properties.
const char kTilingNoRepeat[] = "no-repeat";
const char kTilingRepeatX[] = "repeat-x";
const char kTilingRepeatY[] = "repeat-y";
const char kTilingRepeat[] = "repeat";
// The image resources that will be tinted by the 'button' tint value.
// If you change this list, you must increment the version number in
// browser_theme_pack.cc, and you should assign persistent IDs to the
// data table at the start of said file or else tinted versions of
// these resources will not be created.
//
// TODO(erg): The cocoa port is the last user of the IDR_*_[HP] variants. These
// should be removed once the cocoa port no longer uses them.
const int kToolbarButtonIDs[] = {
IDR_BACK, IDR_BACK_D, IDR_BACK_H, IDR_BACK_P,
IDR_FORWARD, IDR_FORWARD_D, IDR_FORWARD_H, IDR_FORWARD_P,
IDR_HOME, IDR_HOME_H, IDR_HOME_P,
IDR_RELOAD, IDR_RELOAD_H, IDR_RELOAD_P,
IDR_STOP, IDR_STOP_D, IDR_STOP_H, IDR_STOP_P,
IDR_BROWSER_ACTIONS_OVERFLOW, IDR_BROWSER_ACTIONS_OVERFLOW_H,
IDR_BROWSER_ACTIONS_OVERFLOW_P,
IDR_TOOLS, IDR_TOOLS_H, IDR_TOOLS_P,
IDR_MENU_DROPARROW,
IDR_TOOLBAR_BEZEL_HOVER, IDR_TOOLBAR_BEZEL_PRESSED, IDR_TOOLS_BAR,
};
SkColor TintForUnderline(SkColor input) {
return SkColorSetA(input, SkColorGetA(input) / 3);
}
} // namespace
// static
int ThemeProperties::StringToAlignment(const std::string& alignment) {
int alignment_mask = 0;
for (const std::string& component : base::SplitString(
alignment, base::kWhitespaceASCII,
base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) {
if (base::LowerCaseEqualsASCII(component, kAlignmentTop))
alignment_mask |= ALIGN_TOP;
else if (base::LowerCaseEqualsASCII(component, kAlignmentBottom))
alignment_mask |= ALIGN_BOTTOM;
else if (base::LowerCaseEqualsASCII(component, kAlignmentLeft))
alignment_mask |= ALIGN_LEFT;
else if (base::LowerCaseEqualsASCII(component, kAlignmentRight))
alignment_mask |= ALIGN_RIGHT;
}
return alignment_mask;
}
// static
int ThemeProperties::StringToTiling(const std::string& tiling) {
if (base::LowerCaseEqualsASCII(tiling, kTilingRepeatX))
return REPEAT_X;
if (base::LowerCaseEqualsASCII(tiling, kTilingRepeatY))
return REPEAT_Y;
if (base::LowerCaseEqualsASCII(tiling, kTilingRepeat))
return REPEAT;
// NO_REPEAT is the default choice.
return NO_REPEAT;
}
// static
std::string ThemeProperties::AlignmentToString(int alignment) {
// Convert from an AlignmentProperty back into a string.
std::string vertical_string(kAlignmentCenter);
std::string horizontal_string(kAlignmentCenter);
if (alignment & ALIGN_TOP)
vertical_string = kAlignmentTop;
else if (alignment & ALIGN_BOTTOM)
vertical_string = kAlignmentBottom;
if (alignment & ALIGN_LEFT)
horizontal_string = kAlignmentLeft;
else if (alignment & ALIGN_RIGHT)
horizontal_string = kAlignmentRight;
return horizontal_string + " " + vertical_string;
}
// static
std::string ThemeProperties::TilingToString(int tiling) {
// Convert from a TilingProperty back into a string.
if (tiling == REPEAT_X)
return kTilingRepeatX;
if (tiling == REPEAT_Y)
return kTilingRepeatY;
if (tiling == REPEAT)
return kTilingRepeat;
return kTilingNoRepeat;
}
// static
const std::set<int>& ThemeProperties::GetTintableToolbarButtons() {
CR_DEFINE_STATIC_LOCAL(std::set<int>, button_set, ());
if (button_set.empty()) {
button_set = std::set<int>(
kToolbarButtonIDs,
kToolbarButtonIDs + arraysize(kToolbarButtonIDs));
}
return button_set;
}
// static
color_utils::HSL ThemeProperties::GetDefaultTint(int id, bool otr) {
switch (id) {
case TINT_FRAME:
return otr ? kDefaultTintFrameIncognito : kDefaultTintFrame;
case TINT_FRAME_INACTIVE:
return otr ? kDefaultTintFrameIncognitoInactive
: kDefaultTintFrameInactive;
case TINT_BUTTONS: {
const int mode = ui::MaterialDesignController::IsModeMaterial();
return otr ? kDefaultTintButtonsIncognito[mode] : kDefaultTintButtons;
}
case TINT_BACKGROUND_TAB:
return kDefaultTintBackgroundTab;
case TINT_FRAME_INCOGNITO:
case TINT_FRAME_INCOGNITO_INACTIVE:
NOTREACHED() << "These values should be queried via their respective "
"non-incognito equivalents and an appropriate |otr| "
"value.";
default:
return {-1, -1, -1};
}
}
// static
SkColor ThemeProperties::GetDefaultColor(int id, bool otr) {
int mode = ui::MaterialDesignController::IsModeMaterial();
switch (id) {
// Properties stored in theme pack.
case COLOR_FRAME:
return otr ? kDefaultColorFrameIncognito[mode] : kDefaultColorFrame[mode];
case COLOR_FRAME_INACTIVE:
return otr ? kDefaultColorFrameIncognitoInactive[mode]
: kDefaultColorFrameInactive[mode];
case COLOR_TOOLBAR:
return otr ? kDefaultColorToolbarIncognito[mode]
: kDefaultColorToolbar[mode];
case COLOR_TAB_TEXT:
return otr ? kDefaultColorTabTextIncognito[mode]
: kDefaultColorTabText;
case COLOR_BACKGROUND_TAB_TEXT:
return otr ? kDefaultColorBackgroundTabTextIncognito[mode]
: kDefaultColorBackgroundTabText[mode];
case COLOR_BOOKMARK_TEXT:
return otr ? kDefaultColorBookmarkTextIncognito[mode]
: kDefaultColorBookmarkText;
case COLOR_NTP_BACKGROUND:
return kDefaultColorNTPBackground;
case COLOR_NTP_TEXT:
return kDefaultColorNTPText;
case COLOR_NTP_LINK:
return kDefaultColorNTPLink;
case COLOR_NTP_LINK_UNDERLINE:
return TintForUnderline(kDefaultColorNTPLink);
case COLOR_NTP_HEADER:
return kDefaultColorNTPHeader;
case COLOR_NTP_SECTION:
return kDefaultColorNTPSection;
case COLOR_NTP_SECTION_TEXT:
return kDefaultColorNTPSectionText;
case COLOR_NTP_SECTION_LINK:
return kDefaultColorNTPSectionLink;
case COLOR_NTP_SECTION_LINK_UNDERLINE:
return TintForUnderline(kDefaultColorNTPSectionLink);
case COLOR_BUTTON_BACKGROUND:
return kDefaultColorButtonBackground;
// Properties not stored in theme pack.
case COLOR_CONTROL_BACKGROUND:
return kDefaultColorControlBackground;
case COLOR_TOOLBAR_BOTTOM_SEPARATOR:
case COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR:
return otr ? kDefaultDetachedBookmarkBarSeparatorIncognito[mode]
: kDefaultDetachedBookmarkBarSeparator[mode];
case COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND:
return otr ? kDefaultDetachedBookmarkBarBackgroundIncognito[mode]
: kDefaultDetachedBookmarkBarBackground[mode];
case COLOR_TOOLBAR_TOP_SEPARATOR:
case COLOR_TOOLBAR_TOP_SEPARATOR_INACTIVE:
return kDefaultToolbarTopSeparator;
#if defined(OS_MACOSX)
case COLOR_FRAME_VIBRANCY_OVERLAY:
return kDefaultColorFrameVibrancyOverlay[otr];
case COLOR_TOOLBAR_INACTIVE:
return otr ? kDefaultColorToolbarInactiveIncognito[mode]
: kDefaultColorToolbarInactive[mode];
case COLOR_BACKGROUND_TAB_INACTIVE:
return otr ? kDefaultColorTabBackgroundInactiveIncognito[mode]
: kDefaultColorTabBackgroundInactive[mode];
case COLOR_TOOLBAR_BUTTON_STROKE:
return kDefaultColorToolbarButtonStroke;
case COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE:
return kDefaultColorToolbarButtonStrokeInactive;
case COLOR_TOOLBAR_BEZEL:
return kDefaultColorToolbarBezel;
case COLOR_TOOLBAR_STROKE:
return otr ? kDefaultColorToolbarIncognitoStroke[mode]
: kDefaultColorToolbarStroke[mode];
case COLOR_TOOLBAR_STROKE_INACTIVE:
return kDefaultColorToolbarStrokeInactive;
case COLOR_TOOLBAR_STROKE_THEME:
return kDefaultColorToolbarStrokeTheme;
case COLOR_TOOLBAR_STROKE_THEME_INACTIVE:
return kDefaultColorToolbarStrokeThemeInactive;
#endif
case COLOR_FRAME_INCOGNITO:
case COLOR_FRAME_INCOGNITO_INACTIVE:
NOTREACHED() << "These values should be queried via their respective "
"non-incognito equivalents and an appropriate |otr| "
"value.";
default:
return gfx::kPlaceholderColor;
}
}
|