// Drawing mixins // generic drawing of more complex things @function draw_widget_edge($c:$borders_edge) { // outer highlight "used" on most widgets @return 0 1px $c; } // provide font size in rem, with px fallback @mixin fontsize($size: 24, $base: 16) { font-size: round($size) + pt; //font-size: ($size / $base) * 1rem; } @mixin draw_shadows($shadow1, $shadow2:none, $shadow3:none, $shadow4:none) { // // Helper function to stack up to 4 box-shadows; // @if $shadow4!=none { box-shadow: $shadow1, $shadow2, $shadow3, $shadow4; } @else if $shadow3!=none { box-shadow: $shadow1, $shadow2, $shadow3; } @else if $shadow2!=none { box-shadow: $shadow1, $shadow2; } @else { box-shadow: $shadow1; } } // entries @mixin entry($t, $fc:$selected_bg_color, $edge: $borders_edge) { // // Entries drawing function // // $t: entry type // $fc: focus color // $edge: set to none to not draw the bottom edge or specify a color to not use the default one // // possible $t values: // normal, focus, insensitive // @if $t==normal { background-color: $base_color; border-color: $borders_color; } @if $t==focus { border-color: if($fc==$selected_bg_color, $selected_borders_color, darken($fc,35%)); box-shadow: inset 0 0 0 2px $fc; } @if $t==hover { } @if $t==insensitive { color: $insensitive_fg_color; border-color: $insensitive_bg_color; box-shadow: none; } } // On-screen Keyboard @mixin keyboard_key($t, $c:$osd_bg_color, $tc:$osd_fg_color) { // // Keyboard key drawing function // // $t: key type, // $c: base key color for colored* types // $tc: optional text color for colored* types // // possible $t values: // normal, hover, active, insensitive, insensitive-active, // backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active, // osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated // // normal key @if $t==normal { color: $tc; background-color: lighten($c, 3%); } // focused key @if $t==focus { color: $tc; background-color: mix(lighten($c, 3%), $selected_bg_color, 90%); box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4); &:hover { background-color: mix(lighten($c, 8%), $selected_bg_color, 90%); box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3); } } // hover key @else if $t==hover { color: $tc; background-color: lighten($c, if($variant == 'light', 8%, 5%)); } // active key @else if $t==active { color: $tc; background-color: darken($c,3%); } // insensitive key @else if $t==insensitive { color: $insensitive_fg_color; background-color: $insensitive_bg_color; } // reset @else if $t==undecorated { background-color: transparent; background-image: none; } } // buttons // since buttons are all flat an borderless now the mixin is simpler @mixin button($t, $tc:$fg_color, $c:$bg_color) { // // Button drawing function // // $t: button type, // $c: base button colors, derived from fg_color // $tc: base button colors, derived from fg_color // // possible $t values: // normal, hover, active, insensitive, insensitive-active, // backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active, // osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated // // normal button @if $t==normal { color: $tc; background-color: mix($tc, $c, 5%); } // focused button @if $t==focus { color: $tc; background-color: mix(mix($tc, $c, 5%), $selected_bg_color, 90%); // border-color: lighten($tc, 3%); box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4); &:hover { background-color: mix(mix($tc, $c, 7%), $selected_bg_color, 90%); box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3); } } // hover button @else if $t==hover { color: $tc; background-color: mix($tc, $c, 7%); } // active button @else if $t==active { color: $tc; background-color: mix($tc, $c, 2%); } // insensitive button @else if $t==insensitive { color: transparentize($tc, 0.5); background-color: transparentize($tc, .95); } // default/suggested button @else if $t==default { background-color: $selected_bg_color; color: $selected_fg_color; &:focus { box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4); } &:hover, &:focus { background-color: lighten($selected_bg_color, 5%); color: lighten($selected_fg_color, 5%); } &:active { background-color: darken($selected_bg_color, 7%); color: darken($selected_fg_color, 7%); } &:insensitive { @include button(insensitive); background-color: transparentize($selected_bg_color, .5); color: transparentize($selected_fg_color, .5); } } // reset @else if $t==undecorated { background-color: transparent; background-color: none; } } // tile @mixin tile($color) { @extend %tile; background-color: transparent; &:hover, &:selected:hover { background-color: transparentize($color, .85); } &:focus:hover { background-color: transparentize($color, .8); } &:selected, &:focus { background-color: transparentize($color, .9); } &:outlined, &:checked, &:active { background-color: transparentize(darken($osd_bg_color, 10%), .5); } } // overview icons // mixin fo tiles in the overview @mixin overview_icon($color) { .overview-icon { @extend %tile; color: $color; } &:hover, &:focus:hover, &:selected { .overview-icon { background-color: transparentize($color, .9); } } &:focus { .overview-icon { background-color: transparentize($color, .95); // border-color: $selected_bg_color; } } &:drop { .overview-icon { border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping background-color: transparentize($selected_bg_color, .8); } } &:active, &:focus:active, &:checked { .overview-icon { background-color: transparentize(darken($osd_bg_color, 10%), .5); } } } // styling for elements within popovers that look like notifications @mixin card($flat: false) { border-radius: $base_border_radius; margin: $base_margin; box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); @if $flat { @include button(undecorated); box-shadow: none !important; } @else { @include button(normal); } &:focus { @include button(focus); } &:hover { @include button(hover); } &:active { @include button(active); } }