A fork of the Materia GTK theme.

By using this site, you agree to have cookies stored on your device, strictly for functional purposes, such as storing your session and preferences.

Dismiss

 _theme-color.scss

View raw Download
text/plain • 6.65 kiB
Unicode text, UTF-8 text
        
            
1
// When color definition differs for dark and light variant,
2
// it gets @if ed depending on $variant
3
4
@use "sass:color";
5
@use "sass:math";
6
@use "sass:string";
7
@use "theme";
8
9
@function gtkalpha($color, $alpha) {
10
@return string.unquote("alpha(#{$color}, #{$alpha})");
11
}
12
13
// Determine whether the color has alpha.
14
@function _has-alpha($color) {
15
@return if(color.alpha($color) < 1, true, false);
16
}
17
18
// Determine whether the color is dark.
19
@function _is-dark($color) {
20
// Calculate color brightness as per https://www.w3.org/TR/AERT/#color-contrast
21
$brightness: (color.red($color) * 299 + color.green($color) * 587 + color.blue($color) * 114) / 1000;
22
23
@return if($brightness < 128, true, false);
24
}
25
26
$on-light: #000;
27
$on-dark: #fff;
28
29
// Determine whether to use dark or light color on top of given color
30
// to meet accessibility standards for contrast.
31
@function on($color) {
32
$contrast-color: if(_is-dark($color), $on-dark, $on-light);
33
34
@if color.saturation($color) > 50% or color.alpha($color) < 1 {
35
@return $contrast-color;
36
} @else {
37
@return rgba($contrast-color, .87);
38
}
39
}
40
41
// Determine the strength of highlight on top of given color.
42
@function highlight($color) {
43
@if color.lightness($color) >= 80% {
44
@return rgba(white, .4);
45
} @else if color.lightness($color) >= 40% {
46
@return rgba(white, .2);
47
} @else {
48
@return rgba(white, .05);
49
}
50
}
51
52
// Make translucent color opaque by blending with the background color.
53
@function opacify($color, $on) {
54
@return color.mix(color.change($color, $alpha: 1), $on, color.alpha($color) * 100%);
55
}
56
57
//
58
// Main colors
59
//
60
61
$surface-z0: #f9f9f9;
62
$surface-z1: #fff;
63
$surface-z8: #fff;
64
$surface-switch-thumb: #fff;
65
$on-surface: on($surface-z0);
66
67
$primary-on-light: #1967d2;
68
$primary-on-dark: #8ab4f8;
69
$primary: $primary-on-light;
70
$on-primary: on($primary);
71
72
$error-on-light: #d93025;
73
$error-on-dark: #f28b82;
74
$error: $error-on-light;
75
$on-error: on($error);
76
77
$warning-on-light: #f9ab00;
78
$warning-on-dark: #fdd663;
79
$warning: $warning-on-light;
80
$on-warning: on($warning);
81
82
$success-on-light: #1e8e3e;
83
$success-on-dark: #81c995;
84
$success: $success-on-light;
85
$on-success: on($success);
86
87
$visited-on-light: #9334e6;
88
$visited-on-dark: #c58af9;
89
$visited: $visited-on-light;
90
$on-visited: on($visited);
91
92
$system: #212121;
93
$on-system: on($system);
94
95
$tooltip: rgba(#616161, .9);
96
$on-tooltip: on($tooltip);
97
98
$scrim: rgba(black, .6);
99
$on-scrim: on($scrim);
100
101
$scrim-alt: rgba(black, .3);
102
$on-scrim-alt: on($scrim-alt);
103
104
$panel: #212121;
105
$on-panel: on($panel);
106
107
// for Unity panel which doesn't allow translucent colors
108
$panel-solid: $panel;
109
$on-panel-solid: on($panel-solid);
110
111
$titlebar: #424242;
112
$titlebar-backdrop: #303030;
113
$on-titlebar: on($titlebar);
114
115
$titlebar-indicator: currentcolor;
116
117
@if theme.$dark-theme {
118
$surface-z0: #121212;
119
$surface-z1: color.mix(white, $surface-z0, 5%);
120
$surface-z8: color.mix(white, $surface-z0, 12%);
121
$surface-switch-thumb: color.mix(white, $surface-z0, 60%);
122
$on-surface: on($surface-z0);
123
124
$primary: $primary-on-dark;
125
$on-primary: on($primary);
126
127
$error: $error-on-dark;
128
$on-error: on($error);
129
130
$warning: $warning-on-dark;
131
$on-warning: on($warning);
132
133
$success: $success-on-dark;
134
$on-success: on($success);
135
136
$visited: $visited-on-dark;
137
$on-visited: on($visited);
138
139
$titlebar: color.mix(white, $surface-z0, 9%);
140
$titlebar-backdrop: $surface-z1;
141
$on-titlebar: on($titlebar);
142
}
143
144
@if theme.$light-topbar {
145
$panel: $scrim;
146
$on-panel: on($panel);
147
148
$panel-solid: #e0e0e0;
149
$on-panel-solid: on($panel-solid);
150
151
$titlebar: #f0f0f0;
152
$titlebar-backdrop: #ebebeb;
153
$on-titlebar: on($titlebar);
154
155
$titlebar-indicator: $primary;
156
}
157
158
//
159
// Overlay state colors
160
//
161
162
// Determine the overlay color depending on the given color and opacity.
163
@function _overlay($color, $opacity, $on) {
164
$opacity-modifier: 0;
165
166
@if color.saturation($color) > 50% or color.saturation($on) > 50% {
167
$opacity-modifier: .04;
168
}
169
170
@return color.mix(rgba($color, 1), $on, math.percentage($opacity + $opacity-modifier));
171
}
172
173
@function hover-overlay($color, $opacity-modifier: 0, $on: transparent, $alt: false) {
174
$opacity: .08;
175
176
@if $alt {
177
$opacity: .04;
178
}
179
180
@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on);
181
}
182
183
@function focus-overlay($color, $opacity-modifier: 0, $on: transparent) {
184
$opacity: .08;
185
186
@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on);
187
}
188
189
@function pressed-overlay($color, $opacity-modifier: 0, $on: transparent) {
190
$opacity: .12;
191
192
@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on);
193
}
194
195
@function dragged-overlay($color, $opacity-modifier: 0, $on: transparent) {
196
$opacity: .08;
197
198
@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on);
199
}
200
201
@function activated-overlay($color, $opacity-modifier: 0, $on: transparent) {
202
$opacity: .12;
203
204
@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on);
205
}
206
207
@function selected-overlay($color, $opacity-modifier: 0) {
208
$opacity: .24;
209
210
@if $color == $on-surface {
211
$color: $primary;
212
}
213
214
@return rgba($color, $opacity + $opacity-modifier);
215
}
216
217
$selected-overlay: selected-overlay($on-surface);
218
219
//
220
// For “on” colors
221
//
222
223
@function primary($color) {
224
@return if(_is-dark($color), $primary-on-light, $primary-on-dark);
225
}
226
227
@function error($color) {
228
@return if(_is-dark($color), $error-on-light, $error-on-dark);
229
}
230
231
@function hint($color) {
232
@return if(_has-alpha($color), rgba($color, .6), rgba($color, .7));
233
}
234
235
@function disabled($color) {
236
@return if(_has-alpha($color), rgba($color, .38), rgba($color, .5));
237
}
238
239
@function disabled-hint($color) {
240
@return if(_has-alpha($color), rgba($color, .26), rgba($color, .3));
241
}
242
243
@function stroke($color) {
244
@return if(_has-alpha($color), rgba($color, .26), rgba($color, .3));
245
}
246
247
@function disabled-stroke($color) {
248
@return if(_has-alpha($color), rgba($color, .12), rgba($color, .2));
249
}
250
251
@function divider($color) {
252
@return if(_has-alpha($color), rgba($color, .12), rgba($color, .2));
253
}
254
255
@function fill($color) {
256
@return if(_has-alpha($color), rgba($color, .08), rgba($color, .08));
257
}
258
259
@function entry-fill($color) {
260
@return if(_has-alpha($color), rgba($color, .04), rgba($color, .04));
261
}
262
263
@function scrollbar-thumb($color, $state: null) {
264
@if $state == null {
265
@return if(_has-alpha($color), rgba($color, .38), rgba($color, .5));
266
} @else if $state == "hover" {
267
@return if(_has-alpha($color), rgba($color, .48), rgba($color, .6));
268
} @else if $state == "pressed" {
269
@return if(_has-alpha($color), rgba($color, .6), rgba($color, .7));
270
} @else if $state == "disabled" {
271
@return if(_has-alpha($color), rgba($color, .26), rgba($color, .3));
272
} @else {
273
@error "Invalid type: '#{$state}'";
274
}
275
}
276