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

 _common.scss

View raw Download
text/plain • 73.18 kiB
ASCII text
        
            
1
$asset_suffix: if($variant=='dark', '-dark', '');
2
$extra_background_clip: if($variant == 'light', padding-box, border-box);
3
4
$small_size: 24px;
5
$medium_size: 36px;
6
$large_size: 48px;
7
$bar_size: 4px;
8
$menuitem_size: 28px;
9
10
$container_padding: 6px;
11
$material_radius: 2px;
12
$material_faster: 0.2s;
13
$material_slower: 0.3s;
14
$material_ease: cubic-bezier(0.4, 0.0, 0.2, 1);
15
$material_ease_out: cubic-bezier(0.0, 0.0, 0.2, 1);
16
$material_ease_in: cubic-bezier(0.4, 0.0, 1, 1);
17
// FIXME: color's transition is too slow
18
$material_transition: all $material_slower $material_ease_out, color 0;
19
$shadow_transition: box-shadow $material_faster $material_ease_out;
20
21
* {
22
padding: 0;
23
background-clip: padding-box;
24
25
-GtkToolButton-icon-spacing: 4;
26
-GtkTextView-error-underline-color: $error_color;
27
28
// The size for scrollbars. The slider is 2px smaller, but we keep it
29
// up so that the whole area is sensitive to button presses for the
30
// slider. The stepper button is larger in both directions, the slider
31
// only in the width
32
33
-GtkScrolledWindow-scrollbar-spacing: 0;
34
35
-GtkToolItemGroup-expander-size: 11;
36
-GtkTreeView-expander-size: 11;
37
38
-GtkTreeView-horizontal-separator: 4;
39
40
-GtkWidget-text-handle-width: 24;
41
-GtkWidget-text-handle-height: 24;
42
43
-GtkDialog-button-spacing: 4;
44
-GtkDialog-action-area-border: 0;
45
46
// We use the outline properties to signal the focus properties
47
// to the adwaita engine: using real CSS properties is faster,
48
// and we don't use any outlines for now.
49
50
outline-style: solid;
51
outline-width: 2px;
52
outline-color: $track_color;
53
outline-offset: -4px;
54
-gtk-outline-radius: 2px;
55
56
-gtk-secondary-caret-color: $selected_bg_color;
57
}
58
59
60
/***************
61
* Base States *
62
***************/
63
.background {
64
background-color: $bg_color;
65
color: $fg_color;
66
}
67
68
/*
69
These wildcard seems unavoidable, need to investigate.
70
Wildcards are bad and troublesome, use them with care,
71
or better, just don't.
72
Everytime a wildcard is used a kitten dies, painfully.
73
*/
74
75
*:disabled { -gtk-icon-effect: dim; }
76
77
.gtkstyle-fallback {
78
background-color: $bg_color;
79
color: $fg_color;
80
81
&:hover {
82
background-color: darken($bg_color, 5%);
83
color: $fg_color;
84
}
85
86
&:active {
87
background-color: darken($bg_color, 10%);
88
color: $fg_color;
89
}
90
91
&:disabled {
92
background-color: $bg_color;
93
color: $insensitive_fg_color;
94
}
95
96
&:selected {
97
background-color: $selected_bg_color;
98
color: $selected_fg_color;
99
}
100
}
101
102
.view,
103
%view {
104
@extend row.activatable;
105
106
background-color: $base_color;
107
color: $fg_color;
108
109
&:hover, &:active, &:selected { border-radius: 2px; }
110
111
&:disabled {
112
// background-color: $secondary_base_color;
113
color: $insensitive_fg_color;
114
}
115
116
&:selected { @extend %selected_items; }
117
}
118
119
.view,
120
textview {
121
text {
122
// @extend %view;
123
124
background-color: $base_color;
125
color: $fg_color;
126
127
&:disabled {
128
// background-color: $secondary_base_color;
129
color: $insensitive_fg_color;
130
}
131
132
selection { @extend %selected_items; }
133
}
134
}
135
136
textview border {
137
background-color: $secondary_base_color;
138
background-image: image($borders_color); // HACK: the border node just draws background so, using a background-image to draw the border
139
background-repeat: no-repeat;
140
color: $tertiary_fg_color;
141
142
&.bottom {
143
background-size: 100% 1px;
144
background-position: top;
145
}
146
147
&.top {
148
background-size: 100% 1px;
149
background-position: bottom;
150
}
151
152
&.left {
153
background-size: 1px 100%;
154
background-position: right;
155
}
156
157
&.right {
158
background-size: 1px 100%;
159
background-position: left;
160
}
161
}
162
163
iconview { @extend .view; }
164
165
.rubberband,
166
rubberband {
167
border: 1px solid $secondary_selected_bg_color;
168
background-color: scale-alpha($secondary_selected_bg_color, $lower_opacity);
169
}
170
171
flowbox {
172
rubberband { @extend rubberband; }
173
174
flowboxchild {
175
outline-offset: -2px;
176
padding: 4px;
177
border-radius: 2px;
178
179
&:selected { @extend %selected_items; }
180
}
181
}
182
183
label {
184
&.separator {
185
@extend .dim-label;
186
187
color: $fg_color;
188
}
189
190
row:selected &,
191
&:selected { @extend %nobg_selected_items; }
192
193
selection {
194
background-color: $selected_bg_color;
195
color: $selected_fg_color;
196
}
197
198
&:disabled {
199
color: $insensitive_fg_color;
200
201
selection { @extend %selected_items:disabled; }
202
}
203
}
204
205
.dim-label { opacity: $hint_opacity; }
206
207
assistant {
208
.sidebar {
209
padding: 4px 0;
210
// background-color: $base_color;
211
// border-top: 1px solid $borders_color;
212
}
213
214
// &.csd .sidebar { border-top-style: none; }
215
216
.sidebar label {
217
min-height: $medium_size;
218
padding: 0 12px;
219
color: $tertiary_fg_color;
220
font-weight: 500;
221
222
&.highlight { color: $fg_color; }
223
}
224
}
225
226
%osd, .osd { opacity: $higher_opacity; }
227
228
229
/*********************
230
* Spinner Animation *
231
*********************/
232
@keyframes spin {
233
to { -gtk-icon-transform: rotate(1turn); }
234
}
235
236
@keyframes spin_colors {
237
1% { color: $info_bg_color; } 25% { color: $info_bg_color; }
238
26% { color: $question_bg_color; } 50% { color: $question_bg_color; }
239
51% { color: $warning_bg_color; } 75% { color: $warning_bg_color; }
240
76% { color: $error_bg_color; } 100% { color: $error_bg_color; }
241
}
242
243
spinner {
244
background: none;
245
opacity: 0; // non spinning spinner makes no sense
246
-gtk-icon-source: -gtk-icontheme('process-working-symbolic');
247
248
&:checked {
249
opacity: 1;
250
animation: spin 1s linear infinite, spin_colors 4s linear infinite;
251
252
&:disabled { opacity: $disabled_opacity; }
253
}
254
}
255
256
257
/****************
258
* Text Entries *
259
****************/
260
%entry,
261
entry {
262
%entry_basic, & {
263
min-height: $medium_size;
264
padding: 0 8px;
265
border-radius: 2px;
266
267
@include entry(normal);
268
269
&:focus { @include entry(focus); }
270
271
&:disabled { @include entry(insensitive); }
272
273
&.flat {
274
border-radius: 0;
275
276
@include entry(flat-normal);
277
278
&:focus { @include entry(flat-focus); }
279
280
&:disabled { @include entry(flat-insensitive); }
281
}
282
283
image { // icons inside the entry
284
color: gtkalpha(currentColor, $enabled_opacity);
285
286
&:hover, &:active { color: currentColor; }
287
288
&:disabled { color: gtkalpha(currentColor, $hint_opacity); }
289
290
&.left { padding-left: 2px; padding-right: 6px; }
291
292
&.right { padding-left: 6px; padding-right: 2px; }
293
}
294
295
undershoot {
296
&.left { @include undershoot(left); }
297
298
&.right { @include undershoot(right); }
299
}
300
301
selection { @extend %selected_items; }
302
303
// entry error and warning style
304
@each $e_type, $e_color in (error, $error_color),
305
(warning, $warning_color) {
306
&.#{$e_type} {
307
@include entry(normal, $e_color);
308
309
&:focus { @include entry(focus, $e_color); }
310
311
&:disabled { @include entry(insensitive, $e_color); }
312
313
&.flat {
314
@include entry(flat-normal, $e_color);
315
316
&:focus { @include entry(flat-focus, $e_color); }
317
318
&:disabled { @include entry(flat-insensitive, $e_color); }
319
}
320
}
321
}
322
323
&:drop(active) {
324
// box-shadow: inset 0 0 0 2px $accent_bg_color;
325
}
326
327
.osd & {
328
}
329
}
330
331
progress {
332
margin: 2px -6px;
333
border-style: none none solid;
334
border-width: 2px;
335
border-color: $selected_bg_color;
336
// border-radius: 0;
337
// box-shadow: none;
338
background-color: transparent;
339
// background-image: none;
340
}
341
342
// linked entries
343
.linked:not(.vertical) > &:not(.flat) { @extend %linked; }
344
345
// Vertically linked entries
346
.linked.vertical > &:not(.flat) { @extend %linked_vertical; }
347
}
348
349
treeview acceleditor > label { background-color: $selected_bg_color; }
350
351
treeview entry {
352
&.flat, & {
353
min-height: 0;
354
padding: 2px;
355
border-radius: 0;
356
background-color: $base_color;
357
358
&, &:focus {
359
border-image: none;
360
box-shadow: none;
361
}
362
}
363
}
364
365
366
/***********
367
* Buttons *
368
***********/
369
// stuff for .needs-attention
370
@keyframes needs_attention {
371
from {
372
background-image: -gtk-gradient(radial,
373
center center, 0,
374
center center, 0.001,
375
to($accent_bg_color),
376
to(transparent));
377
}
378
379
to {
380
background-image: -gtk-gradient(radial,
381
center center, 0,
382
center center, 0.5,
383
to($accent_bg_color),
384
to(transparent));
385
}
386
}
387
388
%button,
389
button {
390
@at-root %button_basic, & {
391
min-height: 24px;
392
min-width: 16px;
393
padding: 6px 10px;
394
border-radius: 2px;
395
font-weight: 500;
396
397
@include button(normal);
398
399
&:hover { @include button(hover); }
400
401
&:active { @include button(active); }
402
403
&:disabled { @include button(insensitive); }
404
405
&:checked { @include button(checked); }
406
407
&:checked:disabled { @include button(checked-insensitive); }
408
409
&.flat {
410
@include button(flat-normal);
411
412
&:hover { @include button(flat-hover); }
413
414
&:active { @include button(flat-active); }
415
416
&:disabled { @include button(flat-insensitive); }
417
418
&:checked { @include button(flat-checked); }
419
420
&:checked:disabled { @include button(flat-checked-insensitive); }
421
}
422
423
&.image-button {
424
min-width: 24px;
425
padding: 6px;
426
-gtk-outline-radius: 100px;
427
border-radius: 100px;
428
}
429
430
&.text-button {
431
padding-left: 16px;
432
padding-right: 16px;
433
}
434
435
&.text-button.image-button {
436
padding-left: 10px;
437
padding-right: 10px;
438
-gtk-outline-radius: 2px;
439
border-radius: 2px;
440
441
label {
442
&:last-child { padding-left: 2px; padding-right: 6px; }
443
&:first-child { padding-left: 6px; padding-right: 2px; }
444
}
445
}
446
447
.linked > & { @extend %linked; }
448
449
.linked.vertical > & { @extend %linked_vertical; }
450
451
.linked > &.flat,
452
.linked.vertical > &.flat {
453
border-radius: 2px;
454
455
&.image-button {
456
-gtk-outline-radius: 100px;
457
border-radius: 100px;
458
}
459
460
&.text-button.image-button {
461
-gtk-outline-radius: 2px;
462
border-radius: 2px;
463
}
464
}
465
466
&:drop(active) {
467
// box-shadow: inset 0 0 0 2px $accent_bg_color;
468
}
469
}
470
471
@at-root %button_selected, row:selected & {
472
&:disabled { color: $insensitive_secondary_selected_fg_color; }
473
474
&.flat {
475
color: $secondary_selected_fg_color;
476
477
&:hover, &:active { color: $selected_fg_color; }
478
479
&:disabled { color: $insensitive_secondary_selected_fg_color; }
480
}
481
}
482
483
separator {
484
min-width: 0;
485
min-height: 0;
486
background: transparent;
487
}
488
489
// big standalone buttons like in Documents pager
490
&.osd {
491
padding: 12px 16px;
492
493
&.image-button { padding: 12px; }
494
495
&:disabled { opacity: 0; }
496
}
497
498
//overlay / OSD style
499
@at-root %osd_button,
500
.osd & {
501
}
502
503
// Suggested and Destructive Action buttons
504
@each $b_type, $b_color in (suggested-action, $suggested_color),
505
(destructive-action, $destructive_color) {
506
&.#{$b_type} {
507
background-color: $b_color;
508
color: $selected_fg_color;
509
510
// @include button(normal, $b_color, white);
511
512
// &:hover { @include button(hover, $b_color, white); }
513
514
// &:active, &:checked { @include button(active, $b_color, white); }
515
516
&:disabled { @include button(insensitive, $b_color, white); }
517
518
&:checked { background-color: mix($selected_fg_color, $b_color, percentage($lower_opacity)); }
519
520
&.flat {
521
background-color: transparent;
522
color: $b_color;
523
524
// @include button(flat-normal, $b_color, white);
525
526
// &:hover { @include button(flat-hover, $b_color, white); }
527
528
// &:active, &:checked { @include button(flat-active, $b_color, white); }
529
530
&:disabled { @include button(flat-insensitive, $b_color, white); }
531
}
532
533
.osd & {
534
}
535
}
536
}
537
538
.stack-switcher > & {
539
// to position the needs attention dot, padding is added to the button
540
// child, a label needs just lateral padding while an icon needs vertical
541
// padding added too.
542
543
outline-offset: -4px; // needs to be set or it gets overriden by GtkRadioButton outline-offset
544
545
> label {
546
padding-left: 6px; // label padding
547
padding-right: 6px; //
548
}
549
550
> image {
551
padding-left: 6px; // image padding
552
padding-right: 6px; //
553
padding-top: 3px; //
554
padding-bottom: 3px; //
555
}
556
557
&.text-button {
558
// compensate text-button paddings
559
padding-left: 10px;
560
padding-right: 10px;
561
}
562
563
&.image-button {
564
// we want image buttons to have a 1:1 aspect ratio, so compensation
565
// of the padding added to the GtkImage is needed
566
padding-left: 4px;
567
padding-right: 4px;
568
}
569
570
&.needs-attention {
571
> label,
572
> image { @extend %needs_attention; }
573
574
&:checked {
575
> label,
576
> image {
577
animation: none;
578
background-image: none;
579
}
580
}
581
}
582
}
583
584
// inline-toolbar buttons
585
.inline-toolbar & {
586
@extend %button_basic.flat;
587
588
&:not(.text-button) { @extend %button_basic.image-button; }
589
}
590
591
.primary-toolbar & { -gtk-icon-shadow: none; } // tango icons don't need shadows
592
}
593
594
%needs_attention {
595
animation: needs_attention $material_slower $material_ease_out forwards;
596
background-repeat: no-repeat;
597
background-position: right 3px;
598
background-size: 6px 6px;
599
600
&:dir(rtl) { background-position: left 3px; }
601
}
602
603
// all the following is for the +|- buttons on inline toolbars, that way
604
// should really be deprecated...
605
.inline-toolbar toolbutton > button { // redefining the button look is
606
// needed since those are flat...
607
}
608
609
// More inline toolbar buttons
610
toolbar.inline-toolbar toolbutton {
611
// > button.flat { @extend %linked_middle; }
612
613
// &:first-child > button.flat { @extend %linked:first-child; }
614
615
// &:last-child > button.flat { @extend %linked:last-child; }
616
617
// &:only-child > button.flat { @extend %linked:only-child; }
618
}
619
620
%linked_middle {
621
border-radius: 0;
622
}
623
624
%linked {
625
-gtk-outline-radius: 2px;
626
627
@extend %linked_middle;
628
629
&:first-child {
630
border-top-left-radius: 2px;
631
border-bottom-left-radius: 2px;
632
}
633
634
&:last-child {
635
border-top-right-radius: 2px;
636
border-bottom-right-radius: 2px;
637
}
638
639
&:only-child {
640
border-radius: 2px;
641
}
642
}
643
644
%linked_vertical_middle {
645
border-radius: 0;
646
}
647
648
%linked_vertical{
649
-gtk-outline-radius: 2px;
650
651
@extend %linked_vertical_middle;
652
653
&:first-child {
654
border-top-left-radius: 2px;
655
border-top-right-radius: 2px;
656
}
657
658
&:last-child {
659
border-bottom-left-radius: 2px;
660
border-bottom-right-radius: 2px;
661
}
662
663
&:only-child {
664
border-radius: 2px;
665
}
666
}
667
668
/* menu buttons */
669
modelbutton.flat,
670
.menuitem.button.flat {
671
min-height: $menuitem_size;
672
padding-left: 8px;
673
padding-right: 8px;
674
border-radius: 2px;
675
color: inherit;
676
677
@extend %button_basic.flat;
678
679
&:selected { @extend %selected_items; }
680
681
check,
682
radio {
683
&, &:hover { background-image: none; }
684
685
&:active { animation: none; }
686
}
687
688
check:not(:indeterminate):checked:active { animation: check_check $material_slower $material_ease; }
689
690
check:indeterminate:checked:active, radio:indeterminate:checked:active { animation: check_indeterminate $material_slower $material_ease; }
691
692
// FIXME: remove the following when the checks/radios rewrite lands
693
check:last-child,
694
radio:last-child { margin-left: 8px; }
695
696
check:first-child,
697
radio:first-child { margin-right: 8px; }
698
}
699
700
modelbutton.flat arrow {
701
background: none;
702
703
&:hover { background: none; }
704
705
&.left { -gtk-icon-source: -gtk-icontheme("pan-start-symbolic"); }
706
707
&.right { -gtk-icon-source: -gtk-icontheme("pan-end-symbolic"); }
708
}
709
710
button.color {
711
min-height: $small_size;
712
min-width: $small_size;
713
padding: $container_padding;
714
715
colorswatch:only-child {
716
// &, overlay { border-radius: 0; }
717
}
718
}
719
720
721
/*********
722
* Links *
723
*********/
724
*:link {
725
&, &:hover, &:active { color: $link_color; }
726
727
&:visited {
728
&, &:hover, &:active { color: $link_visited_color; }
729
}
730
731
@at-root %link_selected,
732
&:selected,
733
*:selected & { color: $selected_fg_color; }
734
}
735
736
button:link,
737
button:visited {
738
@extend *:link;
739
740
> label { text-decoration-line: underline; }
741
}
742
743
/*****************
744
* GtkSpinButton *
745
*****************/
746
spinbutton {
747
&:not(.vertical) {
748
// in this horizontal configuration, the whole spinbutton
749
// behaves as the entry, so we extend the entry styling
750
// and nuke the style on the internal entry
751
@extend %entry;
752
753
padding: 0;
754
755
%spinbutton_entry,
756
entry {
757
min-width: $large_size - 16px;
758
// reset all the other props since the spinbutton node is styled here
759
margin: 0;
760
border-image: none;
761
border-radius: 0;
762
box-shadow: none;
763
background-color: transparent;
764
}
765
766
button {
767
min-height: $small_size;
768
min-width: $small_size;
769
// margin: $container_padding;
770
padding: 0;
771
border: solid $container_padding transparent;
772
773
@extend %button_basic.flat;
774
775
@extend %button_basic.image-button;
776
777
&.up { margin-left: -$container_padding / 2; }
778
779
&.down { margin-right: -$container_padding / 2; }
780
}
781
}
782
783
// OSD horizontal
784
.osd &:not(.vertical) {
785
button {
786
}
787
}
788
789
// Vertical
790
&.vertical {
791
// in the vertical configuration, we treat the spinbutton
792
// as a box, and tweak the style of the entry in the middle
793
// so that it's linked
794
795
// FIXME: this should not be set at all, but otherwise it gets the wrong
796
// color
797
&:disabled { color: $insensitive_fg_color; }
798
799
&:drop(active) {
800
box-shadow: none;
801
}
802
803
entry {
804
min-height: $medium_size;
805
min-width: $large_size;
806
padding: 0;
807
}
808
809
button {
810
min-height: $medium_size;
811
min-width: $large_size;
812
padding: 0;
813
814
@extend %button_basic.flat;
815
816
&.up { border-radius: 2px 2px 0 0; }
817
818
&.down { border-radius: 0 0 2px 2px; }
819
}
820
}
821
822
// OSD vertical
823
.osd &.vertical button:first-child {
824
}
825
826
// Misc
827
treeview &:not(.vertical) {
828
min-height: 0;
829
border-style: none;
830
border-radius: 0;
831
832
entry {
833
min-height: 0;
834
padding: 1px 2px;
835
}
836
}
837
}
838
839
840
/**************
841
* ComboBoxes *
842
**************/
843
combobox {
844
arrow {
845
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
846
min-height: 16px;
847
min-width: 16px;
848
}
849
850
menu,
851
.menu {
852
padding: 2px 0;
853
854
menuitem {
855
min-height: $medium_size;
856
padding: 0 10px;
857
}
858
}
859
860
&.linked {
861
button:nth-child(2) {
862
&:dir(ltr) { @extend %linked:last-child; }
863
&:dir(rtl) { @extend %linked:first-child; }
864
}
865
}
866
867
&:drop(active) { // FIXME: untested
868
box-shadow: none;
869
870
// button.combo { @extend %button_basic:drop(active); }
871
}
872
}
873
874
.linked > combobox > box > button.combo {
875
// the combo is a composite widget so the way we do button linking doesn't
876
// work, special case needed. See
877
// https://bugzilla.gnome.org/show_bug.cgi?id=733979
878
879
&:dir(ltr),
880
&:dir(rtl) { @extend %linked_middle; } // specificity bump
881
}
882
883
.linked:not(.vertical) > combobox:first-child > box > button.combo { @extend %linked:first-child; }
884
.linked:not(.vertical) > combobox:last-child > box > button.combo { @extend %linked:last-child; }
885
.linked:not(.vertical) > combobox:only-child > box > button.combo { @extend %linked:only-child; }
886
887
.linked.vertical > combobox > box > button.combo { @extend %linked_vertical_middle; }
888
.linked.vertical > combobox:first-child > box > button.combo { @extend %linked_vertical:first-child;}
889
.linked.vertical > combobox:last-child > box > button.combo { @extend %linked_vertical:last-child; }
890
.linked.vertical > combobox:only-child > box > button.combo { @extend %linked_vertical:only-child; }
891
892
893
/************
894
* Toolbars *
895
************/
896
toolbar {
897
-GtkWidget-window-dragging: true;
898
padding: $container_padding / 2;
899
background-color: $bg_color;
900
901
// on OSD
902
.osd & { background-color: transparent; }
903
904
// stand-alone OSD toolbars
905
&.osd {
906
transition: $shadow_transition;
907
padding: $container_padding;
908
border-radius: 2px;
909
box-shadow: $z-depth-2;
910
background-color: $base_color;
911
912
&:backdrop { box-shadow: $z-depth-1; }
913
914
&.left,
915
&.right,
916
&.top,
917
&.bottom { border-radius: 0; } // positional classes for `attached` osd toolbars
918
919
button { @extend %button_basic.flat; }
920
}
921
922
// toolbar separators
923
&.horizontal separator { margin: $container_padding / 2; }
924
&.vertical separator { margin: $container_padding / 2; }
925
926
&:not(.inline-toolbar):not(.osd) {
927
scale,
928
entry,
929
spinbutton,
930
button { margin: $container_padding / 2; }
931
932
switch { margin: ($container_padding / 2 + $container_padding) ($container_padding / 2); }
933
}
934
}
935
936
//searchbar, location-bar & inline-toolbar
937
.inline-toolbar {
938
padding: $container_padding;
939
border-style: solid;
940
border-width: 0 1px 1px;
941
border-color: $borders_color;
942
background-color: $secondary_base_color;
943
}
944
945
searchbar,
946
.location-bar {
947
padding: $container_padding;
948
border-style: solid;
949
border-width: 0 0 1px;
950
border-color: $borders_color;
951
background-color: $bg_color;
952
background-clip: border-box;
953
}
954
955
956
/***************
957
* Header bars *
958
***************/
959
%titlebar,
960
headerbar {
961
min-height: $large_size;
962
padding: 0 $container_padding;
963
box-shadow: inset 0 1px $secondary_highlight_color, $z-depth-1;
964
background-color: $headerbar_color;
965
color: $selected_fg_color;
966
967
&:backdrop {
968
color: $secondary_selected_fg_color;
969
}
970
971
.title {
972
padding-left: 12px;
973
padding-right: 12px;
974
font-weight: bold;
975
}
976
977
.subtitle {
978
padding-left: 12px;
979
padding-right: 12px;
980
font-size: smaller;
981
982
@extend .dim-label;
983
}
984
985
button:not(.suggested-action):not(.destructive-action) {
986
@extend %button_basic.flat;
987
988
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
989
currentColor 0%,
990
transparent 0%)
991
0 0 0 / 0 0 0px;
992
color: gtkalpha(currentColor, $enabled_opacity);
993
994
&:hover, &:active { color: currentColor; }
995
996
&:disabled {
997
color: gtkalpha(currentColor, $enabled_opacity * $disabled_opacity);
998
999
> label { color: inherit; }
1000
}
1001
1002
&:checked {
1003
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
1004
currentColor 100%,
1005
transparent 0%)
1006
0 0 2 / 0 0 2px;
1007
background-color: transparent;
1008
color: currentColor;
1009
1010
&:disabled {
1011
background-color: transparent;
1012
color: gtkalpha(currentColor, $disabled_opacity);
1013
1014
> label { color: inherit; }
1015
}
1016
}
1017
}
1018
1019
button.suggested-action, button.destructive-action {
1020
&:disabled {
1021
color: gtkalpha(currentColor, $disabled_opacity);
1022
1023
> label { color: inherit; }
1024
}
1025
}
1026
1027
&.selection-mode {
1028
animation: header_ripple_effect $material_slower $material_ease_out forwards;
1029
// box-shadow: inset 0 1px $secondary_highlight_color;
1030
// background-color: $selected_bg_color;
1031
color: $selected_fg_color;
1032
1033
&:backdrop {
1034
color: $secondary_selected_fg_color;
1035
}
1036
1037
.subtitle:link { @extend *:link:selected; }
1038
1039
button:not(.suggested-action):not(.destructive-action) {
1040
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
1041
currentColor 0%,
1042
transparent 0%)
1043
0 0 0 / 0 0 0px;
1044
// color: gtkalpha(currentColor, $enabled_opacity);
1045
1046
&, &:hover, &:active { color: currentColor; }
1047
1048
&:disabled {
1049
color: gtkalpha(currentColor, $disabled_opacity);
1050
1051
> label { color: inherit; }
1052
}
1053
1054
&:checked {
1055
border-image: radial-gradient(circle closest-corner at center calc(100% - 1px),
1056
currentColor 100%,
1057
transparent 0%)
1058
0 0 2 / 0 0 2px;
1059
color: currentColor;
1060
1061
&:disabled {
1062
color: gtkalpha(currentColor, $disabled_opacity);
1063
1064
> label { color: inherit; }
1065
}
1066
}
1067
}
1068
1069
.selection-menu {
1070
padding-left: 16px;
1071
padding-right: 16px;
1072
1073
GtkArrow { -GtkArrow-arrow-scaling: 1; }
1074
1075
.arrow { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); }
1076
}
1077
}
1078
1079
.tiled &,
1080
.maximized & {
1081
border-radius: 0; // squared corners when the window is max'd or tiled
1082
box-shadow: none;
1083
}
1084
1085
&.default-decoration {
1086
min-height: $small_size;
1087
padding: $container_padding;
1088
border-width: 0;
1089
1090
button.titlebutton {
1091
min-height: $small_size;
1092
min-width: $small_size;
1093
margin: 0;
1094
padding: 0;
1095
1096
&:active { // add fallback
1097
background-image: radial-gradient(circle farthest-corner at center,
1098
gtkalpha(currentColor, $lower_opacity / 2) 100%,
1099
transparent 0%),
1100
image(gtkalpha(currentColor, $lower_opacity / 2));
1101
}
1102
}
1103
}
1104
}
1105
1106
headerbar {
1107
// add vertical margins to headerbar entries, buttons and separators to avoid them spanning the whole height
1108
entry,
1109
spinbutton,
1110
// separator,
1111
button {
1112
margin-top: $container_padding;
1113
margin-bottom: $container_padding;
1114
}
1115
}
1116
1117
.titlebar {
1118
border-top-left-radius: 2px;
1119
border-top-right-radius: 2px;
1120
}
1121
1122
headerbar {
1123
separator:first-child + &, // tackles the paned container case
1124
&:first-child {
1125
border-top-left-radius: 2px;
1126
1127
.tiled &,
1128
.maximized & { border-radius: 0; }
1129
}
1130
1131
&:last-child {
1132
border-top-right-radius: 2px;
1133
1134
.tiled &,
1135
.maximized & { border-radius: 0; }
1136
}
1137
}
1138
1139
.titlebar:not(headerbar) {
1140
window.csd > & {
1141
// in csd we assume every titlebar is a headerbar so reset anything, this is needed for split toolbars cases
1142
padding: 0;
1143
background-color: transparent;
1144
background-image: none;
1145
border-style: none;
1146
box-shadow: none;
1147
}
1148
1149
> separator {
1150
background-color: $headerbar_color;
1151
background-image: image($borders_color);
1152
}
1153
1154
@extend %titlebar;
1155
}
1156
1157
1158
/************
1159
* Pathbars *
1160
************/
1161
.path-bar button {
1162
&.text-button, &.image-button, & {
1163
padding-left: 6px;
1164
padding-right: 6px;
1165
}
1166
1167
&.text-button.image-button, & {
1168
// label:last-child { padding-left: 2px; padding-right: 8px; }
1169
// label:first-child { padding-left: 8px; padding-right: 2px; }
1170
}
1171
1172
image {
1173
padding-left: 4px;
1174
padding-right: 4px;
1175
}
1176
1177
&.slider-button {
1178
padding-left: 0;
1179
padding-right: 0;
1180
}
1181
}
1182
1183
1184
/**************
1185
* Tree Views *
1186
**************/
1187
treeview.view {
1188
-GtkTreeView-grid-line-width: 1;
1189
-GtkTreeView-grid-line-pattern: '';
1190
-GtkTreeView-tree-line-width: 1;
1191
-GtkTreeView-tree-line-pattern: '';
1192
-GtkTreeView-expander-size: 16;
1193
1194
border-left-color: $track_color; // this is actually the tree lines color,
1195
border-top-color: $borders_color; // while this is the grid lines color, better then nothing
1196
1197
rubberband { @extend rubberband; } // to avoid borders being overridden by the previously set props
1198
1199
&:hover, &:active, &:selected { border-radius: 0; }
1200
1201
&.separator {
1202
min-height: 1px + 2px * 2;
1203
color: $borders_color;
1204
}
1205
1206
&:drop(active) {
1207
border-style: solid none;
1208
border-width: 1px;
1209
border-color: $accent_bg_color;
1210
1211
&.after { border-top-style: none; }
1212
1213
&.before { border-bottom-style: none; }
1214
}
1215
1216
&.expander {
1217
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
1218
-gtk-icon-transform: rotate(-90deg);
1219
1220
&:dir(rtl) { -gtk-icon-transform: rotate(90deg); }
1221
1222
&:checked { -gtk-icon-transform: unset; }
1223
1224
color: $secondary_fg_color;
1225
1226
&:hover, &:active { color: $fg_color; }
1227
1228
&:disabled { color: $insensitive_secondary_fg_color; }
1229
1230
&:selected {
1231
color: $secondary_selected_fg_color;
1232
1233
&:hover, &:active { color: $selected_fg_color; }
1234
1235
&:disabled { color: $insensitive_secondary_selected_fg_color; }
1236
}
1237
}
1238
1239
&.progressbar { // progress bar in treeviews
1240
border-style: none none solid;
1241
border-width: $bar_size;
1242
border-color: $selected_bg_color;
1243
background-color: transparent;
1244
background-image: none;
1245
1246
&:selected { border-color: currentColor; }
1247
}
1248
1249
&.trough { // progress bar trough in treeviews
1250
border-style: none none solid;
1251
border-width: $bar_size;
1252
border-color: scale-alpha($selected_bg_color, $lower_opacity);
1253
background-color: transparent;
1254
background-image: none;
1255
1256
&:selected { border-color: $track_color; }
1257
}
1258
1259
header {
1260
button {
1261
@extend row.activatable;
1262
1263
padding: 2px 6px;
1264
border-style: none solid solid none;
1265
border-width: 1px;
1266
border-color: $borders_color;
1267
border-radius: 0;
1268
background-clip: border-box;
1269
1270
&, &:hover, &:active { box-shadow: none; }
1271
1272
&, &:disabled { background-color: $base_color; }
1273
1274
&:last-child { border-right-style: none; }
1275
}
1276
}
1277
1278
button.dnd,
1279
header.button.dnd { // for treeview-like derive widgets
1280
padding: 2px 6px;
1281
border-style: none solid solid;
1282
border-width: 1px;
1283
border-color: $borders_color;
1284
border-radius: 0;
1285
box-shadow: none;
1286
background-color: $base_color;
1287
background-clip: border-box;
1288
color: $selected_bg_color;
1289
}
1290
}
1291
1292
1293
/*********
1294
* Menus *
1295
*********/
1296
menubar,
1297
.menubar {
1298
-GtkWidget-window-dragging: true;
1299
padding: 0;
1300
// box-shadow: inset 0 -1px $borders_color;
1301
background-color: $headerbar_color;
1302
1303
> menuitem {
1304
transition: background-color $material_faster $material_ease_out;
1305
min-height: 20px;
1306
padding: 4px 8px;
1307
color: $secondary_selected_fg_color;
1308
1309
&:hover { //Seems like it :hover even with keyboard focus
1310
transition: none;
1311
background-color: gtkalpha(currentColor, $lower_opacity / 2);
1312
color: $selected_fg_color;
1313
}
1314
1315
&:disabled { color: $insensitive_secondary_selected_fg_color; }
1316
}
1317
}
1318
1319
menu,
1320
.menu {
1321
margin: 4px 0;
1322
padding: 4px 0;
1323
background-color: $base_color;
1324
border: 1px solid $borders_color; // adds borders in a non composited env
1325
1326
.csd & {
1327
border: none; // axes borders in a composited env
1328
border-radius: 2px;
1329
}
1330
1331
menuitem {
1332
transition: background-color $material_faster $material_ease_out;
1333
min-height: 20px;
1334
min-width: 40px;
1335
padding: 4px 8px;
1336
font: initial;
1337
text-shadow: none;
1338
1339
&:hover {
1340
transition: none;
1341
background-color: gtkalpha(currentColor, $lower_opacity / 2);
1342
}
1343
1344
&:disabled { color: $insensitive_fg_color; }
1345
1346
// submenu indicators
1347
arrow {
1348
min-height: 16px;
1349
min-width: 16px;
1350
1351
&:dir(ltr) {
1352
-gtk-icon-source: -gtk-icontheme('pan-end-symbolic');
1353
margin-left: 8px;
1354
}
1355
1356
&:dir(rtl) {
1357
-gtk-icon-source:-gtk-icontheme('pan-end-symbolic-rtl');
1358
margin-right: 8px;
1359
}
1360
}
1361
}
1362
1363
// overflow arrows
1364
> arrow {
1365
min-height: 16px;
1366
min-width: 16px;
1367
padding: 4px;
1368
border-radius: 0;
1369
background-color: $base_color;
1370
color: $secondary_fg_color;
1371
1372
&.top {
1373
margin-top: -4px;
1374
border-bottom: 1px solid $borders_color;
1375
-gtk-icon-source: -gtk-icontheme('pan-up-symbolic');
1376
}
1377
1378
&.bottom {
1379
margin-bottom: -4px;
1380
border-top: 1px solid $borders_color;
1381
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
1382
}
1383
1384
&:hover {
1385
background-image: image(gtkalpha(currentColor, $lower_opacity / 2));
1386
color: $fg_color;
1387
}
1388
1389
&:disabled {
1390
border-color: transparent;
1391
background-color: transparent;
1392
color: transparent;
1393
// color: $insensitive_secondary_fg_color;
1394
}
1395
}
1396
1397
separator { margin: 4px 0; }
1398
}
1399
1400
menuitem {
1401
accelerator { color: gtkalpha(currentColor, $hint_opacity); }
1402
1403
check,
1404
radio {
1405
&:dir(ltr) { margin-right: -8px; margin-left: -16px; }
1406
&:dir(rtl) { margin-right: -16px; margin-left: -8px; }
1407
}
1408
}
1409
1410
.csd.popup { border-radius: 2px; }
1411
1412
1413
/***************
1414
* Popovers *
1415
***************/
1416
popover.background {
1417
transition: $shadow_transition;
1418
padding: 0;
1419
box-shadow: $z-depth-2;
1420
background-color: $light_color;
1421
1422
&:backdrop { box-shadow: $z-depth-1; }
1423
1424
&, .csd & {
1425
border-style: solid;
1426
border-width: 1px;
1427
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.3);
1428
border-radius: 2px + 1px;
1429
}
1430
1431
> list,
1432
> .view,
1433
> toolbar {
1434
border-style: none;
1435
box-shadow: none;
1436
background-color: transparent;
1437
}
1438
1439
&, .csd & {
1440
&.touch-selection,
1441
&.magnifier,
1442
&.osd { @extend %osd; }
1443
}
1444
1445
separator { margin: 4px 0; }
1446
1447
list separator { margin: 0; }
1448
1449
checkbutton,
1450
radiobutton { @extend modelbutton.flat; }
1451
}
1452
1453
/*************
1454
* Notebooks *
1455
*************/
1456
notebook {
1457
> header {
1458
border-width: 1px;
1459
border-color: $borders_color;
1460
background-color: $bg_color;
1461
background-clip: border-box;
1462
1463
&.top {
1464
border-bottom-style: solid;
1465
> tabs {
1466
margin-bottom: -1px;
1467
> tab {
1468
1469
&:hover { box-shadow: inset 0 -2px $track_color; }
1470
1471
&:checked { box-shadow: inset 0 -2px $selected_bg_color; }
1472
}
1473
}
1474
}
1475
1476
&.bottom {
1477
border-top-style: solid;
1478
> tabs {
1479
margin-top: -1px;
1480
> tab {
1481
1482
&:hover { box-shadow: inset 0 2px $track_color; }
1483
1484
&:checked { box-shadow: inset 0 2px $selected_bg_color; }
1485
}
1486
}
1487
}
1488
1489
&.left {
1490
border-right-style: solid;
1491
> tabs {
1492
margin-right: -1px;
1493
> tab {
1494
1495
&:hover { box-shadow: inset -2px 0 $track_color; }
1496
1497
&:checked { box-shadow: inset -2px 0 $selected_bg_color; }
1498
}
1499
}
1500
}
1501
1502
&.right {
1503
border-left-style: solid;
1504
> tabs {
1505
margin-left: -1px;
1506
> tab {
1507
1508
&:hover { box-shadow: inset 2px 0 $track_color; }
1509
1510
&:checked { box-shadow: inset 2px 0 $selected_bg_color; }
1511
}
1512
}
1513
}
1514
1515
&.top > tabs > arrow {
1516
@extend %notebook_vert_arrows;
1517
1518
border-top-style: none;
1519
}
1520
1521
&.bottom > tabs > arrow {
1522
@extend %notebook_vert_arrows;
1523
1524
border-bottom-style: none;
1525
}
1526
1527
@at-root %notebook_vert_arrows {
1528
padding-left: 4px;
1529
padding-right: 4px;
1530
1531
&.down {
1532
margin-left: -8px;
1533
-gtk-icon-source: -gtk-icontheme('pan-start-symbolic');
1534
}
1535
1536
&.up {
1537
margin-right: -8px;
1538
-gtk-icon-source: -gtk-icontheme('pan-end-symbolic');
1539
}
1540
}
1541
1542
&.left > tabs > arrow {
1543
@extend %notebook_horz_arrows;
1544
1545
border-left-style: none;
1546
}
1547
1548
&.right > tabs > arrow {
1549
@extend %notebook_horz_arrows;
1550
1551
border-right-style: none;
1552
}
1553
1554
@at-root %notebook_horz_arrows {
1555
padding-top: 4px;
1556
padding-bottom: 4px;
1557
1558
&.down {
1559
margin-top: -8px;
1560
-gtk-icon-source: -gtk-icontheme('pan-up-symbolic');
1561
}
1562
1563
&.up {
1564
margin-bottom: -8px;
1565
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
1566
}
1567
}
1568
1569
> tabs > arrow {
1570
@extend %button_basic.flat;
1571
1572
min-height: 16px;
1573
min-width: 16px;
1574
border-radius: 0;
1575
}
1576
1577
tab {
1578
transition: $material_transition;
1579
min-height: 24px;
1580
min-width: 24px;
1581
padding: 6px 12px;
1582
1583
outline-offset: -6px;
1584
1585
border-width: 1px; // for reorderable tabs
1586
border-color: transparent; //
1587
1588
color: $secondary_fg_color;
1589
font-weight: 500;
1590
1591
&:hover {
1592
color: $fg_color;
1593
1594
&.reorderable-page {
1595
border-color: $borders_color;
1596
background-color: $secondary_base_color;
1597
}
1598
}
1599
1600
&:disabled { color: $insensitive_secondary_fg_color; }
1601
1602
&:checked {
1603
animation: tab_ripple_effect $material_slower * 3 $material_ease_out;
1604
color: $fg_color;
1605
1606
&:disabled { color: $insensitive_fg_color; }
1607
1608
&.reorderable-page {
1609
border-color: $borders_color;
1610
background-color: $base_color;
1611
}
1612
}
1613
1614
// colors the button like the label, overridden otherwise
1615
button.flat {
1616
// FIXME: generalize .small-button?
1617
min-width: $small_size;
1618
min-height: $small_size;
1619
padding: 0;
1620
1621
@extend %button_basic.image-button;
1622
1623
&:last-child {
1624
margin-left: 6px;
1625
margin-right: -6px;
1626
}
1627
1628
&:first-child {
1629
margin-left: -6px;
1630
margin-right: 6px;
1631
}
1632
}
1633
}
1634
1635
&.top,
1636
&.bottom {
1637
tabs {
1638
padding-left: 8px;
1639
padding-right: 8px;
1640
1641
&:not(:only-child) {
1642
&:first-child { margin-left: 0; }
1643
&:last-child { margin-right: 0; }
1644
}
1645
1646
tab {
1647
&.reorderable-page {
1648
margin: 0 -1px;
1649
border-style: none solid;
1650
}
1651
}
1652
}
1653
}
1654
1655
&.left,
1656
&.right {
1657
tabs {
1658
padding-top: 8px;
1659
padding-bottom: 8px;
1660
1661
&:not(:only-child) {
1662
&:first-child { margin-top: 0; }
1663
&:last-child { margin-bottom: 0; }
1664
}
1665
1666
tab {
1667
&.reorderable-page {
1668
margin: -1px 0;
1669
border-style: solid none;
1670
}
1671
}
1672
}
1673
}
1674
}
1675
1676
> stack:not(:only-child) { // the :not(:only-child) is for "hidden" notebooks
1677
background-color: $base_color;
1678
1679
entry,
1680
spinbutton:not(.vertical) { @extend %entry.flat; }
1681
1682
revealer entry,
1683
revealer spinbutton:not(.vertical) { @extend %entry; }
1684
1685
spinbutton:not(.vertical) entry { @extend %spinbutton_entry; }
1686
}
1687
}
1688
1689
1690
/**************
1691
* Scrollbars *
1692
**************/
1693
scrollbar {
1694
$_slider_min_length: 24px;
1695
1696
// disable steppers
1697
@at-root * {
1698
-GtkScrollbar-has-backward-stepper: false;
1699
-GtkScrollbar-has-forward-stepper: false;
1700
}
1701
1702
transition: $material_transition;
1703
background-color: $base_color;
1704
background-clip: $extra_background_clip;
1705
1706
// scrollbar border
1707
&.top { border-bottom: 1px solid $borders_color; }
1708
&.bottom { border-top: 1px solid $borders_color; }
1709
&.left { border-right: 1px solid $borders_color; }
1710
&.right { border-left: 1px solid $borders_color; }
1711
1712
// slider
1713
slider {
1714
transition: all $material_faster $material_ease_out, margin 0, border-width 0;
1715
min-width: 8px;
1716
min-height: 8px;
1717
border: 4px solid transparent;
1718
border-radius: 100px;
1719
background-clip: padding-box;
1720
background-color: $tertiary_fg_color;
1721
1722
&:hover { background-color: $secondary_fg_color; }
1723
1724
&:active { background-color: $fg_color; }
1725
1726
&:disabled { background-color: $insensitive_tertiary_fg_color; }
1727
}
1728
1729
&.fine-tune {
1730
slider {
1731
transition: all $material_faster $material_ease_out, margin 0, border-width 0, min-width 0, min-height 0;
1732
min-width: 4px;
1733
min-height: 4px;
1734
}
1735
1736
&.horizontal slider { margin: 2px 0; }
1737
1738
&.vertical slider { margin: 0 2px; }
1739
}
1740
1741
&.overlay-indicator {
1742
&:not(.dragging):not(.hovering) {
1743
border-color: transparent;
1744
background-color: transparent;
1745
1746
slider {
1747
min-width: 4px;
1748
min-height: 4px;
1749
margin: 2px;
1750
border: 2px solid scale-alpha($base_color, $lower_opacity);
1751
}
1752
1753
button {
1754
min-width: 4px;
1755
min-height: 4px;
1756
margin: 2px;
1757
border: 2px solid scale-alpha($base_color, $lower_opacity);
1758
border-radius: 100px;
1759
background-color: $tertiary_fg_color;
1760
background-clip: padding-box;
1761
-gtk-icon-source: none;
1762
1763
&:disabled { background-color: $insensitive_tertiary_fg_color; }
1764
}
1765
1766
&.horizontal {
1767
slider { min-width: $_slider_min_length; }
1768
1769
button { min-width: 8px; }
1770
}
1771
1772
&.vertical {
1773
slider { min-height: $_slider_min_length; }
1774
1775
button { min-height: 8px; }
1776
}
1777
}
1778
1779
&.dragging,
1780
&.hovering { background-color: scale-alpha($base_color, $higher_opacity); }
1781
}
1782
1783
&.horizontal slider { min-width: $_slider_min_length; }
1784
1785
&.vertical slider { min-height: $_slider_min_length; }
1786
1787
// button styling
1788
button {
1789
@extend %button_basic.flat;
1790
min-width: 16px;
1791
min-height: 16px;
1792
padding: 0;
1793
border-radius: 0;
1794
}
1795
1796
// button icons
1797
&.vertical {
1798
button {
1799
&.down { -gtk-icon-source: -gtk-icontheme('pan-down-symbolic'); }
1800
1801
&.up { -gtk-icon-source: -gtk-icontheme('pan-up-symbolic'); }
1802
}
1803
}
1804
1805
&.horizontal {
1806
button {
1807
&.down { -gtk-icon-source: -gtk-icontheme('pan-right-symbolic'); }
1808
1809
&.up { -gtk-icon-source: -gtk-icontheme('pan-left-symbolic'); }
1810
}
1811
}
1812
}
1813
1814
1815
/**********
1816
* Switch *
1817
**********/
1818
switch {
1819
transition: $material_transition;
1820
margin: $container_padding 0;
1821
border: 4px solid transparent;
1822
border-radius: 100px;
1823
background-color: $track_color;
1824
background-clip: padding-box;
1825
font-size: 0;
1826
1827
&:disabled { color: $insensitive_fg_color; }
1828
1829
&:checked {
1830
background-color: scale-alpha($accent_bg_color, 0.5);
1831
1832
&:disabled {
1833
background-color: scale-alpha($accent_bg_color, 0.5 * $disabled_opacity);
1834
color: $insensitive_fg_color;
1835
}
1836
}
1837
1838
slider {
1839
@include entry(normal);
1840
1841
transition: $material_transition, margin 0;
1842
min-width: $small_size;
1843
min-height: $small_size;
1844
margin: -4px 0 -4px -4px;
1845
-gtk-outline-radius: 100px;
1846
border-radius: 100px;
1847
}
1848
1849
&:hover slider { @include entry(focus); }
1850
1851
&:disabled slider { @include entry(insensitive); }
1852
1853
&:checked slider {
1854
transition: $material_transition, margin 0, background-image 0, background-color 0 $material_slower;
1855
animation: needs_attention $material_slower $material_ease_out;
1856
margin: -4px -4px -4px 0;
1857
background-color: $accent_bg_color;
1858
color: $selected_fg_color;
1859
}
1860
1861
&:checked:disabled slider { animation: none; }
1862
1863
row:selected & {
1864
}
1865
}
1866
1867
1868
/*************************
1869
* Check and Radio items *
1870
*************************/
1871
// draw regular check and radio items using our PNG assets
1872
// all assets are rendered from assets.svg. never add pngs directly
1873
1874
//selection-mode
1875
@each $s,$as in ('','-selectionmode'),
1876
(':hover', '-hover-selectionmode'),
1877
(':checked', '-checked-selectionmode'),
1878
(':checked:hover', '-checked-hover-selectionmode') {
1879
.view.content-view.check#{$s}:not(list) {
1880
-gtk-icon-shadow: $z-depth-1;
1881
-gtk-icon-source: -gtk-scaled(url("assets/checkbox#{$as}#{$asset_suffix}.png"),
1882
url("assets/checkbox#{$as}#{$asset_suffix}@2.png"));
1883
margin: 8px;
1884
background-color: transparent;
1885
}
1886
}
1887
1888
checkbutton.text-button, radiobutton.text-button {
1889
// this is for a nice focus on check and radios text
1890
padding: 2px 0;
1891
outline-offset: 0;
1892
1893
label:not(:only-child) {
1894
&:first-child { margin-left: 4px; }
1895
1896
&:last-child { margin-right: 4px; }
1897
}
1898
}
1899
1900
check,
1901
radio {
1902
min-height: 24px;
1903
min-width: 24px;
1904
-gtk-icon-source: none;
1905
1906
margin: -12px -8px;
1907
padding: 12px;
1908
outline-offset: 4px;
1909
// border-radius: 100%;
1910
1911
@extend %button_basic.flat;
1912
1913
@extend %button_basic.image-button;
1914
1915
color: gtkalpha(currentColor, $enabled_opacity);
1916
1917
&:hover, &:active { color: currentColor; }
1918
1919
&:checked, &:checked:disabled { background-color: transparent; }
1920
1921
&:checked, &:indeterminate { color: $accent_bg_color; }
1922
1923
&:checked:disabled, &:indeterminate:disabled { color: scale-alpha($accent_bg_color, $disabled_opacity); }
1924
1925
&:only-child { margin: -12px; }
1926
1927
.osd & {
1928
}
1929
1930
menu menuitem & {
1931
transition: none;
1932
margin: -16px -16px; // this is a workaround for a menu check/radio size allocation issue
1933
1934
&:not(:checked):not(:indeterminate):hover { color: gtkalpha(currentColor, $enabled_opacity); }
1935
1936
&, &:hover, &:disabled {
1937
background-image: none;
1938
// color: inherit;
1939
// animation: none;
1940
}
1941
}
1942
}
1943
1944
%check,
1945
check {
1946
& { -gtk-icon-source: image(-gtk-recolor(url("assets/check-unchecked-symbolic.svg")),
1947
-gtk-recolor(url("assets/check-unchecked-symbolic.png"))); }
1948
1949
&:checked { -gtk-icon-source: image(-gtk-recolor(url("assets/check-checked-symbolic.svg")),
1950
-gtk-recolor(url("assets/check-checked-symbolic.png"))); }
1951
1952
&:indeterminate { -gtk-icon-source: image(-gtk-recolor(url("assets/check-dash-symbolic.svg")),
1953
-gtk-recolor(url("assets/check-dash-symbolic.png"))); }
1954
}
1955
1956
%radio,
1957
radio {
1958
border-image: -gtk-gradient(radial,
1959
center center, 0,
1960
center center, 0.001,
1961
to($accent_bg_color),
1962
to(transparent))
1963
24 / 24px;
1964
-gtk-icon-source: image(-gtk-recolor(url("assets/radio-unchecked-symbolic.svg")),
1965
-gtk-recolor(url("assets/radio-unchecked-symbolic.png")));
1966
1967
&:checked {
1968
border-image: -gtk-gradient(radial,
1969
center center, 0,
1970
center center, (10 / 48 / 2),
1971
to($accent_bg_color),
1972
to(transparent))
1973
24 / 24px;
1974
}
1975
1976
&:checked:disabled {
1977
border-image: -gtk-gradient(radial,
1978
center center, 0,
1979
center center, (10 / 48 / 2),
1980
to(scale-alpha($accent_bg_color, $disabled_opacity)),
1981
to(transparent))
1982
24 / 24px;
1983
}
1984
1985
&:indeterminate { -gtk-icon-source: image(-gtk-recolor(url("assets/radio-dash-symbolic.svg")),
1986
-gtk-recolor(url("assets/radio-dash-symbolic.png"))); }
1987
1988
&:indeterminate:checked {
1989
border-image: -gtk-gradient(radial,
1990
center center, 0,
1991
center center, 0.001,
1992
to($accent_bg_color),
1993
to(transparent))
1994
24 / 24px;
1995
}
1996
}
1997
1998
// let's animate things
1999
@keyframes check_check {
2000
from { -gtk-icon-transform: rotate(90deg); }
2001
to { -gtk-icon-transform: unset; }
2002
}
2003
2004
@keyframes check_radio {
2005
from { -gtk-icon-transform: scale(0); }
2006
to { -gtk-icon-transform: unset; }
2007
}
2008
2009
@keyframes check_indeterminate {
2010
from { -gtk-icon-transform: unset; }
2011
50% { -gtk-icon-transform: scale(0, 1); }
2012
to { -gtk-icon-transform: unset; }
2013
}
2014
2015
check:not(:indeterminate):checked { animation: check_check $material_slower $material_ease; }
2016
2017
check:not(:indeterminate):checked:active { animation: check_check $material_slower $material_ease, flat_ripple_effect $material_slower $material_ease_out forwards; }
2018
2019
// radio:not(:indeterminate):checked { animation: check_radio $material_slower $material_ease; }
2020
2021
check:indeterminate:checked, radio:indeterminate:checked { animation: check_indeterminate $material_slower $material_ease; }
2022
2023
check:indeterminate:checked:active, radio:indeterminate:checked:active { animation: check_indeterminate $material_slower $material_ease, flat_ripple_effect $material_slower $material_ease_out forwards; }
2024
2025
// no animations in menus
2026
menu menuitem {
2027
check:not(:indeterminate):checked,
2028
radio:not(:indeterminate):checked,
2029
check:indeterminate:checked,
2030
radio:indeterminate:checked { animation: none; }
2031
}
2032
2033
treeview.view check,
2034
treeview.view radio {
2035
// margin: -12px;
2036
// padding: 12px;
2037
padding: 0;
2038
2039
&:checked:hover, &:selected:checked:hover { background-image: none; }
2040
2041
& {
2042
color: $secondary_fg_color;
2043
2044
&:hover, &:active { color: $fg_color; }
2045
2046
&:disabled { color: $insensitive_secondary_fg_color; }
2047
2048
&:checked, &:indeterminate { color: $accent_bg_color; }
2049
2050
&:checked:disabled, &:indeterminate:disabled { color: scale-alpha($accent_bg_color, $disabled_opacity); }
2051
}
2052
2053
&:selected {
2054
color: $secondary_selected_fg_color;
2055
2056
&:hover, &:active { color: $selected_fg_color; }
2057
2058
&:disabled { color: $insensitive_secondary_selected_fg_color; }
2059
2060
&:checked, &:indeterminate { color: $accent_bg_color; }
2061
2062
&:checked:disabled, &:indeterminate:disabled { color: scale-alpha($accent_bg_color, $disabled_opacity); }
2063
}
2064
}
2065
2066
treeview.view radio:checked {
2067
-gtk-icon-source: image(-gtk-recolor(url("assets/radio-checked-symbolic.svg")),
2068
-gtk-recolor(url("assets/radio-checked-symbolic.png")));
2069
border-image: none;
2070
}
2071
2072
2073
/************
2074
* GtkScale *
2075
************/
2076
scale {
2077
// sizing
2078
2079
$_marks_lenght: 8px;
2080
$_marks_distance: 8px;
2081
2082
min-height: 12px;
2083
min-width: 12px;
2084
padding: 12px;
2085
2086
* { transition: $material_transition; }
2087
2088
// the slider is inside the trough, so to have make it bigger there's a negative margin
2089
slider {
2090
min-height: $small_size;
2091
min-width: $small_size;
2092
margin: -10px;
2093
}
2094
2095
// the backing bit
2096
trough {
2097
outline-offset: 2px;
2098
background-color: $track_color;
2099
2100
&:disabled { color: $insensitive_fg_color; }
2101
}
2102
2103
// the colored part of the backing bit
2104
highlight {
2105
background-color: $accent_bg_color;
2106
2107
&:disabled { background-color: transparent; }
2108
}
2109
2110
// this is another differently styled part of the backing bit, the most relevant use case is for example
2111
// in media player to indicate how much video stream as been cached
2112
fill {
2113
background-color: $track_color;
2114
2115
&:disabled { background-color: transparent; }
2116
}
2117
2118
slider {
2119
transition: all $material_faster $material_ease;
2120
// border-radius: 100%;
2121
// background-color: $accent_bg_color;
2122
background-repeat: no-repeat;
2123
background-position: center;
2124
2125
@each $s,$as in ('',''),
2126
(':disabled','-insensitive') {
2127
&#{$s} {
2128
$_url: 'assets/slider#{$as}#{$asset_suffix}';
2129
background-image: -gtk-scaled(url('#{$_url}.png'),
2130
url('#{$_url}@2.png'));
2131
}
2132
}
2133
2134
background-size: calc(100% - 8px);
2135
2136
&:hover { background-size: calc(100% - 4px); }
2137
2138
&:active { background-size: calc(100% - 0px); }
2139
}
2140
2141
// click-and-hold the slider to activate
2142
&.fine-tune {
2143
// to make the slider shrink in fine-tune mode
2144
slider { background-size: calc(100% - 12px); }
2145
}
2146
2147
value { color: gtkalpha(currentColor, $hint_opacity); }
2148
2149
marks {
2150
color: $track_color;
2151
2152
@each $marks_class, $marks_pos, $marks_margin in (top, top, bottom),
2153
(bottom, bottom, top),
2154
(top, left, right),
2155
(bottom, right, left) {
2156
&.#{$marks_class} {
2157
margin-#{$marks_margin}: $_marks_distance;
2158
margin-#{$marks_pos}: -($_marks_distance + $_marks_lenght);
2159
}
2160
}
2161
}
2162
2163
&.horizontal {
2164
indicator {
2165
min-height: $_marks_lenght;
2166
min-width: 1px;
2167
}
2168
}
2169
2170
&.vertical {
2171
indicator {
2172
min-height: 1px;
2173
min-width: $_marks_lenght;
2174
}
2175
}
2176
2177
// *WARNING* scale with marks madness following
2178
2179
// FIXME: OSD and selected list rows missing, I don't feel like adding the other 144 assets needed for those...
2180
$suffix: if($variant == 'light', '', '-dark');
2181
2182
@each $dir_class, $dir_infix in ('horizontal', 'horz'),
2183
('vertical', 'vert') {
2184
@each $marks_infix, $nth_child in ('scale-has-marks-above', ':last-child:not(:only-child)'),
2185
('scale-has-marks-below', ':first-child:not(:only-child)') {
2186
@each $state, $state_infix in ('', ''),
2187
(':disabled', '-insensitive') {
2188
&.#{$dir_class} {
2189
%#{$marks_infix}-#{$dir_infix},
2190
contents#{$nth_child} > trough > slider {
2191
&#{$state} {
2192
$_scale_asset: 'assets/slider-#{$dir_infix}-#{$marks_infix}#{$state_infix}#{$suffix}';
2193
2194
background-image: -gtk-scaled(url('#{$_scale_asset}.png'), url('#{$_scale_asset}@2.png'));
2195
}
2196
2197
@if $dir_class == 'horizontal' {
2198
min-height: 30px;
2199
min-width: $small_size;
2200
2201
@if $marks_infix == 'scale-has-marks-above' {
2202
margin-top: -16px;
2203
2204
background-position: center calc(100% - 4px);
2205
2206
&:hover { background-position: center calc(100% - 2px); }
2207
2208
&:active { background-position: center calc(100% - 0px); }
2209
}
2210
2211
@if $marks_infix == 'scale-has-marks-below' {
2212
margin-bottom: -16px;
2213
2214
background-position: center calc(4px);
2215
2216
&:hover { background-position: center calc(2px); }
2217
2218
&:active { background-position: center calc(0px); }
2219
}
2220
}
2221
2222
@if $dir_class == 'vertical' {
2223
min-height: $small_size;
2224
min-width: 30px;
2225
2226
@if $marks_infix == 'scale-has-marks-above' {
2227
margin-left: -16px;
2228
2229
background-position: calc(4px) center;
2230
2231
&:hover { background-position: calc(2px) center; }
2232
2233
&:active { background-position: calc(0px) center; }
2234
}
2235
2236
@if $marks_infix == 'scale-has-marks-below' {
2237
margin-right: -16px;
2238
2239
background-position: calc(100% - 4px) center;
2240
2241
&:hover { background-position: calc(100% - 2px) center; }
2242
2243
&:active { background-position: calc(100% - 0px) center; }
2244
}
2245
}
2246
}
2247
2248
@at-root %#{$marks_infix}-#{$dir_infix}-fine-tune,
2249
&.fine-tune contents#{$nth_child} > trough > slider {
2250
// bigger negative margins to make the trough grow here as well
2251
2252
@if $dir_class == 'horizontal' {
2253
@if $marks_infix == 'scale-has-marks-above' { background-position: center calc(100% - 6px); }
2254
2255
@if $marks_infix == 'scale-has-marks-below' { background-position: center calc(6px); }
2256
}
2257
2258
@if $dir_class == 'vertical' {
2259
@if $marks_infix == 'scale-has-marks-above' { background-position: calc(6px) center; }
2260
2261
@if $marks_infix == 'scale-has-marks-below' { background-position: calc(100% - 6px) center; }
2262
}
2263
}
2264
}
2265
}
2266
}
2267
}
2268
2269
&.color {
2270
min-height: 0;
2271
min-width: 0;
2272
2273
&.horizontal {
2274
padding: 0 0 12px 0;
2275
2276
trough {
2277
padding-bottom: $bar_size;
2278
}
2279
2280
slider {
2281
@extend %scale-has-marks-above-horz;
2282
2283
margin-bottom: -10px - $bar_size;
2284
margin-top: 0;
2285
}
2286
}
2287
2288
&.vertical {
2289
&:dir(ltr) {
2290
padding: 0 0 0 12px;
2291
2292
trough {
2293
padding-left: $bar_size;
2294
}
2295
2296
slider {
2297
@extend %scale-has-marks-below-vert;
2298
2299
margin-left: -10px - $bar_size;
2300
margin-right: 0;
2301
}
2302
}
2303
2304
&:dir(rtl) {
2305
padding: 0 12px 0 0;
2306
2307
trough {
2308
padding-right: $bar_size;
2309
}
2310
2311
slider {
2312
@extend %scale-has-marks-above-vert;
2313
2314
margin-right: -10px - $bar_size;
2315
margin-left: 0;
2316
}
2317
}
2318
}
2319
2320
&.fine-tune {
2321
&.horizontal {
2322
slider {
2323
@extend %scale-has-marks-above-horz-fine-tune;
2324
}
2325
}
2326
2327
&.vertical {
2328
&:dir(ltr) {
2329
slider {
2330
@extend %scale-has-marks-below-vert-fine-tune;
2331
}
2332
}
2333
2334
&:dir(rtl) {
2335
slider {
2336
@extend %scale-has-marks-above-vert-fine-tune;
2337
}
2338
}
2339
}
2340
}
2341
}
2342
}
2343
2344
2345
/*****************
2346
* Progress bars *
2347
*****************/
2348
progressbar {
2349
// sizing
2350
&.horizontal {
2351
trough,
2352
progress { min-height: $bar_size; }
2353
}
2354
2355
&.vertical {
2356
trough,
2357
progress { min-width: $bar_size; }
2358
}
2359
2360
// FIXME: insensitive state missing and some other state should be set probably
2361
color: $tertiary_fg_color;
2362
font-size: smaller;
2363
2364
trough { background-color: scale-alpha($selected_bg_color, $lower_opacity); }
2365
2366
progress { background-color: $selected_bg_color; }
2367
2368
&.osd { // progressbar.osd used for epiphany page loading progress
2369
// min-width: $bar_size;
2370
// min-height: $bar_size;
2371
// background-color: transparent;
2372
2373
// trough { background-color: transparent; }
2374
2375
progress {
2376
}
2377
}
2378
}
2379
2380
2381
/*************
2382
* Level Bar *
2383
*************/
2384
levelbar {
2385
block {
2386
min-width: $medium_size;
2387
min-height: $bar_size;
2388
}
2389
2390
&.vertical block {
2391
min-width: $bar_size;
2392
min-height: $medium_size;
2393
}
2394
2395
trough {
2396
padding: 2px;
2397
border-radius: 2px;
2398
2399
@include entry(normal);
2400
2401
&:disabled { @include entry(insensitive); }
2402
}
2403
2404
&.horizontal.discrete block { margin: 0 1px; }
2405
2406
&.vertical.discrete block { margin: 1px 0; }
2407
2408
&.horizontal.discrete trough { padding: 2px 1px; }
2409
2410
&.vertical.discrete trough { padding: 1px 2px; }
2411
2412
block {
2413
&.low {
2414
background-color: $warning_color;
2415
}
2416
2417
&.high {
2418
background-color: $selected_bg_color;
2419
}
2420
2421
&.full {
2422
background-color: $success_color;
2423
}
2424
2425
&.empty {
2426
background-color: $track_color;
2427
color: $insensitive_fg_color;
2428
}
2429
}
2430
}
2431
2432
2433
/****************
2434
* Print dialog *
2435
*****************/
2436
printdialog {
2437
paper {
2438
padding: 0;
2439
border: 1px solid $borders_color;
2440
background: $base_color;
2441
color: $fg_color;
2442
}
2443
2444
.dialog-action-box { margin: 12px; }
2445
}
2446
2447
2448
/**********
2449
* Frames *
2450
**********/
2451
frame > border,
2452
.frame {
2453
margin: 0;
2454
padding: 0;
2455
border: 1px solid $borders_color;
2456
border-radius: 0;
2457
box-shadow: none;
2458
2459
&.flat { border-style: none; }
2460
}
2461
2462
actionbar > revealer > box {
2463
padding: $container_padding;
2464
border-top: 1px solid $borders_color;
2465
}
2466
2467
scrolledwindow {
2468
viewport.frame { // avoid double borders when viewport inside scrolled window
2469
border-style: none;
2470
}
2471
2472
// This is used when content is touch-dragged past boundaries.
2473
// draws a box on top of the content, the size changes programmatically.
2474
overshoot {
2475
&.top { @include overshoot(top); }
2476
2477
&.bottom { @include overshoot(bottom); }
2478
2479
&.left { @include overshoot(left); }
2480
2481
&.right { @include overshoot(right); }
2482
}
2483
2484
// Overflow indication, works similarly to the overshoot, the size if fixed tho.
2485
undershoot {
2486
&.top { @include undershoot(top); }
2487
2488
&.bottom { @include undershoot(bottom); }
2489
2490
&.left { @include undershoot(left); }
2491
2492
&.right { @include undershoot(right); }
2493
}
2494
2495
junction { // the small square between two scrollbars
2496
border-style: solid none none solid;
2497
border-width: 1px;
2498
border-color: $borders_color;
2499
background-color: $base_color;
2500
2501
&:dir(rtl) { border-style: solid solid none none; }
2502
}
2503
}
2504
2505
//vbox and hbox separators
2506
separator {
2507
min-width: 1px;
2508
min-height: 1px;
2509
background: $borders_color;
2510
}
2511
2512
2513
/*********
2514
* Lists *
2515
*********/
2516
list {
2517
border-color: $borders_color;
2518
background-color: $base_color;
2519
2520
row { padding: 2px; }
2521
}
2522
2523
row {
2524
transition: $material_transition;
2525
2526
&:hover { transition: none; }
2527
2528
&.activatable {
2529
background-image: radial-gradient(circle farthest-corner at center,
2530
gtkalpha(currentColor, 0) 100%,
2531
transparent 0%),
2532
image(gtkalpha(currentColor, 0));
2533
2534
&:hover {
2535
background-image: radial-gradient(circle farthest-corner at center,
2536
gtkalpha(currentColor, 0) 100%,
2537
transparent 0%),
2538
image(gtkalpha(currentColor, 0.05));
2539
}
2540
2541
&.has-open-popup, // this is for indicathing which row generated a popover see https://bugzilla.gnome.org/show_bug.cgi?id=754411
2542
&:active {
2543
transition: $material_transition, background-image 0;
2544
animation: row_ripple_effect $material_slower $material_ease_out forwards;
2545
}
2546
}
2547
2548
&:selected { @extend %selected_items; }
2549
}
2550
2551
2552
/*********************
2553
* App Notifications *
2554
*********************/
2555
.app-notification,
2556
.app-notification.frame {
2557
@extend %osd;
2558
2559
@extend toolbar.osd;
2560
2561
margin: 8px;
2562
2563
border { border: none; }
2564
}
2565
2566
2567
/*************
2568
* Expanders *
2569
*************/
2570
expander {
2571
arrow {
2572
transition: all $material_faster $material_ease;
2573
min-width: 16px;
2574
min-height: 16px;
2575
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
2576
-gtk-icon-transform: rotate(-90deg);
2577
2578
&:dir(rtl) { -gtk-icon-transform: rotate(90deg); }
2579
2580
&:checked { -gtk-icon-transform: unset; }
2581
2582
color: $secondary_fg_color;
2583
2584
&:hover, &:active { color: $fg_color; }
2585
2586
&:disabled { color: $insensitive_secondary_fg_color; }
2587
2588
&:selected {
2589
color: $secondary_selected_fg_color;
2590
2591
&:hover, &:active { color: $selected_fg_color; }
2592
2593
&:disabled { color: $insensitive_secondary_selected_fg_color; }
2594
}
2595
}
2596
}
2597
2598
2599
/************
2600
* Calendar *
2601
***********/
2602
calendar {
2603
padding: 1px;
2604
border: 1px solid $borders_color;
2605
color: $fg_color;
2606
2607
&:disabled { color: $insensitive_fg_color; }
2608
2609
&:selected {
2610
@extend %selected_items;
2611
2612
border-radius: 2px + 1px;
2613
}
2614
2615
&.header {
2616
border: none;
2617
border-bottom: 1px solid $borders_color;
2618
border-radius: 0;
2619
}
2620
2621
&.button { @extend %button_basic.flat; }
2622
2623
&:indeterminate { color: gtkalpha(currentColor, $disabled_opacity); }
2624
2625
&.highlight {
2626
color: gtkalpha(currentColor, $hint_opacity);
2627
font-weight: 500;
2628
}
2629
}
2630
2631
2632
/***********
2633
* Dialogs *
2634
***********/
2635
messagedialog { // Message Dialog styling
2636
&.background { background-color: $light_color; }
2637
2638
.titlebar {
2639
min-height: $small_size;
2640
border-style: none;
2641
box-shadow: inset 0 1px $highlight_color;
2642
background-color: $light_color;
2643
}
2644
2645
&.csd { // rounded bottom border styling for csd version
2646
&.background {
2647
// bigger radius for better antialiasing
2648
border-bottom-left-radius: 2px;
2649
border-bottom-right-radius: 2px;
2650
}
2651
2652
.dialog-action-area button {
2653
padding: 8px 16px;
2654
border-top: 1px solid $borders_color;
2655
border-radius: 0;
2656
2657
@extend %button_basic.flat;
2658
2659
&:first-child{ border-bottom-left-radius: 2px; }
2660
2661
&:last-child { border-bottom-right-radius: 2px; }
2662
}
2663
}
2664
}
2665
2666
filechooser {
2667
.dialog-action-box { border-top: 1px solid $borders_color; }
2668
2669
#pathbarbox { border-bottom: 1px solid $borders_color; }
2670
}
2671
2672
filechooserbutton:drop(active) {
2673
box-shadow: none;
2674
}
2675
2676
2677
/***********
2678
* Sidebar *
2679
***********/
2680
.sidebar {
2681
border-style: none;
2682
background-color: $light_color;
2683
2684
@at-root %sidebar_left,
2685
&:dir(ltr),
2686
&.left,
2687
&.left:dir(rtl) {
2688
border-right: 1px solid $borders_color;
2689
border-left-style: none;
2690
}
2691
2692
@at-root %sidebar_right
2693
&:dir(rtl),
2694
&.right {
2695
border-left: 1px solid $borders_color;
2696
border-right-style: none;
2697
}
2698
2699
list { background-color: transparent; }
2700
2701
paned & { &.left, &.right, &.left:dir(rtl), &:dir(rtl), &:dir(ltr), & { border-style: none; }}
2702
}
2703
2704
stacksidebar {
2705
&.sidebar {
2706
&:dir(ltr),
2707
&.left,
2708
&.left:dir(rtl) { list { @extend %sidebar_left; }}
2709
2710
&:dir(rtl),
2711
&.right { list { @extend %sidebar_right; }}
2712
}
2713
2714
row {
2715
padding: 10px 4px;
2716
2717
> label {
2718
padding-left: 6px;
2719
padding-right: 6px;
2720
}
2721
2722
&.needs-attention > label { @extend %needs_attention; }
2723
}
2724
}
2725
2726
2727
/****************
2728
* File chooser *
2729
****************/
2730
placessidebar {
2731
> viewport.frame { border-style: none; }
2732
2733
row {
2734
// Needs overriding of the GtkListBoxRow padding
2735
min-height: 32px;
2736
padding: 0;
2737
2738
// Using margins/padding directly in the SidebarRow
2739
// will make the animation of the new bookmark row jump
2740
> revealer { padding: 0 12px; }
2741
2742
&:selected { color: $selected_fg_color; }
2743
2744
&:disabled { color: $insensitive_fg_color; }
2745
2746
image.sidebar-icon {
2747
opacity: $hint_opacity; // dim the device icons
2748
2749
&:dir(ltr) { padding-right: 8px; }
2750
&:dir(rtl) { padding-left: 8px; }
2751
}
2752
2753
label.sidebar-label {
2754
&:dir(ltr) { padding-right: 2px; }
2755
&:dir(rtl) { padding-left: 2px; }
2756
}
2757
2758
@at-root button.sidebar-button {
2759
@extend %button_basic.flat;
2760
2761
min-height: $small_size;
2762
min-width: $small_size;
2763
margin-top: 0;
2764
margin-bottom: 0;
2765
padding: 0;
2766
border-radius: 100%;
2767
-gtk-outline-radius: 100%;
2768
2769
row:selected & { @extend %button_selected.flat; }
2770
}
2771
2772
&.sidebar-placeholder-row {
2773
min-height: 2px;
2774
padding: 0 8px;
2775
background-image: image($accent_bg_color);
2776
background-clip: content-box;
2777
}
2778
2779
&.sidebar-new-bookmark-row { color: $accent_bg_color; }
2780
2781
&:drop(active):not(:disabled) {
2782
box-shadow: inset 0 0 0 2px $accent_bg_color;
2783
2784
&:selected {
2785
// background-color: $accent_bg_color;
2786
// color: $selected_fg_color;
2787
}
2788
}
2789
}
2790
}
2791
2792
placesview {
2793
.server-list-button > image { -gtk-icon-transform: rotate(0turn); }
2794
2795
.server-list-button:checked > image { -gtk-icon-transform: rotate(-0.5turn); }
2796
2797
// this selects the "connect to server" label
2798
> actionbar > revealer > box > label {
2799
padding-left: 8px;
2800
padding-right: 8px;
2801
}
2802
}
2803
2804
2805
/*********
2806
* Paned *
2807
*********/
2808
paned {
2809
> separator {
2810
min-width: 1px;
2811
min-height: 1px;
2812
-gtk-icon-source: none; // defeats the ugly default handle decoration
2813
border-style: none; // just to be sure
2814
background-color: transparent;
2815
// workaround, using background istead of a border since the border will get rendered twice (?)
2816
background-image: image($borders_color);
2817
background-size: 1px 1px;
2818
2819
&.wide {
2820
min-width: 6px;
2821
min-height: 6px;
2822
background-color: $bg_color;
2823
background-image: image($borders_color), image($borders_color);
2824
background-size: 1px 1px, 1px 1px;
2825
}
2826
}
2827
2828
&.horizontal > separator {
2829
background-repeat: repeat-y;
2830
2831
&:dir(ltr) {
2832
margin: 0 -8px 0 0;
2833
padding: 0 8px 0 0;
2834
background-position: left;
2835
}
2836
2837
&:dir(rtl) {
2838
margin: 0 0 0 -8px;
2839
padding: 0 0 0 8px;
2840
background-position: right;
2841
}
2842
2843
&.wide {
2844
margin: 0;
2845
padding: 0;
2846
background-repeat: repeat-y, repeat-y;
2847
background-position: left, right;
2848
}
2849
}
2850
2851
&.vertical > separator {
2852
margin: 0 0 -8px 0;
2853
padding: 0 0 8px 0;
2854
background-repeat: repeat-x;
2855
background-position: top;
2856
2857
&.wide {
2858
margin: 0;
2859
padding: 0;
2860
background-repeat: repeat-x, repeat-x;
2861
background-position: bottom, top;
2862
}
2863
}
2864
}
2865
2866
2867
/**************
2868
* GtkInfoBar *
2869
**************/
2870
infobar { border-style: none; }
2871
2872
.info { background-color: $info_bg_color; }
2873
2874
.question { background-color: $question_bg_color; }
2875
2876
.warning { background-color: $warning_bg_color; }
2877
2878
.error { background-color: $error_bg_color; }
2879
2880
.info,
2881
.question,
2882
.warning,
2883
.error {
2884
color: $selected_fg_color;
2885
2886
button { @extend %button_selected; }
2887
2888
label:selected {
2889
}
2890
2891
*:link { @extend %link_selected; }
2892
}
2893
2894
2895
/************
2896
* Tooltips *
2897
************/
2898
tooltip {
2899
&.background {
2900
// background-color needs to be set this way otherwise it gets drawn twice
2901
// see https://bugzilla.gnome.org/show_bug.cgi?id=736155 for details.
2902
background-color: scale-alpha($base_color, $higher_opacity);
2903
}
2904
2905
// @extend %osd;
2906
2907
// padding: 4px; /* not working */
2908
border-radius: 2px;
2909
box-shadow: none; // otherwise it gets inherited by windowframe.csd
2910
2911
// FIXME: we need a border or tooltips vanish on black background.
2912
decoration { background-color: transparent; }
2913
2914
label {
2915
min-height: 32px - 6px * 2;
2916
padding: 2px 8px - 6px;
2917
}
2918
2919
* { // Yeah this is ugly
2920
padding: 0;
2921
background-color: transparent;
2922
color: inherit;
2923
}
2924
}
2925
2926
2927
/*****************
2928
* Color Chooser *
2929
*****************/
2930
colorswatch {
2931
// This widget is made of two boxes one on top of the other, the lower box is colorswatch {} the other one
2932
// is colorswatch overlay {}, colorswatch has the programmatically set background, so most of the style is
2933
// applied to the overlay box.
2934
2935
// base color corners rounding
2936
// to avoid the artifacts caused by rounded corner anti-aliasing the base color
2937
// sports a bigger radius.
2938
// nth-child is needed by the custom color strip.
2939
2940
&.top {
2941
border-top-left-radius: $material_radius + 0.5px;
2942
border-top-right-radius: $material_radius + 0.5px;
2943
2944
overlay {
2945
border-top-left-radius: $material_radius;
2946
border-top-right-radius: $material_radius;
2947
}
2948
}
2949
2950
&.bottom {
2951
border-bottom-left-radius: $material_radius + 0.5px;
2952
border-bottom-right-radius: $material_radius + 0.5px;
2953
2954
overlay {
2955
border-bottom-left-radius: $material_radius;
2956
border-bottom-right-radius: $material_radius;
2957
}
2958
}
2959
2960
&.left,
2961
&:first-child:not(.top) {
2962
border-top-left-radius: $material_radius + 0.5px;
2963
border-bottom-left-radius: $material_radius + 0.5px;
2964
2965
overlay {
2966
border-top-left-radius: $material_radius;
2967
border-bottom-left-radius: $material_radius;
2968
}
2969
}
2970
2971
&.right,
2972
&:last-child:not(.bottom) {
2973
border-top-right-radius: $material_radius + 0.5px;
2974
border-bottom-right-radius: $material_radius + 0.5px;
2975
2976
overlay {
2977
border-top-right-radius: $material_radius;
2978
border-bottom-right-radius: $material_radius;
2979
}
2980
}
2981
2982
&.dark overlay { color: white; }
2983
2984
&.light overlay { color: scale-alpha(black, 0.8); }
2985
2986
&.dark { color: white; } // for focus ring
2987
2988
&.light { color: scale-alpha(black, 0.8); } // for focus ring
2989
2990
&:drop(active) {
2991
box-shadow: none;
2992
2993
&.light overlay {
2994
box-shadow: $z-depth-1, 0 0 0 2px $accent_bg_color;
2995
}
2996
2997
&.dark overlay {
2998
box-shadow: $z-depth-1, 0 0 0 2px $accent_bg_color;
2999
}
3000
}
3001
3002
overlay {
3003
transition: $shadow_transition;
3004
box-shadow: $z-depth-1;
3005
3006
&:hover { box-shadow: $z-depth-2; }
3007
}
3008
3009
&#add-color-button {
3010
border-radius: $material_radius $material_radius 0 0;
3011
color: white; // for focus ring
3012
3013
&:only-child { border-radius: $material_radius; }
3014
3015
overlay {
3016
background-image: linear-gradient(to right,
3017
$error_bg_color 25%,
3018
$warning_bg_color 25%, $warning_bg_color 50%,
3019
$info_bg_color 50%, $info_bg_color 75%,
3020
$question_bg_color 75%);
3021
color: white;
3022
}
3023
}
3024
3025
&:disabled {
3026
opacity: $disabled_opacity;
3027
3028
overlay { box-shadow: none; }
3029
}
3030
3031
row:selected & {
3032
}
3033
3034
&#editor-color-sample {
3035
border-radius: $material_radius + 0.5px;
3036
3037
overlay { border-radius: $material_radius; }
3038
3039
// overlay:hover { box-shadow: $z-depth-1; }
3040
}
3041
}
3042
3043
// colorscale popup
3044
colorchooser .popover.osd {
3045
transition: $shadow_transition;
3046
border-radius: 2px;
3047
box-shadow: $z-depth-2;
3048
background-color: $base_color;
3049
3050
&:backdrop { box-shadow: $z-depth-1; }
3051
3052
spinbutton:not(.vertical) { @extend %entry.flat; }
3053
}
3054
3055
3056
/********
3057
* Misc *
3058
********/
3059
//content view (grid/list)
3060
.content-view {
3061
background-color: $bg_color;
3062
3063
// &:hover { -gtk-icon-effect: highlight; }
3064
3065
rubberband { @extend rubberband; }
3066
}
3067
3068
.scale-popup {
3069
.osd & { @extend %osd; }
3070
3071
.osd & button.flat { //FIXME: quick hack, redo properly
3072
}
3073
3074
button { // +/- buttons on GtkVolumeButton popup
3075
}
3076
}
3077
3078
3079
/**********************
3080
* Window Decorations *
3081
*********************/
3082
decoration {
3083
transition: $shadow_transition;
3084
border-radius: 2px 2px 0 0;
3085
box-shadow: $z-depth-4, 0 16px 16px transparent;
3086
3087
// FIXME rationalize shadows
3088
3089
// this is used for the resize cursor area
3090
margin: 8px;
3091
3092
&:backdrop {
3093
// the transparent shadow here is to enforce that the shadow extents don't
3094
// change when we go to backdrop, to prevent jumping windows.
3095
// The biggest shadow should be in the same order then in the active state
3096
// or the jumping will happen during the transition.
3097
box-shadow: $z-depth-2, 0 16px 16px transparent;
3098
}
3099
3100
.fullscreen &,
3101
.tiled & { border-radius: 0; }
3102
3103
.popup & { box-shadow: none; }
3104
3105
// server-side decorations as used by mutter
3106
.ssd & { box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16); } //just doing borders, wm draws actual shadows
3107
3108
.csd.popup & {
3109
border-radius: 2px;
3110
box-shadow: $z-depth-2;
3111
}
3112
3113
tooltip.csd & {
3114
border-radius: 2px;
3115
box-shadow: $z-depth-2;
3116
}
3117
3118
messagedialog.csd & {
3119
border-radius: 2px;
3120
// box-shadow: $z-depth-4, 0 16px 16px transparent;
3121
3122
// &:backdrop { box-shadow: $z-depth-2, 0 16px 16px transparent; }
3123
}
3124
3125
.solid-csd & {
3126
margin: 4px;
3127
// border: solid 1px $borders_color;
3128
border-radius: 0;
3129
box-shadow: none;
3130
background-color: $bg_color;
3131
}
3132
}
3133
3134
// Window Close button
3135
button.titlebutton {
3136
// @extend %button_basic.flat;
3137
3138
@extend %button_basic.image-button;
3139
3140
.selection-mode & {
3141
}
3142
}
3143
3144
3145
// catch all extend :)
3146
3147
%selected_items {
3148
background-color: $selected_bg_color;
3149
3150
@at-root %nobg_selected_items, & {
3151
color: $selected_fg_color;
3152
3153
&:disabled { color: $insensitive_selected_fg_color; }
3154
}
3155
}
3156
3157
.monospace { font: Monospace; }
3158
3159
3160
/**********************
3161
* Touch Copy & Paste *
3162
*********************/
3163
//touch selection handlebars for the Popover.osd above
3164
cursor-handle {
3165
border-radius: 100px;
3166
background-color: $accent_bg_color;
3167
background-image: none;
3168
3169
&.top:dir(ltr), &.bottom:dir(rtl) {
3170
padding-left: 6px;
3171
border-top-right-radius: 0;
3172
}
3173
3174
&.bottom:dir(ltr), &.top:dir(rtl) {
3175
padding-right: 6px;
3176
border-top-left-radius: 0;
3177
}
3178
3179
&.insertion-cursor:dir(ltr), &.insertion-cursor:dir(rtl) {
3180
-GtkWidget-text-handle-width: 24;
3181
-GtkWidget-text-handle-height: 30;
3182
3183
$_url: 'assets/slider-horz-scale-has-marks-above#{$asset_suffix}';
3184
-gtk-icon-source: -gtk-scaled(url('#{$_url}.png'),
3185
url('#{$_url}@2.png'));
3186
}
3187
}
3188
3189
.context-menu { font: initial; } // Decouple the font of context menus from their entry/textview
3190
3191
button.circular { // FIXME: aggregate to buttons
3192
border-radius: 100px;
3193
-gtk-outline-radius: 100px;
3194
3195
label { padding: 0; }
3196
}
3197
3198
// shortcut window keys
3199
.keycap {
3200
min-width: 28px - 8px * 2;
3201
min-height: 28px - 2px;
3202
margin-top: 2px;
3203
padding-bottom: 2px;
3204
padding-left: 8px;
3205
padding-right: 8px;
3206
3207
border: solid 1px $borders_color;
3208
border-radius: 2px + 1px;
3209
box-shadow: inset 0 -2px $borders_color;
3210
background-color: $base_color;
3211
color: $fg_color;
3212
font-size: smaller;
3213
}
3214
3215
*:drop(active) { // FIXME needs to be done widget by widget, this wildcard should really die
3216
transition: $material_transition;
3217
box-shadow: $z-depth-1, inset 0 0 0 2px $accent_bg_color;
3218
caret-color: $accent_bg_color;
3219
}
3220
3221
stackswitcher button.text-button { min-width: 100px; } // FIXME aggregate with buttons
3222
3223
stackswitcher button.circular,
3224
stackswitcher button.text-button.circular { // FIXME aggregate with buttons
3225
min-width: $medium_size;
3226
min-height: $medium_size;
3227
padding: 0;
3228
}
3229