paper-gtk-theme/Paper/gtk-3.20/widgets/_scales.scss

486 lines
12 KiB
SCSS

/************
* GtkScale *
************/
%scale_trough {
border:none;
background-color: $base_color;
box-shadow: 0px 1px $bottom_highlight;
border:1px solid $borders_color;
padding:0;
margin: 0;
&:disabled {
background-color: $insensitive_bg_color;
box-shadow: none;
}
&:backdrop {
background-color: $backdrop_base_color;
transition: $backdrop_transition;
&:disabled { background-color: $insensitive_bg_color; }
}
// ...on selected list rows
row:selected & {
box-shadow: none;
&, &:disabled { border-color: $selected_borders_color; }
}
// OSD
.osd & {
border-color: $osd_borders_color;
background-color: transparentize($osd_borders_color, 0.2);
box-shadow: none;
outline-color: transparentize($osd_fg_color, 0.8);
&:disabled { background-color: $osd_insensitive_bg_color; }
}
}
%scale_highlight {
border: 1px solid $selected_borders_color;
background-color: $selected_bg_color;
box-shadow: inset 0px 1px $top_highlight;
border-radius: 4px;
&:disabled {
border: 1px solid $borders_color;
background-color: transparentize(black, 0.9);
}
&:backdrop,
&:active:backdrop {
border-color: lighten($selected_bg_color, 10%);
background-color: lighten($selected_bg_color, 10%);
&:disabled {
background-color: transparent;
border-color: transparent;
}
}
// ...on selected list rows
row:selected & { &:disabled, & { border-color: $selected_borders_color; } }
// OSD
.osd & {
border-color: $osd_borders_color;
&:disabled { border-color: transparent; }
}
}
scale {
// sizing
$_marks_lenght: 6px;
$_marks_distance: 6px;
min-height: 10px;
min-width: 10px;
padding: 8px;
// those are inside the trough node, I need them to show their own border over the trough one, so negative margin
fill,
highlight { margin: -1px; }
// the slider is inside the trough, so to have make it bigger there's a negative margin
slider {
min-height: 18px;
min-width: 18px;
margin: -9px 0;
&.horizontal {
margin: 0 -9px;
}
background-color:$base_color;
box-shadow:0 1px 2px 0 transparentize(black, 0.7);
border: 1px solid $borders_color;
border-radius: 12px;
transition: $button_transition;
transition-property: background, border, box-shadow;
&:hover {}
&:active {
box-shadow:0 1px 2px 0 transparentize($selected_bg_color, 0.5);
border: 1px solid $selected_bg_color;
&:disabled {
box-shadow:none;
border: 1px solid transparentize(black, 0.8);
}
}
}
// click-and-hold the slider to activate
&.fine-tune {
&.horizontal {
padding-top: 9px;
padding-bottom: 9px;
min-height: 16px;
}
&.vertical {
padding-left: 9px;
padding-right: 9px;
min-width: 16px;
}
// to make the trough grow in fine-tune mode
slider { margin: -6px; }
fill,
highlight,
trough {
border-radius: 5px;
-gtk-outline-radius: 7px;
}
}
// the backing bit
trough {
@extend %scale_trough;
outline-offset: 2px;
-gtk-outline-radius: 5px;
}
// the colored part of the backing bit
highlight { @extend %scale_highlight; }
// this is another differently styled part of the backing bit, the most relevant use case is for example
// in media player to indicate how much video stream as been cached
fill {
@extend %scale_trough;
&, &:backdrop {
background-color: $borders_color;
box-shadow: none;
}
&:disabled {
&, &:backdrop {
border-color: transparent;
background-color: transparent;
}
}
// OSD
.osd & {
background-color: mix($osd_fg_color, $osd_borders_color, 25%);
&:disabled {
&, &:backdrop {
border-color: transparent;
background-color: transparent;
}
}
}
}
slider {
@include button(normal-alt, $edge: $shadow_color);
border: 1px solid darken($borders_color, 3%);
border-radius: 100%;
transition: $button_transition;
transition-property: background, border, box-shadow;
&:hover { @include button(hover-alt, $edge: $shadow_color); }
&:active { border-color: $selected_borders_color; }
&:disabled { @include button (insensitive); }
&:backdrop {
transition: $backdrop_transition;
@include button(backdrop);
&:disabled { @include button(backdrop-insensitive); }
}
// ...on selected list rows
row:selected & { &, &:disabled { border-color: $selected_borders_color; } }
// OSD
.osd & {
@include button(osd);
border-color: darken($osd_borders_color, 3%);
background-color: opacify($osd_bg_color, 1); // solid background needed here
&:hover { @include button(osd-hover); }
&:active { @include button(osd-active); }
&:disabled { @include button(osd-insensitive); }
&:backdrop {
@include button(osd-backdrop);
&:disabled { @include button(osd-backdrop-insensitive); }
}
}
}
value { color: gtkalpha(currentColor, 0.4); }
marks {
color: gtkalpha(currentColor, 0.4);
@each $marks_class, $marks_pos, $marks_margin in (top, top, bottom),
(bottom, bottom, top),
(top, left, right),
(bottom, right, left) {
&.#{$marks_class} {
margin-#{$marks_margin}: $_marks_distance;
margin-#{$marks_pos}: -($_marks_distance + $_marks_lenght);
}
}
}
&.fine-tune marks {
@each $marks_class, $marks_pos, $marks_margin in (top, top, bottom),
(bottom, bottom, top),
(top, left, right),
(bottom, right, left) {
&.#{$marks_class} {
margin-#{$marks_margin}: $_marks_distance;
margin-#{$marks_pos}: -($_marks_distance + $_marks_lenght - 3px);
}
}
}
&.horizontal {
indicator {
min-height: $_marks_lenght;
min-width: 1px;
}
&.fine-tune indicator { min-height: ($_marks_lenght - 3px); }
}
&.vertical {
indicator {
min-height: 1px;
min-width: $_marks_lenght;
}
&.fine-tune indicator { min-width: ($_marks_lenght - 3px); }
}
// *WARNING* scale with marks madness following
// FIXME: OSD and selected list rows missing, I don't feel like adding the other 144 assets needed for those...
$suffix: if($variant == 'light', '', '-dark');
@each $dir_class, $dir_infix in ('horizontal', 'horz'),
('vertical', 'vert') {
@each $marks_infix, $nth_child in ('scale-has-marks-above', ':last-child:not(:only-child)'),
('scale-has-marks-below', ':first-child:not(:only-child)') {
@each $state, $state_infix in ('', ''),
(':hover', '-hover'),
(':active', '-active'),
(':disabled', '-insensitive'),
(':backdrop', '-backdrop'),
(':backdrop:disabled', '-backdrop-insensitive') {
&.#{$dir_class} {
%#{$marks_infix}-#{$dir_infix},
contents#{$nth_child} > trough > slider {
&#{$state} {
// an asymmetric slider asset is used here, so the margins are uneven, the smaller
// margin is set on the point side.
margin: -10px;
$_scale_asset: 'assets/slider-#{$dir_infix}-#{$marks_infix}#{$state_infix}#{$suffix}';
border-style: none;
border-radius: 0;
background-image: -gtk-scaled(url('#{$_scale_asset}.png'), url('#{$_scale_asset}@2.png'));
$_scale_slider_bg_pos: bottom;
@if $dir_class == 'horizontal' {
min-height: 26px;
min-width: 22px;
@if $marks_infix == 'scale-has-marks-above' {
margin-top: -14px;
$_scale_slider_bg_pos: top;
}
@else { margin-bottom: -14px; }
}
@else {
min-height: 22px;
min-width: 26px;
@if $marks_infix == 'scale-has-marks-above' {
margin-left: -14px;
$_scale_slider_bg_pos: left bottom;
}
@else {
margin-right: -14px;
$_scale_slider_bg_pos: right bottom;
}
}
background-position: $_scale_slider_bg_pos;
background-repeat: no-repeat;
box-shadow: none;
}
}
@at-root %#{$marks_infix}-#{$dir_infix}-fine-tune,
&.fine-tune contents#{$nth_child} > trough > slider {
// bigger negative margins to make the trough grow here as well
margin: -7px;
@if $dir_class == 'horizontal' {
@if $marks_infix == 'scale-has-marks-above' { margin-top: -11px; }
@else { margin-bottom: -11px; }
}
@else {
@if $marks_infix == 'scale-has-marks-above' { margin-left: -11px; }
@else { margin-right: -11px; }
}
}
}
}
}
}
&.color {
min-height: 0;
min-width: 0;
trough {
background-image: linear-gradient(to top, $borders_color);
background-repeat: no-repeat;
}
&.horizontal {
padding: 0 0 15px 0;
trough {
padding-bottom: 4px;
background-position: 0 -3px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
slider {
&:hover, &:backdrop, &:disabled, &:backdrop:disabled, & {
@extend %scale-has-marks-above-horz;
margin-bottom: -15px;
margin-top: 6px;
}
}
}
&.vertical {
&:dir(ltr) {
padding: 0 0 0 15px;
trough {
padding-left: 4px;
background-position: 3px 0;
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
slider {
&:hover, &:backdrop, &:disabled, &:backdrop:disabled, & {
@extend %scale-has-marks-below-vert;
margin-left: -15px;
margin-right: 6px;
}
}
}
&:dir(rtl) {
padding: 0 15px 0 0;
trough {
padding-right: 4px;
background-position: -3px 0;
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
slider {
&:hover, &:backdrop, &:disabled, &:backdrop:disabled, & {
@extend %scale-has-marks-above-vert;
margin-right: -15px;
margin-left: 6px;
}
}
}
}
&.fine-tune {
&.horizontal {
padding: 0 0 12px 0;
trough {
padding-bottom: 7px;
background-position: 0 -6px;
}
slider {
@extend %scale-has-marks-above-horz-fine-tune;
margin-bottom: -15px;
margin-top: 6px;
}
}
&.vertical {
&:dir(ltr) {
padding: 0 0 0 12px;
trough {
padding-left: 7px;
background-position: 6px 0;
}
slider {
@extend %scale-has-marks-below-vert-fine-tune;
margin-left: -15px;
margin-right: 6px;
}
}
&:dir(rtl) {
padding: 0 12px 0 0;
trough {
padding-right: 7px;
background-position: -6px 0;
}
slider {
@extend %scale-has-marks-above-vert-fine-tune;
margin-right: -15px;
margin-left: 6px;
}
}
}
}
}
}