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

 _drawing.scss

View raw Download
text/plain • 6.58 kiB
ASCII text
        
            
1
// generic drawing of more complex things
2
3
//
4
// Ripple keyframes
5
//
6
7
@keyframes ripple {
8
to {
9
background-size: 1000% 1000%;
10
}
11
}
12
13
@keyframes ripple-on-slider {
14
to {
15
background-size: auto, 1000% 1000%;
16
}
17
}
18
19
@keyframes ripple-on-headerbar {
20
from {
21
background-image: radial-gradient(circle, $primary 0%, transparent 0%);
22
}
23
24
to {
25
background-image: radial-gradient(circle, $primary 100%, transparent 0%);
26
}
27
}
28
29
30
@mixin entry($t, $fc: $primary) {
31
//
32
// entry
33
//
34
// $t: entry type
35
// $fc: focus color
36
//
37
38
@if $t == normal {
39
transition: $transition, border-image $ripple-fade-in-duration $ease-out;
40
border-image:
41
radial-gradient(
42
circle closest-corner at center calc(100% - 1px),
43
$fc 0%,
44
transparent 0%
45
) 2 / 0 0 0;
46
box-shadow: inset 0 -1px if($fc == $primary, stroke($on-surface), $fc);
47
background-color: entry-fill($on-surface);
48
color: $on-surface;
49
caret-color: $fc;
50
}
51
52
@if $t == hover {
53
box-shadow: inset 0 -1px if($fc == $primary, stroke($on-surface), $fc);
54
background-color: hover-overlay($on-surface, $on: entry-fill($on-surface), $alt: true);
55
}
56
57
@if $t == focus {
58
box-shadow: inset 0 -1px if($fc == $primary, stroke($on-surface), $fc);
59
background-color: focus-overlay($on-surface, $on: entry-fill($on-surface));
60
}
61
62
@if $t == checked {
63
border-image:
64
radial-gradient(
65
circle closest-corner at center calc(100% - 1px),
66
$fc 100%,
67
transparent 0%
68
) 2 / 0 0 2px;
69
box-shadow: inset 0 -1px if($fc == $primary, stroke($on-surface), $fc);
70
background-color: focus-overlay($on-surface, $on: entry-fill($on-surface));
71
}
72
73
@if $t == disabled {
74
box-shadow: inset 0 -1px disabled-stroke($on-surface);
75
background-color: entry-fill($on-surface);
76
color: disabled($on-surface);
77
}
78
79
@if $t == raised-normal {
80
transition: $transition;
81
border-image: none;
82
box-shadow: $shadow-z1;
83
background-color: if($fc == $primary, $surface-z8, $fc);
84
color: if($fc == $primary, $on-surface, on($fc));
85
caret-color: if($fc == $primary, $fc, on($fc));
86
}
87
88
@if $t == raised-hover {
89
box-shadow: $shadow-z3;
90
}
91
92
@if $t == raised-focus {
93
border-image: none;
94
box-shadow: $shadow-z3;
95
}
96
97
@if $t == raised-disabled {
98
box-shadow: $shadow-z1;
99
background-color: $surface-z1;
100
color: disabled($on-surface);
101
}
102
}
103
104
105
$ripple-transition-property: all, border-image, background-size, background-image;
106
$ripple-transition-duration: $duration, $ripple-fade-in-duration, $ripple-fade-out-duration, $ripple-fade-out-opacity-duration;
107
$ripple-active-transition-duration: $duration, $ripple-fade-in-duration, 0ms, 0ms;
108
109
%ripple {
110
transition-property: $ripple-transition-property;
111
transition-duration: $ripple-transition-duration;
112
transition-timing-function: $ease-out;
113
outline: none;
114
background-image: radial-gradient(circle, transparent 10%, transparent 0%);
115
background-repeat: no-repeat;
116
background-position: center;
117
background-size: 1000% 1000%;
118
119
&:active {
120
transition-duration: $ripple-active-transition-duration;
121
animation: ripple $ripple-fade-in-duration $ease-out forwards;
122
background-size: 0% 0%;
123
}
124
}
125
126
@mixin ink-color($color, $on: transparent, $button-style: "none", $hover-alt: false, $opacity-modifier: 0) {
127
@if $button-style == "raised" {
128
$hover-alt: true;
129
}
130
131
@if $button-style == "flat" {
132
box-shadow: none;
133
} @else if $button-style == "outlined" {
134
box-shadow: inset 0 0 0 1px stroke($on-surface);
135
} @else if $button-style == "raised" {
136
box-shadow: $shadow-z2;
137
}
138
139
@if $button-style != "none" or $on != transparent {
140
background-color: $on;
141
}
142
143
&:drop(active),
144
&:hover {
145
@if $button-style == "flat" {
146
box-shadow: none;
147
} @else if $button-style == "outlined" {
148
box-shadow: inset 0 0 0 1px stroke($on-surface);
149
} @else if $button-style == "raised" {
150
box-shadow: $shadow-z4;
151
}
152
153
background-color: hover-overlay($color, $opacity-modifier: $opacity-modifier, $on: $on, $alt: $hover-alt);
154
}
155
156
&:focus {
157
@if $button-style == "flat" {
158
box-shadow: none;
159
} @else if $button-style == "outlined" {
160
box-shadow: inset 0 0 0 1px stroke($on-surface);
161
} @else if $button-style == "raised" {
162
box-shadow: $shadow-z4;
163
}
164
165
background-color: focus-overlay($color, $opacity-modifier: $opacity-modifier, $on: $on);
166
}
167
168
&:active {
169
@if $button-style == "flat" {
170
box-shadow: none;
171
} @else if $button-style == "outlined" {
172
box-shadow: inset 0 0 0 1px stroke($on-surface);
173
} @else if $button-style == "raised" {
174
box-shadow: $shadow-z8;
175
}
176
177
background-image: radial-gradient(circle, pressed-overlay($color, $opacity-modifier: $opacity-modifier) 10%, transparent 0%);
178
}
179
}
180
181
@mixin list-item {
182
&:drop(active):not(:active),
183
&:hover:not(:active) {
184
transition-property: $ripple-transition-property, background-color;
185
transition-duration: $ripple-transition-duration, 0ms;
186
}
187
}
188
189
190
@mixin overshoot($side) {
191
$valid-sides: top, bottom, left, right;
192
193
@if not index($valid-sides, $side) {
194
@error "#{$side} is not a valid side. Expected one of #{$valid-sides}.";
195
}
196
197
$_position: center $side;
198
199
@if $side == left or $side == right {
200
$_position: $side center;
201
}
202
203
background-image:
204
-gtk-gradient(
205
radial,
206
$_position, 0,
207
$_position, .75,
208
to(rgba($primary, .24)),
209
to(transparent)
210
);
211
212
background-repeat: no-repeat;
213
background-position: $_position;
214
215
background-color: transparent; // reset some properties to be sure to not inherit them somehow
216
border: none; //
217
box-shadow: none; //
218
}
219
220
221
@mixin undershoot($side) {
222
$valid-sides: top, bottom, left, right;
223
224
@if not index($valid-sides, $side) {
225
@error "#{$side} is not a valid side. Expected one of #{$valid-sides}.";
226
}
227
228
$_undershoot_color_dark: stroke($on-surface);
229
$_undershoot_color_light: transparent;
230
231
$_gradient_dir: left;
232
$_dash_bg_size: 12px 1px;
233
$_gradient_repeat: repeat-x;
234
$_bg_pos: left $side;
235
236
@if $side == left or $side == right {
237
$_gradient_dir: top;
238
$_dash_bg_size: 1px 12px;
239
$_gradient_repeat: repeat-y;
240
$_bg_pos: $side top;
241
}
242
243
background-color: transparent; // shouldn't be needed, but better to be sure
244
245
background-image: linear-gradient(to $_gradient_dir, // this is the dashed line
246
$_undershoot_color_light 50%,
247
$_undershoot_color_dark 50%);
248
249
padding-#{$side}: 1px;
250
background-size: $_dash_bg_size;
251
background-repeat: $_gradient_repeat;
252
background-origin: content-box;
253
background-position: $_bg_pos;
254
}
255