1# vim:set ft=gtkrc ts=2 sw=2 sts=2 ai et:
2#
3# This is the main theme file, handling all the default widgets and theme
4# properties. Since GTK+ 2 is old, we need to overcome some of its limitations,
5# which is also mostly done in this file. Sadly not all of them can be overcome
6# so there will always be a visible difference between the GTK+ 2 and 3 theme.
7
8style "default" {
9
10  xthickness = 1
11  ythickness = 1
12
13  ####################
14  # Style Properties #
15  ####################
16
17  GtkWidget::focus-line-width = 1
18  GtkWidget::focus-line-pattern = "\2\1"
19
20  GtkToolbar::internal-padding = 4
21  GtkToolButton::icon-spacing  = 4
22
23  GtkWidget::tooltip-radius    = 3
24  GtkWidget::tooltip-alpha     = 235
25  GtkWidget::new-tooltip-style = 1 #for compatibility
26
27  GtkWidget::link-color              = @link_color
28  GtkWidget::visited-link-color      = @visited_link_color
29  GnomeHRef::link_color              = @link_color
30  GtkHTML::link-color                = @link_color
31  GtkHTML::vlink-color               = @visited_link_color
32  GtkIMHtml::hyperlink-color         = @link_color
33  GtkIMHtml::hyperlink-visited-color = @visited_link_color
34
35  GtkSeparatorMenuItem::horizontal-padding = 0
36  GtkSeparatorMenuItem::wide-separators    = 1
37  GtkSeparatorMenuItem::separator-height   = 1
38
39  GtkButton::child-displacement-y = 0
40
41  GtkButton::default-border         = {0, 0, 0, 0}
42  GtkButton::default-outside-border = {0, 0, 0, 0}
43  GtkButton::inner-border           = {4, 4, 4, 4}
44
45  GtkEntry::state-hint = 1
46  GtkEntry::inner-border = {7, 7, 4, 5}
47
48  GtkPaned::handle-size = 8
49  GtkHPaned::handle-size = 8
50  GtkVPaned::handle-size = 8
51
52  GtkScrollbar::trough-border = 0
53  GtkRange::trough-border     = 0
54  GtkRange::slider-width      = 13
55  GtkRange::stepper-size      = 0
56  GtkRange::activate-slider   = 1
57
58  GtkScrollbar::activate-slider              = 1
59  GtkScrollbar::stepper-size                 = 0
60  GtkScrollbar::has-backward-stepper         = 0
61  GtkScrollbar::has-forward-stepper          = 0
62  GtkScrollbar::min-slider-length            = 48 # 42 + 2*3 (margins)
63  GtkScrolledWindow::scrollbar-spacing       = 0
64  GtkScrolledWindow::scrollbars-within-bevel = 1
65
66  GtkScale::slider_length       = 26
67  GtkScale::slider_width        = 26
68  GtkScale::trough-side-details = 1
69
70  GtkProgressBar::min-horizontal-bar-height = 6
71  GtkProgressBar::min-vertical-bar-width    = 6
72  # Making this bigger than the min[height,width]-2*[y,x]spacing makes the
73  # whole progressbar thicker, so by setting it to the exact above value
74  # we get the maximum spacing between the text and the edges without
75  # doing so.
76  GtkProgressBar::xspacing = 4
77  GtkProgressBar::yspacing = 4
78
79  GtkStatusbar::shadow_type    = GTK_SHADOW_NONE
80  GtkSpinButton::shadow_type   = GTK_SHADOW_NONE
81  GtkMenuBar::shadow-type      = GTK_SHADOW_NONE
82  GtkToolbar::shadow-type      = GTK_SHADOW_NONE
83  # TODO: find out what this comment means:
84  # ( every window is misaligned for the sake of menus ):
85  GtkMenuBar::internal-padding = 0
86  GtkMenu::horizontal-padding  = 0
87  GtkMenu::vertical-padding    = 2
88  GtkMenu::double-arrows       = 0
89  GtkMenuItem::arrow-scaling   = 1
90  GtkMenuItem::toggle-spacing  = 10
91
92  GtkCheckButton::indicator_spacing = 3
93  GtkOptionMenu::indicator_spacing  = {13, 13, 5, 8}
94
95  GtkTreeView::expander-size        = 16
96  GtkTreeView::vertical-separator   = 0
97  GtkTreeView::horizontal-separator = 4
98  GtkTreeView::allow-rules          = 0
99  # Set this because some apps read it
100  GtkTreeView::odd-row-color        = @base_color
101  GtkTreeView::even-row-color       = @base_color
102
103  GtkExpander::expander-size = 16
104
105  GtkNotebook::tab-overlap = 4
106
107  ##########
108  # Colors #
109  ##########
110
111  bg[NORMAL]      = @bg_color
112  bg[PRELIGHT]    = @bg_color
113  bg[SELECTED]    = @selected_bg_color
114  bg[INSENSITIVE] = @insensitive_bg_color
115  bg[ACTIVE]      = @bg_color
116
117  fg[NORMAL]      = @fg_color
118  fg[PRELIGHT]    = @fg_color
119  fg[SELECTED]    = @selected_fg_color
120  fg[INSENSITIVE] = @insensitive_fg_color
121  fg[ACTIVE]      = @fg_color
122
123  text[NORMAL]      = @text_color
124  text[PRELIGHT]    = @text_color
125  text[SELECTED]    = @selected_fg_color
126  text[INSENSITIVE] = @insensitive_fg_color
127  text[ACTIVE]      = @selected_fg_color
128
129  base[NORMAL]      = @base_color
130  base[PRELIGHT]    = shade (0.95, @bg_color)
131  base[SELECTED]    = @selected_bg_color
132  base[INSENSITIVE] = @insensitive_bg_color
133  base[ACTIVE]      = @selected_bg_color
134
135  # For succinctness, all reasonable pixmap options remain here
136
137  # Draw frame around menu in a non-compositied environment
138  # This needs to go before pixmap because we need to override some stuff
139  engine "adwaita" {}
140
141  engine "pixmap" {
142
143    #################
144    # Check Buttons #
145    #################
146
147    image {
148      function        = CHECK
149      state           = NORMAL
150      shadow          = OUT
151      overlay_file    = "assets/checkbox-unchecked.png"
152      overlay_stretch = FALSE
153    }
154
155    image {
156      function        = CHECK
157      state           = PRELIGHT
158      shadow          = OUT
159      overlay_file    = "assets/checkbox-unchecked-hover.png"
160      overlay_stretch = FALSE
161    }
162
163    image {
164      function        = CHECK
165      state           = ACTIVE
166      shadow          = OUT
167      overlay_file    = "assets/checkbox-unchecked-active.png"
168      overlay_stretch = FALSE
169    }
170
171    image {
172      function        = CHECK
173      state           = SELECTED
174      shadow          = OUT
175      overlay_file    = "assets/checkbox-unchecked.png"
176      overlay_stretch = FALSE
177    }
178
179    image {
180      function        = CHECK
181      state           = INSENSITIVE
182      shadow          = OUT
183      overlay_file    = "assets/checkbox-unchecked-insensitive.png"
184      overlay_stretch = FALSE
185    }
186
187    image {
188      function        = CHECK
189      state           = NORMAL
190      shadow          = IN
191      overlay_file    = "assets/checkbox-checked.png"
192      overlay_stretch = FALSE
193    }
194
195    image {
196      function        = CHECK
197      state           = PRELIGHT
198      shadow          = IN
199      overlay_file    = "assets/checkbox-checked.png"
200      overlay_stretch = FALSE
201    }
202
203    image {
204      function        = CHECK
205      state           = ACTIVE
206      shadow          = IN
207      overlay_file    = "assets/checkbox-checked-active.png"
208      overlay_stretch = FALSE
209    }
210
211    image {
212      function        = CHECK
213      state           = SELECTED
214      shadow          = IN
215      overlay_file    = "assets/checkbox-checked.png"
216      overlay_stretch = FALSE
217    }
218
219    image {
220      function        = CHECK
221      state           = INSENSITIVE
222      shadow          = IN
223      overlay_file    = "assets/checkbox-checked-insensitive.png"
224      overlay_stretch = FALSE
225    }
226
227    image {
228      function        = CHECK
229      state           = NORMAL
230      shadow          = ETCHED_IN
231      overlay_file    = "assets/checkbox-mixed.png"
232      overlay_stretch = FALSE
233    }
234
235    image {
236      function        = CHECK
237      state           = PRELIGHT
238      shadow          = ETCHED_IN
239      overlay_file    = "assets/checkbox-mixed.png"
240      overlay_stretch = FALSE
241    }
242
243    image {
244      function        = CHECK
245      state           = ACTIVE
246      shadow          = ETCHED_IN
247      overlay_file    = "assets/checkbox-mixed-active.png"
248      overlay_stretch = FALSE
249    }
250
251    image {
252      function        = CHECK
253      state           = SELECTED
254      shadow          = ETCHED_IN
255      overlay_file    = "assets/checkbox-mixed.png"
256      overlay_stretch = FALSE
257    }
258
259    image {
260      function        = CHECK
261      state           = INSENSITIVE
262      shadow          = ETCHED_IN
263      overlay_file    = "assets/checkbox-mixed-insensitive.png"
264      overlay_stretch = FALSE
265    }
266
267    #################
268    # Radio Buttons #
269    #################
270
271    image {
272      function        = OPTION
273      state           = NORMAL
274      shadow          = OUT
275      overlay_file    = "assets/radio-unchecked.png"
276      overlay_stretch = FALSE
277    }
278
279    image {
280      function        = OPTION
281      state           = PRELIGHT
282      shadow          = OUT
283      overlay_file    = "assets/radio-unchecked-hover.png"
284      overlay_stretch = FALSE
285    }
286
287    image {
288      function        = OPTION
289      state           = ACTIVE
290      shadow          = OUT
291      overlay_file    = "assets/radio-unchecked-active.png"
292      overlay_stretch = FALSE
293    }
294
295    image {
296      function        = OPTION
297      state           = SELECTED
298      shadow          = OUT
299      overlay_file    = "assets/radio-unchecked.png"
300      overlay_stretch = FALSE
301    }
302
303    image {
304      function        = OPTION
305      state           = INSENSITIVE
306      shadow          = OUT
307      overlay_file    = "assets/radio-unchecked-insensitive.png"
308      overlay_stretch = FALSE
309    }
310
311    image {
312      function        = OPTION
313      state           = NORMAL
314      shadow          = IN
315      overlay_file    = "assets/menu-radio-checked.png"
316      overlay_stretch = FALSE
317    }
318
319    image {
320      function        = OPTION
321      state           = PRELIGHT
322      shadow          = IN
323      overlay_file    = "assets/menu-radio-checked.png"
324      overlay_stretch = FALSE
325    }
326
327    image {
328      function        = OPTION
329      state           = ACTIVE
330      shadow          = IN
331      overlay_file    = "assets/menu-radio-checked.png"
332      overlay_stretch = FALSE
333    }
334
335    image {
336      function        = OPTION
337      state           = SELECTED
338      shadow          = IN
339      overlay_file    = "assets/menu-radio-checked.png"
340      overlay_stretch = FALSE
341    }
342
343    image {
344      function        = OPTION
345      state           = INSENSITIVE
346      shadow          = IN
347      overlay_file    = "assets/menu-radio-checked-insensitive.png"
348      overlay_stretch = FALSE
349    }
350
351    image {
352      function        = OPTION
353      state           = NORMAL
354      shadow          = ETCHED_IN
355      overlay_file    = "assets/radio-mixed.png"
356      overlay_stretch = FALSE
357    }
358
359    image {
360      function        = OPTION
361      state           = PRELIGHT
362      shadow          = ETCHED_IN
363      overlay_file    = "assets/radio-mixed.png"
364      overlay_stretch = FALSE
365    }
366
367    image {
368      function        = OPTION
369      state           = ACTIVE
370      shadow          = ETCHED_IN
371      overlay_file    = "assets/radio-mixed-active.png"
372      overlay_stretch = FALSE
373    }
374
375    image {
376      function        = OPTION
377      state           = SELECTED
378      shadow          = ETCHED_IN
379      overlay_file    = "assets/radio-mixed.png"
380      overlay_stretch = FALSE
381    }
382
383    image {
384      function        = OPTION
385      state           = INSENSITIVE
386      shadow          = ETCHED_IN
387      overlay_file    = "assets/radio-mixed-insensitive.png"
388      overlay_stretch = FALSE
389    }
390
391    ##########
392    # Arrows #
393    ##########
394
395    # Overrides
396
397    # Disable arrows in spinbuttons
398    image {
399      function = ARROW
400      detail = "spinbutton"
401    }
402
403    # QGtkStyle (used for Qt apps) *always* assumes scrollbars have
404    # arrows, so configure these here. Gtk2 apps will atually ignore
405    # this.
406
407    image {
408      function        = ARROW
409      overlay_file    = "assets/scrollbar-arrow-up.png"
410      detail          = "vscrollbar"
411      overlay_border  = { 0, 0, 0, 0 }
412      overlay_stretch = FALSE
413      arrow_direction = UP
414    }
415
416    image {
417      function        = ARROW
418      overlay_file    = "assets/scrollbar-arrow-down.png"
419      detail          = "vscrollbar"
420      overlay_border  = { 0, 0, 0, 0 }
421      overlay_stretch = FALSE
422      arrow_direction = DOWN
423    }
424
425    image {
426      function        = ARROW
427      overlay_file    = "assets/scrollbar-arrow-left.png"
428      detail          = "hscrollbar"
429      overlay_border  = { 0, 0, 0, 0 }
430      overlay_stretch = FALSE
431      arrow_direction = LEFT
432    }
433
434    image {
435      function        = ARROW
436      overlay_file    = "assets/scrollbar-arrow-right.png"
437      detail          = "hscrollbar"
438      overlay_border  = { 0, 0, 0, 0 }
439      overlay_stretch = FALSE
440      arrow_direction = RIGHT
441    }
442
443    image {
444      function    = BOX
445      detail      = "hscrollbar"
446      orientation = HORIZONTAL
447    }
448
449    image {
450      function    = BOX
451      detail      = "vscrollbar"
452      orientation = VERTICAL
453    }
454
455    # Menu arrows
456
457    image {
458      function        = ARROW
459      state           = NORMAL
460      detail          = "menuitem"
461      overlay_file    = "assets/menu-pan-left.png"
462      overlay_stretch = FALSE
463      arrow_direction = LEFT
464    }
465
466    image {
467      function        = ARROW
468      state           = PRELIGHT
469      detail          = "menuitem"
470      overlay_file    = "assets/menu-pan-left.png"
471      overlay_stretch = FALSE
472      arrow_direction = LEFT
473    }
474
475    image {
476      function        = ARROW
477      state           = INSENSITIVE
478      detail          = "menuitem"
479      overlay_file    = "assets/menu-pan-left-insensitive.png"
480      overlay_stretch = FALSE
481      arrow_direction = LEFT
482    }
483
484    image {
485      function        = ARROW
486      state           = NORMAL
487      detail          = "menuitem"
488      overlay_file    = "assets/menu-pan-right.png"
489      overlay_stretch = FALSE
490      arrow_direction = RIGHT
491    }
492
493    image {
494      function        = ARROW
495      state           = PRELIGHT
496      detail          = "menuitem"
497      overlay_file    = "assets/menu-pan-right.png"
498      overlay_stretch = FALSE
499      arrow_direction = RIGHT
500    }
501
502    image {
503      function        = ARROW
504      state           = INSENSITIVE
505      detail          = "menuitem"
506      overlay_file    = "assets/menu-pan-right-insensitive.png"
507      overlay_stretch = FALSE
508      arrow_direction = RIGHT
509    }
510
511    image {
512      function        = ARROW
513      state           = INSENSITIVE
514      detail          = "menu_scroll_arrow_up"
515      overlay_file    = "assets/menu-pan-up-insensitive.png"
516      overlay_stretch = FALSE
517    }
518
519    image {
520      function        = ARROW
521      detail          = "menu_scroll_arrow_up"
522      overlay_file    = "assets/menu-pan-up.png"
523      overlay_stretch = FALSE
524    }
525
526    image {
527      function        = ARROW
528      state           = INSENSITIVE
529      detail          = "menu_scroll_arrow_down"
530      overlay_file    = "assets/menu-pan-down-insensitive.png"
531      overlay_stretch = FALSE
532    }
533
534    image {
535      function        = ARROW
536      detail          = "menu_scroll_arrow_down"
537      overlay_file    = "assets/menu-pan-down.png"
538      overlay_stretch = FALSE
539    }
540
541    # Regular arrows
542
543    image {
544      function        = ARROW
545      state           = NORMAL
546      overlay_file    = "assets/pan-up.png"
547      overlay_stretch = FALSE
548      arrow_direction = UP
549    }
550
551    image {
552      function        = ARROW
553      state           = PRELIGHT
554      overlay_file    = "assets/pan-up.png"
555      overlay_stretch = FALSE
556      arrow_direction = UP
557    }
558
559    image {
560      function        = ARROW
561      state           = ACTIVE
562      overlay_file    = "assets/pan-up.png"
563      overlay_stretch = FALSE
564      arrow_direction = UP
565    }
566
567    image {
568      function        = ARROW
569      state           = INSENSITIVE
570      overlay_file    = "assets/pan-up-insensitive.png"
571      overlay_stretch = FALSE
572      arrow_direction = UP
573    }
574
575    image {
576      function        = ARROW
577      state           = NORMAL
578      overlay_file    = "assets/pan-down.png"
579      overlay_stretch = FALSE
580      arrow_direction = DOWN
581    }
582
583    image {
584      function        = ARROW
585      state           = PRELIGHT
586      overlay_file    = "assets/pan-down.png"
587      overlay_stretch = FALSE
588      arrow_direction = DOWN
589    }
590
591    image {
592      function        = ARROW
593      state           = ACTIVE
594      overlay_file    = "assets/pan-down.png"
595      overlay_stretch = FALSE
596      arrow_direction = DOWN
597    }
598
599    image {
600      function        = ARROW
601      state           = INSENSITIVE
602      overlay_file    = "assets/pan-down-insensitive.png"
603      overlay_stretch = FALSE
604      arrow_direction = DOWN
605    }
606
607    image {
608      function        = ARROW
609      state           = NORMAL
610      overlay_file    = "assets/pan-left.png"
611      overlay_stretch = FALSE
612      arrow_direction = LEFT
613    }
614
615    image {
616      function        = ARROW
617      state           = PRELIGHT
618      overlay_file    = "assets/pan-left.png"
619      overlay_stretch = FALSE
620      arrow_direction = LEFT
621    }
622
623    image {
624      function        = ARROW
625      state           = ACTIVE
626      overlay_file    = "assets/pan-left.png"
627      overlay_stretch = FALSE
628      arrow_direction = LEFT
629    }
630
631    image {
632      function        = ARROW
633      state           = INSENSITIVE
634      overlay_file    = "assets/pan-left-insensitive.png"
635      overlay_stretch = FALSE
636      arrow_direction = LEFT
637    }
638
639    image {
640      function        = ARROW
641      state           = NORMAL
642      overlay_file    = "assets/pan-right.png"
643      overlay_stretch = FALSE
644      arrow_direction = RIGHT
645    }
646
647    image {
648      function        = ARROW
649      state           = PRELIGHT
650      overlay_file    = "assets/pan-right.png"
651      overlay_stretch = FALSE
652      arrow_direction = RIGHT
653    }
654
655    image {
656      function        = ARROW
657      state           = ACTIVE
658      overlay_file    = "assets/pan-right.png"
659      overlay_stretch = FALSE
660      arrow_direction = RIGHT
661    }
662
663    image {
664      function        = ARROW
665      state           = INSENSITIVE
666      overlay_file    = "assets/pan-right-insensitive.png"
667      overlay_stretch = FALSE
668      arrow_direction = RIGHT
669    }
670
671    ######################
672    # Option Menu Arrows #
673    ######################
674
675    image {
676      function        = TAB
677      state           = NORMAL
678      overlay_file    = "assets/pan-down.png"
679      overlay_stretch = FALSE
680    }
681
682    image {
683      function        = TAB
684      state           = PRELIGHT
685      overlay_file    = "assets/pan-down.png"
686      overlay_stretch = FALSE
687    }
688
689    image {
690      function        = TAB
691      state           = ACTIVE
692      overlay_file    = "assets/pan-down.png"
693      overlay_stretch = FALSE
694    }
695
696    image {
697      function        = TAB
698      state           = INSENSITIVE
699      overlay_file    = "assets/pan-down-insensitive.png"
700      overlay_stretch = FALSE
701    }
702
703    #########
704    # Lines #
705    #########
706
707    image {
708      function = VLINE
709      file     = "assets/line.png"
710      border   = {1, 0, 0, 0}
711    }
712
713    image {
714      function = HLINE
715      file     = "assets/line.png"
716      border   = {0, 0, 1, 0}
717    }
718
719    #########
720    # Focus #
721    #########
722
723    image {
724      function = FOCUS
725      file     = "assets/focus.png"
726      border   = {1, 1, 1, 1}
727      stretch  = TRUE
728    }
729
730    ###########
731    # Handles #
732    ###########
733
734    image {
735      function        = HANDLE
736      detail          = "handlebox"
737      overlay_file    = "assets/handle.png"
738      overlay_stretch = FALSE
739    }
740
741    image {
742      function    = HANDLE
743      file        = "assets/handle-horz.png"
744      border      = {0, 0, 4, 4}
745      orientation = HORIZONTAL
746    }
747
748    image {
749      function    = HANDLE
750      file        = "assets/handle-vert.png"
751      border      = {4, 4, 0, 0}
752      orientation = VERTICAL
753    }
754
755    image {
756      function = RESIZE_GRIP
757    }
758
759    #############
760    # Expanders #
761    #############
762
763    image {
764      function       = EXPANDER
765      expander_style = EXPANDED
766      file           = "assets/pan-down.png"
767    }
768
769    # LTR
770
771    image {
772      function       = EXPANDER
773      expander_style = COLLAPSED
774      file           = "assets/pan-right.png"
775      direction      = LTR
776    }
777
778    image {
779      function       = EXPANDER
780      expander_style = SEMI_COLLAPSED
781      file           = "assets/pan-right-semi.png"
782      direction      = LTR
783    }
784
785    image {
786      function       = EXPANDER
787      expander_style = SEMI_EXPANDED
788      file           = "assets/pan-right-semi.png"
789      direction      = LTR
790    }
791
792    # RTL
793
794    image {
795      function       = EXPANDER
796      expander_style = COLLAPSED
797      file           = "assets/pan-left.png"
798      direction      = RTL
799    }
800
801    image {
802      function       = EXPANDER
803      expander_style = SEMI_COLLAPSED
804      file           = "assets/pan-left-semi.png"
805      direction      = RTL
806    }
807
808    image {
809      function       = EXPANDER
810      expander_style = SEMI_EXPANDED
811      file           = "assets/pan-left-semi.png"
812      direction      = RTL
813    }
814
815    #############
816    # Notebooks #
817    #############
818
819    # Left
820
821    image {
822      function = EXTENSION
823      state    = NORMAL
824      file     = "assets/tab-left-active.png"
825      border   = {3, 0, 3, 3}
826      stretch  = TRUE
827      gap_side = RIGHT
828    }
829
830    image {
831      function = EXTENSION
832      file     = "assets/tab-left.png"
833      border   = {3, 0, 3, 3}
834      stretch  = TRUE
835      gap_side = RIGHT
836    }
837
838    # Right
839
840    image {
841      function = EXTENSION
842      state    = NORMAL
843      file     = "assets/tab-right-active.png"
844      border   = {0, 3, 3, 3}
845      stretch  = TRUE
846      gap_side = LEFT
847    }
848
849    image {
850      function = EXTENSION
851      file     = "assets/tab-right.png"
852      border   = {0, 3, 3, 3}
853      stretch  = TRUE
854      gap_side = LEFT
855    }
856
857    # Up
858
859    image {
860      function = EXTENSION
861      state    = NORMAL
862      file     = "assets/tab-up-active.png"
863      border   = {3, 3, 3, 0}
864      stretch  = TRUE
865      gap_side = BOTTOM
866    }
867
868    image {
869      function = EXTENSION
870      file     = "assets/tab-up.png"
871      border   = {3, 3, 3, 0}
872      stretch  = TRUE
873      gap_side = BOTTOM
874    }
875
876    # Down
877
878    image {
879      function = EXTENSION
880      state    = NORMAL
881      file     = "assets/tab-down-active.png"
882      border   = {3, 3, 0, 3}
883      stretch  = TRUE
884      gap_side = TOP
885    }
886
887    image {
888      function = EXTENSION
889      file     = "assets/tab-down.png"
890      border   = {3, 3, 0, 3}
891      stretch  = TRUE
892      gap_side = TOP
893    }
894
895    # Inner frame
896
897    image {
898      function   = BOX_GAP
899      detail     = "notebook"
900      file       = "assets/frame-notebook.png"
901      border     = {1, 1, 1, 1}
902      stretch    = TRUE
903      gap_file   = "assets/tab-vert-gap.png"
904      gap_border = {1, 0, 1, 1}
905      gap_side   = LEFT
906    }
907
908    image {
909      function   = BOX_GAP
910      detail     = "notebook"
911      file       = "assets/frame-notebook.png"
912      border     = {1, 1, 1, 1}
913      stretch    = TRUE
914      gap_file   = "assets/tab-vert-gap.png"
915      gap_border = {0, 1, 1, 1}
916      gap_side   = RIGHT
917    }
918
919    image {
920      function   = BOX_GAP
921      detail     = "notebook"
922      file       = "assets/frame-notebook.png"
923      border     = {1, 1, 1, 1}
924      stretch    = TRUE
925      gap_file   = "assets/tab-horz-gap.png"
926      gap_border = {1, 1, 1, 0}
927      gap_side   = TOP
928    }
929
930    image {
931      function   = BOX_GAP
932      detail     = "notebook"
933      file       = "assets/frame-notebook.png"
934      border     = {1, 1, 1, 1}
935      stretch    = TRUE
936      gap_file   = "assets/tab-horz-gap.png"
937      gap_border = {1, 1, 0, 1}
938      gap_side   = BOTTOM
939    }
940
941    # Standalone frame
942    image {
943      function = BOX
944      detail   = "notebook"
945      file     = "assets/frame-notebook.png"
946      border   = {1, 1, 1, 1}
947      stretch  = TRUE
948    }
949
950    ##############
951    # Scrollbars #
952    ##############
953
954    image {
955      function    = BOX
956      detail      = "trough"
957      file        = "assets/scrollbar-horz-trough.png"
958      border      = {0, 0, 1, 0}
959      orientation = HORIZONTAL
960    }
961
962    image {
963      function    = BOX
964      detail      = "trough"
965      file        = "assets/scrollbar-vert-trough.png"
966      border      = {1, 0, 0, 0}
967      orientation = VERTICAL
968      direction   = LTR
969    }
970
971    image {
972      function    = BOX
973      detail      = "trough"
974      file        = "assets/scrollbar-vert-trough-rtl.png"
975      border      = {0, 1, 0, 0}
976      orientation = VERTICAL
977      direction   = RTL
978    }
979
980
981    # Disable insensitive sliders
982
983    image {
984      function = SLIDER
985      state    = INSENSITIVE
986      detail   = "slider"
987    }
988
989    # Horizontal sliders
990
991    image {
992      function    = SLIDER
993      state       = NORMAL
994      detail      = "slider"
995      file        = "assets/scrollbar-horz-slider.png"
996      border      = {6, 6, 7, 6 }
997      stretch     = TRUE
998      orientation = HORIZONTAL
999    }
1000
1001    image {
1002      function    = SLIDER
1003      state       = PRELIGHT
1004      detail      = "slider"
1005      file        = "assets/scrollbar-horz-slider-hover.png"
1006      border      = {6, 6, 7, 6 }
1007      stretch     = TRUE
1008      orientation = HORIZONTAL
1009    }
1010
1011    image {
1012      function    = SLIDER
1013      state       = ACTIVE
1014      detail      = "slider"
1015      file        = "assets/scrollbar-horz-slider-active.png"
1016      border      = {6, 6, 7, 6 }
1017      stretch     = TRUE
1018      orientation = HORIZONTAL
1019    }
1020
1021    # Vertical sliders
1022
1023    image {
1024      function    = SLIDER
1025      state       = NORMAL
1026      detail      = "slider"
1027      file        = "assets/scrollbar-vert-slider.png"
1028      border      = {7, 6, 6, 6}
1029      stretch     = TRUE
1030      orientation = VERTICAL
1031      direction   = LTR
1032    }
1033
1034    image {
1035      function    = SLIDER
1036      state       = PRELIGHT
1037      detail      = "slider"
1038      file        = "assets/scrollbar-vert-slider-hover.png"
1039      border      = {7, 6, 6, 6}
1040      stretch     = TRUE
1041      orientation = VERTICAL
1042      direction   = LTR
1043    }
1044
1045    image {
1046      function    = SLIDER
1047      state       = ACTIVE
1048      detail      = "slider"
1049      file        = "assets/scrollbar-vert-slider-active.png"
1050      border      = {7, 6, 6, 6}
1051      stretch     = TRUE
1052      orientation = VERTICAL
1053      direction   = LTR
1054    }
1055
1056    # RTL
1057
1058    image {
1059      function    = SLIDER
1060      state       = NORMAL
1061      detail      = "slider"
1062      file        = "assets/scrollbar-vert-slider-rtl.png"
1063      border      = {6, 7, 6, 6}
1064      stretch     = TRUE
1065      orientation = VERTICAL
1066      direction   = RTL
1067    }
1068
1069    image {
1070      function    = SLIDER
1071      state       = PRELIGHT
1072      detail      = "slider"
1073      file        = "assets/scrollbar-vert-slider-hover-rtl.png"
1074      border      = {6, 7, 6, 6}
1075      stretch     = TRUE
1076      orientation = VERTICAL
1077      direction   = RTL
1078    }
1079
1080    image {
1081      function    = SLIDER
1082      state       = ACTIVE
1083      detail      = "slider"
1084      file        = "assets/scrollbar-vert-slider-active-rtl.png"
1085      border      = {6, 7, 6, 6}
1086      stretch     = TRUE
1087      orientation = VERTICAL
1088      direction   = RTL
1089    }
1090
1091    ##########
1092    # Scales #
1093    ##########
1094
1095    # Troughs, overrided later on. We set them here too because some widgets
1096    # don't specify their orientation.
1097
1098    image {
1099      function    = BOX
1100      detail      = "trough-upper"
1101      file        = "assets/scale-horz-trough.png"
1102      border      = {10, 10, 0, 0}
1103      stretch     = TRUE
1104      orientation = HORIZONTAL
1105    }
1106
1107    image {
1108      function    = BOX
1109      detail      = "trough-lower"
1110      file        = "assets/scale-horz-trough-active.png"
1111      border      = {10, 10, 0, 0}
1112      stretch     = TRUE
1113      orientation = HORIZONTAL
1114    }
1115
1116    image {
1117      function    = BOX
1118      detail      = "trough-upper"
1119      file        = "assets/scale-vert-trough.png"
1120      border      = {0, 0, 10, 10}
1121      stretch     = TRUE
1122      orientation = VERTICAL
1123    }
1124
1125    image {
1126      function    = BOX
1127      detail      = "trough-lower"
1128      file        = "assets/scale-vert-trough-active.png"
1129      border      = {0, 0, 10, 10}
1130      stretch     = TRUE
1131      orientation = VERTICAL
1132    }
1133
1134    # Sliders
1135
1136    image {
1137      function = SLIDER
1138      state    = NORMAL
1139      detail   = "hscale"
1140      file     = "assets/scale-slider.png"
1141    }
1142
1143    image {
1144      function = SLIDER
1145      state    = PRELIGHT
1146      detail   = "hscale"
1147      file     = "assets/scale-slider-hover.png"
1148    }
1149
1150    image {
1151      function = SLIDER
1152      state    = ACTIVE
1153      detail   = "hscale"
1154      file     = "assets/scale-slider-active.png"
1155    }
1156
1157    image {
1158      function = SLIDER
1159      state    = INSENSITIVE
1160      detail   = "hscale"
1161      file     = "assets/scale-slider-insensitive.png"
1162    }
1163    image {
1164      function = SLIDER
1165      state    = NORMAL
1166      detail   = "vscale"
1167      file     = "assets/scale-slider.png"
1168    }
1169
1170    image {
1171      function = SLIDER
1172      state    = PRELIGHT
1173      detail   = "vscale"
1174      file     = "assets/scale-slider-hover.png"
1175    }
1176
1177    image {
1178      function = SLIDER
1179      state    = ACTIVE
1180      detail   = "vscale"
1181      file     = "assets/scale-slider-active.png"
1182    }
1183
1184    image {
1185      function = SLIDER
1186      state    = INSENSITIVE
1187      detail   = "vscale"
1188      file     = "assets/scale-slider-insensitive.png"
1189    }
1190
1191    ###########
1192    # Menubar #
1193    ###########
1194
1195    image {
1196      function = BOX
1197      detail   = "menubar"
1198      file     = "assets/line.png"
1199      border   = {0, 0, 0, 1}
1200    }
1201
1202    #########
1203    # Menus #
1204    #########
1205
1206    image {
1207      function = BOX
1208      state    = PRELIGHT
1209      detail   = "menu_scroll_arrow_up"
1210      file     = "assets/line.png"
1211    }
1212
1213    image {
1214      function = BOX
1215      detail   = "menu_scroll_arrow_up"
1216      file     = "assets/line.png"
1217      border   = {0, 0, 0, 1}
1218    }
1219
1220    image {
1221      function = BOX
1222      state    = PRELIGHT
1223      detail   = "menu_scroll_arrow_down"
1224      file     = "assets/line.png"
1225    }
1226
1227    image {
1228      function = BOX
1229      detail   = "menu_scroll_arrow_down"
1230      file     = "assets/line.png"
1231      border   = {0, 0, 1, 0}
1232    }
1233
1234    ###########
1235    # Entries #
1236    ###########
1237
1238
1239    image {
1240      function = SHADOW
1241      state    = ACTIVE
1242      detail   = "entry"
1243      file     = "assets/entry-active.png"
1244      border   = {4, 4, 4, 4}
1245      stretch  = TRUE
1246    }
1247
1248    image {
1249      function = SHADOW
1250      state    = INSENSITIVE
1251      detail   = "entry"
1252      file     = "assets/entry-insensitive.png"
1253      border   = {4, 4, 4, 4}
1254      stretch  = TRUE
1255    }
1256
1257    image {
1258      function = SHADOW
1259      detail   = "entry"
1260      file     = "assets/entry.png"
1261      border   = {4, 4, 4, 4}
1262      stretch  = TRUE
1263    }
1264
1265    image {
1266      function = FLAT_BOX
1267      state    = ACTIVE
1268      detail   = "entry_bg"
1269      file     = "assets/entry-background.png"
1270    }
1271
1272    image {
1273      function = FLAT_BOX
1274      state    = INSENSITIVE
1275      detail   = "entry_bg"
1276      file     = "assets/entry-background-insensitive.png"
1277    }
1278
1279    image {
1280      function = FLAT_BOX
1281      detail   = "entry_bg"
1282      file     = "assets/entry-background.png"
1283    }
1284    #########
1285    # Spins #
1286    #########
1287
1288    # Spin-Up LTR
1289
1290    image {
1291      function        = BOX
1292      state           = NORMAL
1293      detail          = "spinbutton_up"
1294      file            = "assets/spin-ltr-up.png"
1295      border          = {1, 4, 4, 0}
1296      stretch         = TRUE
1297      overlay_file    = "assets/spin-up.png"
1298      overlay_stretch = FALSE
1299      direction       = LTR
1300    }
1301
1302    image {
1303      function        = BOX
1304      state           = PRELIGHT
1305      detail          = "spinbutton_up"
1306      file            = "assets/spin-ltr-up-hover.png"
1307      border          = {1, 4, 4, 0}
1308      stretch         = TRUE
1309      overlay_file    = "assets/spin-up.png"
1310      overlay_stretch = FALSE
1311      direction       = LTR
1312    }
1313
1314    image {
1315      function        = BOX
1316      state           = ACTIVE
1317      detail          = "spinbutton_up"
1318      file            = "assets/spin-ltr-up-active.png"
1319      border          = {1, 4, 4, 0}
1320      stretch         = TRUE
1321      overlay_file    = "assets/spin-up.png"
1322      overlay_stretch = FALSE
1323      direction       = LTR
1324    }
1325
1326    image {
1327      function        = BOX
1328      state           = INSENSITIVE
1329      detail          = "spinbutton_up"
1330      file            = "assets/spin-ltr-up-insensitive.png"
1331      border          = {1, 4, 4, 0}
1332      stretch         = TRUE
1333      overlay_file    = "assets/spin-up-insensitive.png"
1334      overlay_stretch = FALSE
1335      direction       = LTR
1336    }
1337
1338    # Spin-Up RTL
1339
1340    image {
1341      function        = BOX
1342      state           = NORMAL
1343      detail          = "spinbutton_up"
1344      file            = "assets/spin-rtl-up.png"
1345      border          = {4, 1, 4, 0}
1346      stretch         = TRUE
1347      overlay_file    = "assets/spin-up.png"
1348      overlay_stretch = FALSE
1349      direction       = RTL
1350    }
1351
1352    image {
1353      function        = BOX
1354      state           = PRELIGHT
1355      detail          = "spinbutton_up"
1356      file            = "assets/spin-rtl-up-hover.png"
1357      border          = {4, 1, 4, 0}
1358      stretch         = TRUE
1359      overlay_file    = "assets/spin-up.png"
1360      overlay_stretch = FALSE
1361      direction       = RTL
1362    }
1363
1364    image {
1365      function        = BOX
1366      state           = ACTIVE
1367      detail          = "spinbutton_up"
1368      file            = "assets/spin-rtl-up-hover.png"
1369      border          = {4, 1, 4, 0}
1370      stretch         = TRUE
1371      overlay_file    = "assets/spin-up.png"
1372      overlay_stretch = FALSE
1373      direction       = RTL
1374    }
1375
1376    image {
1377      function        = BOX
1378      state           = INSENSITIVE
1379      detail          = "spinbutton_up"
1380      file            = "assets/spin-rtl-up-insensitive.png"
1381      border          = {4, 1, 4, 0}
1382      stretch         = TRUE
1383      overlay_file    = "assets/spin-up-insensitive.png"
1384      overlay_stretch = FALSE
1385      direction       = RTL
1386    }
1387
1388    # Spin-Down LTR
1389
1390    image {
1391      function        = BOX
1392      state           = NORMAL
1393      detail          = "spinbutton_down"
1394      file            = "assets/spin-ltr-down.png"
1395      border          = {1, 4, 1, 4}
1396      stretch         = TRUE
1397      overlay_file    = "assets/spin-down.png"
1398      overlay_stretch = FALSE
1399      direction       = LTR
1400    }
1401
1402    image {
1403      function        = BOX
1404      state           = PRELIGHT
1405      detail          = "spinbutton_down"
1406      file            = "assets/spin-ltr-down-hover.png"
1407      border          = {1, 4, 1, 4}
1408      stretch         = TRUE
1409      overlay_file    = "assets/spin-down.png"
1410      overlay_stretch = FALSE
1411      direction       = LTR
1412    }
1413
1414    image {
1415      function        = BOX
1416      state           = ACTIVE
1417      detail          = "spinbutton_down"
1418      file            = "assets/spin-ltr-down-active.png"
1419      border          = {1, 4, 1, 4}
1420      stretch         = TRUE
1421      overlay_file    = "assets/spin-down.png"
1422      overlay_stretch = FALSE
1423      direction       = LTR
1424    }
1425
1426    image {
1427      function        = BOX
1428      state           = INSENSITIVE
1429      detail          = "spinbutton_down"
1430      file            = "assets/spin-ltr-down-insensitive.png"
1431      border          = {1, 4, 1, 4}
1432      stretch         = TRUE
1433      overlay_file    = "assets/spin-down-insensitive.png"
1434      overlay_stretch = FALSE
1435      direction       = LTR
1436    }
1437
1438    # Spin-Down RTL
1439
1440    image {
1441      function        = BOX
1442      state           = NORMAL
1443      detail          = "spinbutton_down"
1444      file            = "assets/spin-rtl-down.png"
1445      border          = {4, 1, 1, 4}
1446      stretch         = TRUE
1447      overlay_file    = "assets/spin-down.png"
1448      overlay_stretch = FALSE
1449      direction       = RTL
1450    }
1451
1452    image {
1453      function        = BOX
1454      state           = PRELIGHT
1455      detail          = "spinbutton_down"
1456      file            = "assets/spin-rtl-down-hover.png"
1457      border          = {4, 1, 1, 4}
1458      stretch         = TRUE
1459      overlay_file    = "assets/spin-down.png"
1460      overlay_stretch = FALSE
1461      direction       = RTL
1462    }
1463
1464    image {
1465      function        = BOX
1466      state           = ACTIVE
1467      detail          = "spinbutton_down"
1468      file            = "assets/spin-rtl-down-active.png"
1469      border          = {4, 1, 1, 4}
1470      stretch         = TRUE
1471      overlay_file    = "assets/spin-down.png"
1472      overlay_stretch = FALSE
1473      direction       = RTL
1474    }
1475
1476    image {
1477      function        = BOX
1478      state           = INSENSITIVE
1479      detail          = "spinbutton_down"
1480      file            = "assets/spin-rtl-down-insensitive.png"
1481      border          = {4, 1, 1, 4}
1482      stretch         = TRUE
1483      overlay_file    = "assets/spin-down-insensitive.png"
1484      overlay_stretch = FALSE
1485      direction       = RTL
1486    }
1487
1488    ##############
1489    # Scrollbars #
1490    ##############
1491
1492    image {
1493      function    = BOX
1494      detail      = "bar"
1495      file        = "assets/progressbar-horz.png"
1496      stretch     = TRUE
1497      border      = {2, 2, 1, 1}
1498      orientation = HORIZONTAL
1499    }
1500
1501    image {
1502      function    = BOX
1503      detail      = "bar"
1504      file        = "assets/progressbar-vert.png"
1505      stretch     = TRUE
1506      border      = {1, 1, 2, 2}
1507      orientation = VERTICAL
1508    }
1509
1510    #############
1511    # Treeviews #
1512    #############
1513
1514    # Disable active the column highlight
1515    # We need to match specific cells or we break stuff
1516    # Looking at you deadbeef
1517
1518    image {
1519      function = FLAT_BOX
1520      detail   = "cell_even_sorted"
1521      state    = NORMAL
1522    }
1523
1524    image {
1525      function = FLAT_BOX
1526      detail   = "cell_odd_sorted"
1527      state    = NORMAL
1528    }
1529
1530    # Disable all the other shadows
1531    # This prevents the Raleigh effect
1532    image {
1533      function = SHADOW
1534    }
1535
1536  }
1537
1538}
1539
1540style "menubar" {
1541
1542  # Needed to fix Firefox's menubar text
1543  bg[NORMAL]   = @menubar_bg
1544  bg[SELECTED] = @selected_fg_color
1545  fg[SELECTED] = @link_color
1546}
1547
1548style "menubar_item" {
1549
1550  xthickness = 3
1551  ythickness = 4
1552
1553  fg[NORMAL]   = @menubar_insensitive_fg
1554  fg[PRELIGHT] = @menubar_fg
1555
1556  engine "pixmap" {
1557    image {
1558      function    = BOX
1559      state       = PRELIGHT
1560      file        = "assets/menubar-item-active.png"
1561      border      = {0, 0, 0, 3}
1562    }
1563  }
1564
1565}
1566
1567style "menu" {
1568
1569  xthickness = 0
1570  ythickness = 0
1571
1572  bg[NORMAL]      = @menu_color
1573  bg[INSENSITIVE] = @menu_color
1574  bg[PRELIGHT]    = @menu_color
1575  bg[SELECTED]    = @selected_bg_color
1576
1577}
1578
1579style "menu_item" {
1580
1581  xthickness = 3
1582  ythickness = 4
1583
1584  bg[PRELIGHT]   = @menu_hover_color
1585  # Chromium uses this setting
1586  bg[SELECTED]   = @menu_hover_color
1587
1588  fg[PRELIGHT]   = @fg_color
1589  fg[SELECTED]   = @fg_color
1590  text[NORMAL]   = @fg_color
1591  text[PRELIGHT] = @fg_color
1592  text[ACTIVE]   = @fg_color
1593  text[SELECTED] = @fg_color
1594
1595  # Some widgets use text, we need to handle that
1596  # Don't know what this comment is about but maybe we've nulled it
1597
1598  # Unfortunately we can't tell regular and menu checks/radios apart
1599  # Without the heirarchy
1600  engine "pixmap" {
1601
1602    #################
1603    # Check Buttons #
1604    #################
1605
1606    image {
1607      function        = CHECK
1608      state           = NORMAL
1609      shadow          = OUT
1610      overlay_file    = "assets/menu-checkbox.png"
1611      overlay_stretch = FALSE
1612    }
1613
1614    image {
1615      function        = CHECK
1616      state           = PRELIGHT
1617      shadow          = OUT
1618      overlay_file    = "assets/menu-checkbox.png"
1619      overlay_stretch = FALSE
1620    }
1621
1622    image {
1623      function        = CHECK
1624      state           = ACTIVE
1625      shadow          = OUT
1626      overlay_file    = "assets/menu-checkbox.png"
1627      overlay_stretch = FALSE
1628    }
1629
1630    image {
1631      function        = CHECK
1632      state           = INSENSITIVE
1633      shadow          = OUT
1634      overlay_file    = "assets/menu-checkbox-insensitive.png"
1635      overlay_stretch = FALSE
1636    }
1637
1638    image {
1639      function        = CHECK
1640      state           = NORMAL
1641      shadow          = IN
1642      overlay_file    = "assets/menu-checkbox-checked.png"
1643      overlay_stretch = FALSE
1644    }
1645
1646    image {
1647      function        = CHECK
1648      state           = PRELIGHT
1649      shadow          = IN
1650      overlay_file    = "assets/menu-checkbox-checked.png"
1651      overlay_stretch = FALSE
1652    }
1653
1654    image {
1655      function        = CHECK
1656      state           = ACTIVE
1657      shadow          = IN
1658      overlay_file    = "assets/menu-checkbox-checked.png"
1659      overlay_stretch = FALSE
1660    }
1661
1662    image {
1663      function        = CHECK
1664      state           = INSENSITIVE
1665      shadow          = IN
1666      overlay_file    = "assets/menu-checkbox-checked-insensitive.png"
1667      overlay_stretch = FALSE
1668    }
1669
1670    image {
1671      function        = CHECK
1672      state           = NORMAL
1673      shadow          = ETCHED_IN
1674      overlay_file    = "assets/menu-checkbox-mixed.png"
1675      overlay_stretch = FALSE
1676    }
1677
1678    image {
1679      function        = CHECK
1680      state           = PRELIGHT
1681      shadow          = ETCHED_IN
1682      overlay_file    = "assets/menu-checkbox-mixed.png"
1683      overlay_stretch = FALSE
1684    }
1685
1686    image {
1687      function        = CHECK
1688      state           = ACTIVE
1689      shadow          = ETCHED_IN
1690      overlay_file    = "assets/menu-checkbox-mixed.png"
1691      overlay_stretch = FALSE
1692    }
1693
1694    image {
1695      function        = CHECK
1696      state           = INSENSITIVE
1697      shadow          = ETCHED_IN
1698      overlay_file    = "assets/menu-checkbox-mixed-insensitive.png"
1699      overlay_stretch = FALSE
1700    }
1701
1702    #################
1703    # Radio Buttons #
1704    #################
1705
1706    image {
1707      function        = OPTION
1708      state           = NORMAL
1709      shadow          = OUT
1710      overlay_file    = "assets/menu-radio.png"
1711      overlay_stretch = FALSE
1712    }
1713
1714    image {
1715      function        = OPTION
1716      state           = PRELIGHT
1717      shadow          = OUT
1718      overlay_file    = "assets/menu-radio.png"
1719      overlay_stretch = FALSE
1720    }
1721
1722    image {
1723      function        = OPTION
1724      state           = ACTIVE
1725      shadow          = OUT
1726      overlay_file    = "assets/menu-radio.png"
1727      overlay_stretch = FALSE
1728    }
1729
1730    image {
1731      function        = OPTION
1732      state           = INSENSITIVE
1733      shadow          = OUT
1734      overlay_file    = "assets/menu-radio-insensitive.png"
1735      overlay_stretch = FALSE
1736    }
1737
1738    image {
1739      function        = OPTION
1740      state           = NORMAL
1741      shadow          = IN
1742      overlay_file    = "assets/menu-radio-checked.png"
1743      overlay_stretch = FALSE
1744    }
1745
1746    image {
1747      function        = OPTION
1748      state           = PRELIGHT
1749      shadow          = IN
1750      overlay_file    = "assets/menu-radio-checked.png"
1751      overlay_stretch = FALSE
1752    }
1753
1754    image {
1755      function        = OPTION
1756      state           = ACTIVE
1757      shadow          = IN
1758      overlay_file    = "assets/menu-radio-checked.png"
1759      overlay_stretch = FALSE
1760    }
1761
1762    image {
1763      function        = OPTION
1764      state           = INSENSITIVE
1765      shadow          = IN
1766      overlay_file    = "assets/menu-radio-checked-insensitive.png"
1767      overlay_stretch = FALSE
1768    }
1769
1770    image {
1771      function        = OPTION
1772      state           = NORMAL
1773      shadow          = ETCHED_IN
1774      overlay_file    = "assets/menu-radio-mixed.png"
1775      overlay_stretch = FALSE
1776    }
1777
1778    image {
1779      function        = OPTION
1780      state           = PRELIGHT
1781      shadow          = ETCHED_IN
1782      overlay_file    = "assets/menu-radio-mixed.png"
1783      overlay_stretch = FALSE
1784    }
1785
1786    image {
1787      function        = OPTION
1788      state           = ACTIVE
1789      shadow          = ETCHED_IN
1790      overlay_file    = "assets/menu-radio-mixed.png"
1791      overlay_stretch = FALSE
1792    }
1793
1794    image {
1795      function        = OPTION
1796      state           = INSENSITIVE
1797      shadow          = ETCHED_IN
1798      overlay_file    = "assets/menu-radio-mixed-insensitive.png"
1799      overlay_stretch = FALSE
1800    }
1801
1802
1803
1804  }
1805
1806}
1807
1808style "separator_menu_item" {
1809
1810  xthickness = 0
1811  ythickness = 0
1812
1813  engine "pixmap" {
1814    image {
1815      function = BOX
1816      file     = "assets/line.png"
1817    }
1818  }
1819
1820}
1821
1822style "button" {
1823
1824  xthickness = 2
1825  ythickness = 2
1826
1827  # For the sake of sanity style buttons this way
1828  engine "pixmap" {
1829
1830    ###########
1831    # Buttons #
1832    ###########
1833
1834    image {
1835      function = BOX
1836      state    = NORMAL
1837      file     = "assets/button.png"
1838      border   = {4, 4, 4, 4}
1839      stretch  = TRUE
1840    }
1841
1842    image {
1843      function = BOX
1844      state    = PRELIGHT
1845      shadow   = OUT
1846      file     = "assets/button-hover.png"
1847      border   = {4, 4, 4, 4}
1848      stretch  = TRUE
1849    }
1850
1851    # Don't add hover effect on pressed buttons
1852    image {
1853      function = BOX
1854      state    = PRELIGHT
1855      shadow   = IN
1856      file     = "assets/button-active.png"
1857      border   = {4, 4, 4, 4}
1858      stretch  = TRUE
1859    }
1860
1861    image {
1862      function = BOX
1863      state    = ACTIVE
1864      file     = "assets/button-active.png"
1865      border   = {4, 4, 4, 4}
1866      stretch  = TRUE
1867    }
1868
1869    image {
1870      function = BOX
1871      state    = INSENSITIVE
1872      file     = "assets/button-insensitive.png"
1873      border   = {4, 4, 4, 4}
1874      stretch  = TRUE
1875    }
1876  }
1877}
1878
1879style "link_button" {
1880
1881  # Disable the button effect, leave just the link
1882  engine "pixmap" {
1883    image {
1884      function = BOX
1885    }
1886  }
1887
1888}
1889
1890style "entry" {
1891
1892  # We set this same as the border of the border of the entry
1893  # This way there's no overlap
1894  xthickness = 4
1895  ythickness = 4
1896
1897}
1898
1899style "combobox" {
1900
1901  xthickness = 6
1902  ythickness = 4
1903
1904  # This affects only the button beside an entry
1905  GtkButton::inner-border = {0, 0, 0, 0}
1906
1907}
1908
1909style "combobox_cellview" {
1910  text[NORMAL]   = @fg_color
1911  text[PRELIGHT] = @fg_color
1912}
1913
1914style "combobox_entry" {
1915
1916  # Since one side of the button is missing, we need to shift the arrow a little to the right
1917  GtkButton::inner-border = {0, 1, 0, 0}
1918
1919  engine "pixmap" {
1920
1921    #############
1922    # LTR entry #
1923    #############
1924
1925    image {
1926      function  = SHADOW
1927      state     = NORMAL
1928      detail    = "entry"
1929      file      = "assets/combo-entry-ltr-entry.png"
1930      border    = {4, 4, 4, 4}
1931      stretch   = TRUE
1932      direction = LTR
1933    }
1934
1935    image {
1936      function  = SHADOW
1937      state     = ACTIVE
1938      detail    = "entry"
1939      file      = "assets/combo-entry-ltr-entry-active.png"
1940      border    = {4, 4, 4, 4}
1941      stretch   = TRUE
1942      direction = LTR
1943    }
1944
1945    image {
1946      function  = SHADOW
1947      state     = INSENSITIVE
1948      detail    = "entry"
1949      file      = "assets/combo-entry-ltr-entry-insensitive.png"
1950      border    = {4, 4, 4, 4}
1951      stretch   = TRUE
1952      direction = LTR
1953    }
1954
1955    #############
1956    # RTL entry #
1957    #############
1958
1959    image {
1960      function  = SHADOW
1961      state     = NORMAL
1962      detail    = "entry"
1963      file      = "assets/combo-entry-rtl-entry.png"
1964      border    = {4, 4, 4, 4}
1965      stretch   = TRUE
1966      direction = RTL
1967    }
1968
1969    image {
1970      function  = SHADOW
1971      state     = ACTIVE
1972      detail    = "entry"
1973      file      = "assets/combo-entry-rtl-entry-active.png"
1974      border    = {4, 4, 4, 4}
1975      stretch   = TRUE
1976      direction = RTL
1977    }
1978
1979    image {
1980      function  = SHADOW
1981      state     = INSENSITIVE
1982      detail    = "entry"
1983      file      = "assets/combo-entry-rtl-entry-insensitive.png"
1984      border    = {4, 4, 4, 4}
1985      stretch   = TRUE
1986      direction = RTL
1987    }
1988
1989    ##############
1990    # LTR button #
1991    ##############
1992
1993    image {
1994      function  = BOX
1995      state     = NORMAL
1996      detail    = "button"
1997      file      = "assets/combo-entry-ltr-button.png"
1998      border    = {0, 4, 4, 4}
1999      stretch   = TRUE
2000      direction = LTR
2001    }
2002
2003    image {
2004      function  = BOX
2005      state     = PRELIGHT
2006      detail    = "button"
2007      file      = "assets/combo-entry-ltr-button-hover.png"
2008      border    = {0, 4, 4, 4}
2009      stretch   = TRUE
2010      direction = LTR
2011    }
2012
2013    image {
2014      function  = BOX
2015      state     = ACTIVE
2016      detail    = "button"
2017      file      = "assets/combo-entry-ltr-button-active.png"
2018      border    = {0, 4, 4, 4}
2019      stretch   = TRUE
2020      direction = LTR
2021    }
2022
2023    image {
2024      function  = BOX
2025      state     = INSENSITIVE
2026      detail    = "button"
2027      file      = "assets/combo-entry-ltr-button-insensitive.png"
2028      border    = {0, 4, 4, 4}
2029      stretch   = TRUE
2030      direction = LTR
2031    }
2032
2033    ##############
2034    # RTL button #
2035    ##############
2036
2037    image {
2038      function  = BOX
2039      state     = NORMAL
2040      detail    = "button"
2041      file      = "assets/combo-entry-rtl-button.png"
2042      border    = {4, 0, 4, 4}
2043      stretch   = TRUE
2044      direction = RTL
2045    }
2046
2047    image {
2048      function  = BOX
2049      state     = PRELIGHT
2050      detail    = "button"
2051      file      = "assets/combo-entry-rtl-button-hover.png"
2052      border    = {4, 0, 4, 4}
2053      stretch   = TRUE
2054      direction = RTL
2055    }
2056
2057    image {
2058      function  = BOX
2059      state     = ACTIVE
2060      detail    = "button"
2061      file      = "assets/combo-entry-rtl-button-active.png"
2062      border    = {4, 0, 4, 4}
2063      stretch   = TRUE
2064      direction = RTL
2065    }
2066
2067    image {
2068      function  = BOX
2069      state     = INSENSITIVE
2070      detail    = "button"
2071      file      = "assets/combo-entry-rtl-button-insensitive.png"
2072      border    = {4, 0, 4, 4}
2073      stretch   = TRUE
2074      direction = RTL
2075    }
2076
2077  }
2078
2079}
2080
2081style "combo_button_padding" {
2082
2083  # Since one side of the button is missing, we need to shift the arrow a
2084  # little to the right.
2085  # This is the same thing we've done above but the combo, unlike the combobox,
2086  # uses padding the same way as a button.
2087  GtkButton::inner-border = {6, 8, 4, 4}
2088
2089}
2090
2091style "notebook" {
2092
2093  xthickness = 5
2094  ythickness = 2
2095
2096}
2097
2098style "notebook_viewport" {
2099  bg[NORMAL] = @base_color
2100}
2101
2102style "notebook_bg" {
2103  bg[NORMAL]      = @base_color
2104  bg[PRELIGHT]    = @base_color
2105  bg[INSENSITIVE] = @base_color
2106}
2107
2108style "notebook_entry" {
2109
2110  engine "pixmap" {
2111
2112    image {
2113      function = SHADOW
2114      state    = ACTIVE
2115      detail   = "entry"
2116      file     = "assets/notebook-entry-active.png"
2117      border   = {4, 4, 4, 4}
2118      stretch  = TRUE
2119    }
2120
2121    image {
2122      function = SHADOW
2123      state    = INSENSITIVE
2124      detail   = "entry"
2125      file     = "assets/notebook-entry-insensitive.png"
2126      border   = {4, 4, 4, 4}
2127      stretch  = TRUE
2128    }
2129
2130    image {
2131      function = SHADOW
2132      detail   = "entry"
2133      file     = "assets/notebook-entry.png"
2134      border   = {4, 4, 4, 4}
2135      stretch  = TRUE
2136    }
2137  }
2138}
2139
2140style "normal_bg" {
2141  bg[NORMAL]      = @bg_color
2142  bg[PRELIGHT]    = @bg_color
2143  bg[INSENSITIVE] = @insensitive_bg_color
2144}
2145
2146style "normal_entry" {
2147
2148  engine "pixmap" {
2149
2150    image {
2151      function = SHADOW
2152      state    = ACTIVE
2153      detail   = "entry"
2154      file     = "assets/entry-active.png"
2155      border   = {4, 4, 4, 4}
2156      stretch  = TRUE
2157    }
2158
2159    image {
2160      function = SHADOW
2161      state    = INSENSITIVE
2162      detail   = "entry"
2163      file     = "assets/entry-insensitive.png"
2164      border   = {4, 4, 4, 4}
2165      stretch  = TRUE
2166    }
2167
2168    image {
2169      function = SHADOW
2170      detail   = "entry"
2171      file     = "assets/entry.png"
2172      border   = {4, 4, 4, 4}
2173      stretch  = TRUE
2174    }
2175  }
2176}
2177
2178style "notebook_combo" {
2179
2180  engine "pixmap" {
2181
2182    #############
2183    # LTR entry #
2184    #############
2185
2186    image {
2187      function  = SHADOW
2188      state     = NORMAL
2189      detail    = "entry"
2190      file      = "assets/notebook-combo-entry-ltr-entry.png"
2191      border    = {4, 4, 4, 4}
2192      stretch   = TRUE
2193      direction = LTR
2194    }
2195
2196    image {
2197      function  = SHADOW
2198      state     = ACTIVE
2199      detail    = "entry"
2200      file      = "assets/notebook-combo-entry-ltr-entry-active.png"
2201      border    = {4, 4, 4, 4}
2202      stretch   = TRUE
2203      direction = LTR
2204    }
2205
2206    image {
2207      function  = SHADOW
2208      state     = INSENSITIVE
2209      detail    = "entry"
2210      file      = "assets/notebook-combo-entry-ltr-entry-insensitive.png"
2211      border    = {4, 4, 4, 4}
2212      stretch   = TRUE
2213      direction = LTR
2214    }
2215
2216    #############
2217    # RTL entry #
2218    #############
2219
2220    image {
2221      function  = SHADOW
2222      state     = NORMAL
2223      detail    = "entry"
2224      file      = "assets/notebook-combo-entry-rtl-entry.png"
2225      border    = {4, 4, 4, 4}
2226      stretch   = TRUE
2227      direction = RTL
2228    }
2229
2230    image {
2231      function  = SHADOW
2232      state     = ACTIVE
2233      detail    = "entry"
2234      file      = "assets/notebook-combo-entry-rtl-entry-active.png"
2235      border    = {4, 4, 4, 4}
2236      stretch   = TRUE
2237      direction = RTL
2238    }
2239
2240    image {
2241      function  = SHADOW
2242      state     = INSENSITIVE
2243      detail    = "entry"
2244      file      = "assets/notebook-combo-entry-rtl-entry-insensitive.png"
2245      border    = {4, 4, 4, 4}
2246      stretch   = TRUE
2247      direction = RTL
2248    }
2249
2250  }
2251
2252}
2253
2254style "textview" {
2255  bg[NORMAL] = @base_color
2256}
2257
2258style "scale_horz" {
2259
2260  engine "pixmap" {
2261
2262    image {
2263      function    = BOX
2264      detail      = "trough-upper"
2265      file        = "assets/scale-horz-trough.png"
2266      border      = {10, 10, 0, 0}
2267      stretch     = TRUE
2268    }
2269
2270    image {
2271      function    = BOX
2272      detail      = "trough-lower"
2273      file        = "assets/scale-horz-trough-active.png"
2274      border      = {10, 10, 0, 0}
2275      stretch     = TRUE
2276    }
2277
2278  }
2279
2280}
2281
2282style "scale_vert" {
2283
2284  engine "pixmap" {
2285
2286    image {
2287      function    = BOX
2288      detail      = "trough-upper"
2289      file        = "assets/scale-vert-trough.png"
2290      border      = {0, 0, 10, 10}
2291      stretch     = TRUE
2292    }
2293
2294    image {
2295      function    = BOX
2296      detail      = "trough-lower"
2297      file        = "assets/scale-vert-trough-active.png"
2298      border      = {0, 0, 10, 10}
2299      stretch     = TRUE
2300    }
2301
2302  }
2303
2304}
2305
2306style "progressbar" {
2307
2308  xthickness = 1
2309  ythickness = 1
2310
2311  fg[PRELIGHT] = @selected_fg_color
2312
2313  engine "pixmap" {
2314
2315    image {
2316      function    = BOX
2317      detail      = "trough"
2318      file        = "assets/progressbar-horz-trough.png"
2319      border      = {3, 3, 2, 2}
2320      stretch     = TRUE
2321      orientation = HORIZONTAL
2322    }
2323
2324    image {
2325      function    = BOX
2326      detail      = "trough"
2327      file        = "assets/progressbar-vert-trough.png"
2328      border      = {2, 2, 3, 3}
2329      stretch     = TRUE
2330      orientation = VERTICAL
2331    }
2332
2333  }
2334
2335}
2336
2337style "treeview_header_button" {
2338
2339  engine "pixmap" {
2340    image {
2341      function = SHADOW
2342      state    = NORMAL
2343      file     = "assets/treeview-header-button.png"
2344      border   = {4, 4, 4, 4}
2345      stretch  = TRUE
2346    }
2347  }
2348
2349}
2350
2351style "treeview_header_label" {
2352
2353  xthickness = 1
2354  ythickness = 0
2355
2356  font_name    = "Bold"
2357
2358  GtkButton::inner-border = {5, 5, 0, 1}
2359
2360  engine "pixmap" {
2361
2362    image {
2363      function  = BOX
2364      file      = "assets/treeview-separator-ltr.png"
2365      border    = {0, 1, 0, 1}
2366      stretch   = TRUE
2367      direction = LTR
2368    }
2369
2370    image {
2371      function  = BOX
2372      file      = "assets/treeview-separator-rtl.png"
2373      border    = {1, 0, 0, 1}
2374      stretch   = TRUE
2375      direction = RTL
2376    }
2377
2378    image {
2379      function        = ARROW
2380      state           = NORMAL
2381      overlay_file    = "assets/treeview-pan-up.png"
2382      overlay_stretch = FALSE
2383      arrow_direction = UP
2384    }
2385
2386    image {
2387      function        = ARROW
2388      state           = PRELIGHT
2389      overlay_file    = "assets/treeview-pan-up-hover.png"
2390      overlay_stretch = FALSE
2391      arrow_direction = UP
2392    }
2393
2394    image {
2395      function        = ARROW
2396      state           = ACTIVE
2397      overlay_file    = "assets/treeview-pan-up-active.png"
2398      overlay_stretch = FALSE
2399      arrow_direction = UP
2400    }
2401
2402    image {
2403      function        = ARROW
2404      state           = NORMAL
2405      overlay_file    = "assets/treeview-pan-down.png"
2406      overlay_stretch = FALSE
2407      arrow_direction = DOWN
2408    }
2409
2410    image {
2411      function        = ARROW
2412      state           = PRELIGHT
2413      overlay_file    = "assets/treeview-pan-down-hover.png"
2414      overlay_stretch = FALSE
2415      arrow_direction = DOWN
2416    }
2417
2418    image {
2419      function        = ARROW
2420      state           = ACTIVE
2421      overlay_file    = "assets/treeview-pan-down-active.png"
2422      overlay_stretch = FALSE
2423      arrow_direction = DOWN
2424    }
2425
2426  }
2427
2428}
2429
2430style "scrolled_window" {
2431
2432  engine "pixmap" {
2433    image {
2434      function = SHADOW
2435      file     = "assets/frame.png"
2436      border   = {1, 1, 1, 1}
2437      stretch  = TRUE
2438    }
2439  }
2440
2441}
2442
2443style "frame" {
2444
2445  engine "pixmap" {
2446
2447    image {
2448      function = SHADOW
2449      shadow   = NONE
2450    }
2451
2452    image {
2453      function = SHADOW
2454      file     = "assets/frame.png"
2455      border   = {1, 1, 1, 1}
2456      stretch  = TRUE
2457    }
2458
2459    image {
2460      function       = SHADOW_GAP
2461      file           = "assets/frame.png"
2462      border         = {1, 1, 1, 1}
2463      stretch        = TRUE
2464      gap_start_file = "assets/border.png"
2465      gap_end_file   = "assets/border.png"
2466    }
2467
2468  }
2469
2470}
2471
2472style "toolbar_button" {
2473
2474  xthickness = 2
2475  ythickness = 2
2476
2477  GtkButton::inner-border = {2, 2, 2, 2}
2478
2479}
2480
2481style "toolbar_separator" {
2482
2483  GtkWidget::wide-separators  = 1
2484  GtkWidget::separator-width  = 1
2485  GtkWidget::separator-height = 1
2486
2487  engine "pixmap" {
2488    image {
2489      function = BOX
2490      file     = "assets/line.png"
2491    }
2492  }
2493
2494}
2495
2496style "inline_toolbar" {
2497
2498  GtkToolbar::button-relief = GTK_RELIEF_NORMAL
2499
2500  engine "pixmap" {
2501    image {
2502      function = SHADOW
2503      file     = "assets/frame-inline.png"
2504      border   = {1, 1, 0, 1}
2505      stretch  = TRUE
2506    }
2507  }
2508
2509}
2510
2511style "tooltip" {
2512
2513  xthickness = 13
2514  ythickness = 13
2515
2516  bg[NORMAL]   = @tooltip_bg_color
2517  fg[NORMAL]   = @tooltip_fg_color
2518  bg[SELECTED] = @tooltip_bg_color
2519
2520}
2521
2522style "text" = "default" {
2523  engine "murrine" { textstyle = 0 }
2524}
2525
2526style "menu_text" = "menu_item" {
2527  engine "murrine" { textstyle = 0 }
2528}
2529
2530style "disable_separator" {
2531
2532  xthickness = 0
2533  ythickness = 0
2534
2535  GtkWidget::wide-separators = 1
2536
2537}
2538
2539# Default style, containing theme properties and trying to match every widget as
2540# much as possible, which is not only faster than trying to match every widget
2541# by its own but also less bug-prune and more consistent. However there is some
2542# widget specific stuff that needs to be taken care of, which is the point of
2543# every other style below.
2544class "GtkWidget" style "default"
2545
2546 ######################################
2547 # Override padding, style and colour #
2548 ######################################
2549
2550class "GtkButton"                                                  style "button"
2551class "GtkLinkButton"                                              style "link_button"
2552class "GtkEntry"                                                   style "entry"
2553class "GtkOldEditable"                                             style "entry"
2554class "GtkNotebook"                                                style "notebook"
2555class "GtkHScale"                                                  style "scale_horz"
2556class "GtkVScale"                                                  style "scale_vert"
2557class "GtkProgressBar"                                             style "progressbar"
2558class "GtkScrolledWindow"                                          style "scrolled_window"
2559class "GtkFrame"                                                   style "frame"
2560class "GtkSeparatorToolItem"                                       style "toolbar_separator"
2561class "GtkMenuBar"                                                 style "menubar"
2562class "GtkMenu"                                                    style "menu"
2563class "GtkTextView"                                                style "textview"
2564
2565# Menu and menubar items
2566widget_class "*<GtkMenuItem>*"                                     style "menu_item"
2567widget_class "*<GtkMenuBar>.<GtkMenuItem>*"                        style "menubar_item"
2568widget_class "*<GtkMenuBar>*"                                      style "menubar_item"
2569widget_class "*<GtkSeparatorMenuItem>*"                            style "separator_menu_item"
2570
2571# Treeview buttons
2572widget_class "*<GtkTreeView>*<GtkButton>*"                         style "treeview_header_label"
2573widget_class "*<GtkTreeView>*<GtkButton>"                          style "treeview_header_button"
2574
2575# Give the file chooser toolbar a border
2576widget_class "*<GtkFileChooserDefault>*<GtkToolbar>"               style "inline_toolbar"
2577
2578# Fix padding on regular comboboxes
2579widget_class "*<GtkComboBox>.<GtkButton>"                          style "combobox"
2580# And disable separators on them
2581widget_class "*<GtkComboBox>.<GtkButton>*<GtkSeparator>"           style "disable_separator"
2582
2583# Join together the ComboBoxEntry entry and button
2584widget_class "*<GtkComboBoxEntry>*"                                style "combobox_entry"
2585
2586# Join the Combo entry and button
2587widget_class "*<GtkCombo>*"                                        style "combobox_entry"
2588# Tweak the padding on the button a little bit because it
2589# uses it a bit differently
2590widget_class "*<GtkCombo>.<GtkButton>"                             style "combo_button_padding"
2591
2592# Alas we cannot do the same for ComboBoxText because there
2593# isn't a way to apply the style to only the comboboxes that
2594# have an entry inside
2595
2596# Toolbar buttons have different paddings
2597widget_class "*<GtkToolbar>*<GtkButton>"                           style "toolbar_button"
2598
2599# Notebooks are white, act accordingly
2600widget_class "*<GtkNotebook>*<GtkEntry>"                           style "notebook_entry"
2601widget_class "*<GtkNotebook>*<GtkProgressBar>"                     style "notebook_bg"
2602widget_class "*<GtkNotebook>*<GtkSpinButton>"                      style "notebook_bg"
2603widget_class "*<GtkNotebook>*<GtkScrolledWindow>*<GtkViewport>"    style "notebook_bg"
2604widget_class "*<GtkNotebook>*<GimpRuler>"                          style "notebook_bg"
2605widget_class "*<GtkNotebook>.<GimpDisplayShell>*<GtkEventBox>"     style "notebook_bg"
2606widget_class "*<GtkNotebook>*<GtkComboBoxEntry>*"                  style "notebook_combo"
2607widget_class "*<GtkNotebook>*<GtkCombo>*"                          style "notebook_combo"
2608
2609# However, stuff inside eventboxes inside notebooks is grey
2610# again, react
2611widget_class "*<GtkNotebook>*<GtkEventBox>*<GtkEntry>"             style "normal_entry"
2612widget_class "*<GtkNotebook>*<GtkEventBox>*<GtkProgressBar>"       style "normal_bg"
2613widget_class "*<GtkNotebook>*<GtkEventBox>*<GtkSpinButton>"        style "normal_bg"
2614widget_class "*<GtkNotebook>*<GtkEventBox>*<GtkComboBoxEntry>*"    style "combobox_entry"
2615widget_class "*<GtkNotebook>*<GtkEventBox>*<GtkCombo>*"            style "combobox_entry"
2616widget_class "*<GtkNotebook>*<GtkEventBox>*<GtkCombo>.<GtkButton>" style "combo_button_padding"
2617
2618# ComboBoxes tend to draw the button label with text[]
2619# instead of fg[], we need to fix that
2620widget_class "*<GtkComboBox>*<GtkCellView>"                        style "combobox_cellview"
2621
2622# GTK tooltips
2623widget "gtk-tooltip*"                                              style "tooltip"
2624
2625# Fixes ugly text shadows for insensitive text
2626widget_class "*<GtkLabel>"                                          style "text"
2627widget_class "*<GtkMenu>*<GtkLabel>"                                style "menu_text"
2628widget_class "*<GtkComboBox>*<GtkCellLayout>"                       style "text"
2629widget_class "*<GtkNotebook>*<GtkLabel>"                            style "text"
2630widget_class "*<GtkNotebook>*<GtkCellLayout>"                       style "text"