_drawing-3.20.scss
ASCII text
1// generic drawing of more complex things 2 3// 4// Ripple keyframes 5// 6 7@keyframes ripple { 8to { 9background-size: 1000% 1000%; 10} 11} 12 13@keyframes ripple-on-slider { 14to { 15background-size: auto, 1000% 1000%; 16} 17} 18 19@keyframes ripple-on-headerbar { 20from { 21background-image: radial-gradient(circle, $primary 0%, transparent 0%); 22} 23 24to { 25background-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 { 39transition: $transition, border-image $ripple-fade-in-duration $ease-out; 40border-image: 41radial-gradient( 42circle closest-corner at center calc(100% - 1px), 43$fc 0%, 44transparent 0% 45) 2 / 0 0 0; 46box-shadow: inset 0 0 0 9999px transparent, inset 0 -1px if($fc == $primary, stroke($on-surface), $fc); 47background-color: entry-fill($on-surface); 48color: $on-surface; 49caret-color: $fc; 50} 51 52@if $t == hover { 53box-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 { 57box-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 { 61border-image: 62radial-gradient( 63circle closest-corner at center calc(100% - 1px), 64$fc 100%, 65transparent 0% 66) 2 / 0 0 2px; 67} 68 69@if $t == disabled { 70box-shadow: inset 0 0 0 9999px transparent, inset 0 -1px disabled-stroke($on-surface); 71background-color: entry-fill($on-surface); 72color: disabled($on-surface); 73} 74 75@if $t == raised-normal { 76transition: $transition; 77border-image: none; 78box-shadow: $shadow-z1; 79background-color: if($fc == $primary, $surface, $fc); 80color: if($fc == $primary, $on-surface, on($fc)); 81caret-color: if($fc == $primary, $fc, on($fc)); 82} 83 84@if $t == raised-hover { 85box-shadow: $shadow-z3; 86} 87 88@if $t == raised-focus { 89border-image: none; 90box-shadow: $shadow-z3; 91} 92 93@if $t == raised-disabled { 94box-shadow: $shadow-z1; 95background-color: $base-alt; 96color: 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 { 106transition-property: $ripple-transition-property; 107transition-duration: $ripple-transition-duration; 108transition-timing-function: $ease-out; 109outline: none; 110background-image: radial-gradient(circle, transparent 10%, transparent 0%); 111background-repeat: no-repeat; 112background-position: center; 113background-size: 1000% 1000%; 114 115&:active { 116transition-duration: $ripple-active-transition-duration; 117animation: ripple $ripple-fade-in-duration $ease-out forwards; 118background-size: 0% 0%; 119} 120} 121 122@mixin ink-color($color, $elevation: false, $opacity-modifier: 0) { 123$hover: "hover"; 124 125@if $elevation { 126$hover: "hover-alt"; 127} 128 129box-shadow: inset 0 0 0 9999px transparent, if($elevation, $shadow-z2, null); 130 131&:drop(active), 132&:hover { 133box-shadow: inset 0 0 0 9999px overlay($hover, $color, $opacity-modifier: $opacity-modifier), if($elevation, $shadow-z4, null); 134} 135 136&:focus { 137box-shadow: inset 0 0 0 9999px overlay("focus", $color, $opacity-modifier: $opacity-modifier), if($elevation, $shadow-z4, null); 138} 139 140&:active { 141@if $elevation { 142box-shadow: inset 0 0 0 9999px overlay("focus", $color, $opacity-modifier: $opacity-modifier), $shadow-z8; 143} 144 145background-image: radial-gradient(circle, overlay("pressed", $color, $opacity-modifier: $opacity-modifier) 10%, transparent 0%); 146} 147} 148 149@mixin list-item { 150&:drop(active):not(:active), 151&:hover:not(:active) { 152transition-property: $ripple-transition-property, box-shadow; 153transition-duration: $ripple-transition-duration, 0ms; 154} 155} 156 157 158@mixin overshoot($side) { 159$valid-sides: top, bottom, left, right; 160 161@if not index($valid-sides, $side) { 162@error "#{$side} is not a valid side. Expected one of #{$valid-sides}."; 163} 164 165$_position: center $side; 166 167@if $side == left or $side == right { 168$_position: $side center; 169} 170 171background-image: 172-gtk-gradient( 173radial, 174$_position, 0, 175$_position, .75, 176to(rgba($primary, .24)), 177to(transparent) 178); 179 180background-repeat: no-repeat; 181background-position: $_position; 182 183background-color: transparent; // reset some properties to be sure to not inherit them somehow 184border: none; // 185box-shadow: none; // 186} 187 188 189@mixin undershoot($side) { 190$valid-sides: top, bottom, left, right; 191 192@if not index($valid-sides, $side) { 193@error "#{$side} is not a valid side. Expected one of #{$valid-sides}."; 194} 195 196$_undershoot_color_dark: stroke($on-surface); 197$_undershoot_color_light: transparent; 198 199$_gradient_dir: left; 200$_dash_bg_size: 12px 1px; 201$_gradient_repeat: repeat-x; 202$_bg_pos: left $side; 203 204@if $side == left or $side == right { 205$_gradient_dir: top; 206$_dash_bg_size: 1px 12px; 207$_gradient_repeat: repeat-y; 208$_bg_pos: $side top; 209} 210 211background-color: transparent; // shouldn't be needed, but better to be sure 212 213background-image: linear-gradient(to $_gradient_dir, // this is the dashed line 214$_undershoot_color_light 50%, 215$_undershoot_color_dark 50%); 216 217padding-#{$side}: 1px; 218background-size: $_dash_bg_size; 219background-repeat: $_gradient_repeat; 220background-origin: content-box; 221background-position: $_bg_pos; 222} 223