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

 _colors.scss.template

View raw Download
text/plain • 6.02 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
@import 'color-palette';
5
6
@function gtkalpha($color, $alpha) {
7
@return unquote("alpha(#{$color}, #{$alpha})");
8
}
9
10
// Determine whether the color has alpha.
11
@function has-alpha($color) {
12
@return if(alpha($color) < 1, true, false);
13
}
14
15
// Determine whether the color is "light" or "dark".
16
@function tone($color) {
17
// Calculate color brightness as per https://www.w3.org/TR/AERT/#color-contrast
18
$brightness: (red($color) * 299 + green($color) * 587 + blue($color) * 114) / 1000;
19
20
@if $brightness >= 128 {
21
@return "light";
22
} @else {
23
@return "dark";
24
}
25
}
26
27
$on-light: #000;
28
$on-dark: #fff;
29
30
// Determine whether to use dark or light color on top of given color
31
// to meet accessibility standards for contrast.
32
@function on($color) {
33
$contrast-color: if(tone($color) == "dark", $on-dark, $on-light);
34
35
@if saturation($color) > 50% or alpha($color) < 1 {
36
@return $contrast-color;
37
} @else {
38
@return rgba($contrast-color, .87);
39
}
40
}
41
42
// Determine the strength of highlight on top of given color.
43
@function highlight($color) {
44
@if lightness($color) >= 80% {
45
@return rgba(white, .4);
46
} @else if lightness($color) >= 40% {
47
@return rgba(white, .2);
48
} @else {
49
@return rgba(white, .1);
50
}
51
}
52
53
// Make translucent color opaque by blending with the background color.
54
@function opacify($color, $bg) {
55
@return mix(change-color($color, $alpha: 1), $bg, alpha($color) * 100%);
56
}
57
58
// Set the accessible opacity for the overlay depending on the given color.
59
@function overlay($state, $color, $background: transparent, $opacity-modifier: 0) {
60
@if saturation($color) > 50% or saturation($background) > 50% {
61
$opacity-modifier: .04;
62
}
63
64
$opacity: ();
65
66
@if $state == "hover" {
67
$opacity: .08 + $opacity-modifier;
68
} @else if $state == "hover-alt" {
69
$opacity: .04 + $opacity-modifier;
70
} @else if $state == "focus" {
71
$opacity: .08 + $opacity-modifier;
72
} @else if $state == "pressed" {
73
$opacity: .12 + $opacity-modifier;
74
} @else if $state == "activated" {
75
$opacity: .12 + $opacity-modifier;
76
} @else if $state == "selected" {
77
@return rgba($color, .24);
78
} @else {
79
@error "Invalid type: '#{$state}'";
80
}
81
82
@return mix(rgba($color, 1), $background, $opacity * 100%);
83
}
84
85
// Private variables for dark background colors
86
$-dark-background: if(tone(%BG%) == "dark", %BG%, %FG%);
87
$-dark-surface-1dp: mix(white, $-dark-background, 5%);
88
$-dark-surface-4dp: mix(white, $-dark-background, 9%);
89
$-dark-surface-8dp: mix(white, $-dark-background, 12%);
90
$-dark-surface-switch: mix(white, $-dark-background, 60%);
91
92
//
93
// Main colors
94
//
95
96
$background: %BG%;
97
$base: %MATERIA_VIEW%; // for views
98
$base-alt: %INACTIVE_MATERIA_VIEW%;
99
$surface: %MATERIA_SURFACE%;
100
$switch-surface: %MATERIA_SURFACE%; // Special case for switches
101
$on-surface: %FG%;
102
103
$primary-on-light: %SEL_BG%;
104
$primary-on-dark: %SEL_BG%;
105
$primary: $primary-on-light;
106
$on-primary: on($primary);
107
108
$error-on-light: %TERMINAL_COLOR9%;
109
$error-on-dark: %TERMINAL_COLOR9%;
110
$error: $error-on-light;
111
$on-error: on($error);
112
113
$warning-on-light: %TERMINAL_COLOR11%;
114
$warning-on-dark: %TERMINAL_COLOR11%;
115
$warning: $warning-on-light;
116
$on-warning: on($warning);
117
118
$success-on-light: %TERMINAL_COLOR10%;
119
$success-on-dark: %TERMINAL_COLOR10%;
120
$success: $success-on-light;
121
$on-success: on($success);
122
123
$visited-on-light: %TERMINAL_COLOR5%;
124
$visited-on-dark: %TERMINAL_COLOR5%;
125
$visited: $visited-on-light;
126
$on-visited: on($visited);
127
128
$os-background: %HDR_BG3%;
129
$on-os-background: %HDR_FG%;
130
131
$tooltip: rgba(%HDR_BG%, .9);
132
$on-tooltip: %HDR_FG%;
133
134
$scrim: rgba(black, %MATERIA_PANEL_OPACITY%);
135
$on-scrim: on($scrim);
136
137
$scrim-alt: rgba(black, .3);
138
$on-scrim-alt: on($scrim-alt);
139
140
$panel: %HDR_BG3%;
141
$on-panel: %HDR_FG%;
142
143
// for Unity panel which doesn't allow translucent colors
144
$panel-solid: %HDR_BG3%;
145
$on-panel-solid: %HDR_FG%;
146
147
$titlebar: %HDR_BG%;
148
$titlebar-backdrop: %HDR_BG2%;
149
$on-titlebar: %HDR_FG%;
150
151
$titlebar-indicator: currentcolor;
152
153
@if $variant == "dark" {
154
$background: if(tone(%BG%) == "dark", %BG%, $-dark-background);
155
$base: if(tone(%BG%) == "dark", %MATERIA_VIEW%, $-dark-surface-1dp);
156
$base-alt: if(tone(%BG%) == "dark", %INACTIVE_MATERIA_VIEW%, $-dark-surface-1dp);
157
$surface: if(tone(%BG%) == "dark", %MATERIA_SURFACE%, $-dark-surface-8dp);
158
$switch-surface: if(tone(%BG%) == "dark", %MATERIA_SURFACE%, $-dark-surface-switch);
159
$on-surface: if(tone(%BG%) == "dark", %FG%, on($surface));
160
161
$primary: $primary-on-dark;
162
$on-primary: on($primary);
163
164
$error: $error-on-dark;
165
$on-error: on($error);
166
167
$warning: $warning-on-dark;
168
$on-warning: on($warning);
169
170
$success: $success-on-dark;
171
$on-success: on($success);
172
173
$visited: $visited-on-dark;
174
$on-visited: on($visited);
175
176
$titlebar: if(tone(%BG%) == "dark", %HDR_BG%, $-dark-surface-4dp);
177
$titlebar-backdrop: if(tone(%BG%) == "dark", %HDR_BG2%, $-dark-surface-1dp);
178
$on-titlebar: if(tone(%BG%) == "dark", %HDR_FG%, on($titlebar));
179
}
180
181
@if $topbar == "light" {
182
$panel: $scrim;
183
$on-panel: on($panel);
184
185
$titlebar-indicator: $primary;
186
}
187
188
//
189
// Overlay state colors
190
//
191
192
$overlay-selected: rgba($primary, %MATERIA_SELECTION_OPACITY%);
193
194
//
195
// For “on” colors
196
//
197
198
@function primary($color) {
199
@return if(tone($color) == "dark", $primary-on-light, $primary-on-dark);
200
}
201
202
@function error($color) {
203
@return if(tone($color) == "dark", $error-on-light, $error-on-dark);
204
}
205
206
@function hint($color) {
207
@return rgba($color, if(has-alpha($color), .6, .7));
208
}
209
210
@function disabled($color) {
211
@return rgba($color, if(has-alpha($color), .38, .5));
212
}
213
214
@function disabled-hint($color) {
215
@return rgba($color, if(has-alpha($color), .26, .3));
216
}
217
218
@function stroke($color) {
219
@return rgba($color, if(has-alpha($color), .26, .3));
220
}
221
222
@function disabled-stroke($color) {
223
@return rgba($color, if(has-alpha($color), .12, .2));
224
}
225
226
@function divider($color) {
227
@return rgba($color, if(has-alpha($color), .12, .2));
228
}
229
230
@function fill($color) {
231
@return rgba($color, if(has-alpha($color), .08, .08));
232
}
233
234
@function entry-fill($color) {
235
@return rgba($color, if(has-alpha($color), .04, .04));
236
}
237