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