# # Water Vapor GTK 2.0 Theme by bladrasame@gmail.com # # This is a shameless (but extensive) hack of the excellent # Glossy P them by m5brane (m5brane_AT_tolman.physics.lsa.umich.edu) #gtk-icon-sizes = "gtk-large-toolbar=24,24:panel-menu=24,24" #include "iconrc" style "wv-default" { #Yes or No? GtkWidget::focus_padding = 1 GtkFrame::shadow_type = GTK_SHADOW_OUT GtkScrolledWindow::shadow_type = GTK_SHADOW_OUT GtkTreeView::odd_row_color = "#e4ebf5" fg[NORMAL] = "#040c29" fg[ACTIVE] = "#000000" fg[PRELIGHT] = "#000000" fg[SELECTED] = "#000000" fg[INSENSITIVE] = "#747474" bg[NORMAL] = "#ececed" bg[ACTIVE] = "#bbbbbb" bg[PRELIGHT] = "#ececed" bg[SELECTED] = "#bbc8d3" bg[INSENSITIVE] = "#ececed" base[NORMAL] = "#ffffff" base[ACTIVE] = "#d4d4d4" base[PRELIGHT] = "#cccccc" base[INSENSITIVE]= "#dddddd" base[SELECTED] = "#777777" text[INSENSITIVE]= "#747474" text[SELECTED] = "#ededed" text[ACTIVE] = "#040404" #A semi-transparent hi-light for files selected in Nautilus NautilusIconContainer::highlight_alpha=160 #This sets the color used for the text under the icons in nautilus when they are not highlighted. NautilusIconContainer::dark_info_color="#000000" #This is the color of the text under an icon in Nautilus when it is highlighted. NautilusIconContainer::light_info_color="#ececed" engine "pixmap" { #This defines how the focus is drawn. Using a transparent image means there is #no line around a widget when it is in focus. image { function = FOCUS recolorable = TRUE overlay_file = "transparent.png" overlay_border = { 0, 0, 0, 0 } overlay_stretch = TRUE } #The following four entries describe how the different types of shadows #are drawn image { function = SHADOW recolorable = TRUE shadow = OUT file = "shadow_etched_out.png" border = { 2, 2, 2, 2 } stretch = TRUE } # Tooltips image { function = FLAT_BOX recolorable = TRUE detail = "tooltip" file = "tooltip.png" border = { 7, 7, 5, 5 } stretch = TRUE } image { function = SHADOW recolorable = TRUE shadow = IN file = "shadow_in.png" border = { 2, 2, 2, 2 } stretch = TRUE } image { function = SHADOW recolorable = TRUE shadow = ETCHED_IN file = "shadow_etched_in.png" border = { 2, 2, 2, 2 } stretch = TRUE } image { function = SHADOW recolorable = TRUE shadow = ETCHED_OUT file = "shadow_etched_out.png" border = { 2, 2, 2, 2 } stretch = TRUE } #How to draw horizontal lines image { function = HLINE recolorable = TRUE file = "hline.png" border = { 1, 1, 1, 0 } stretch = TRUE } #How to draw vertical lines image { function = VLINE recolorable = TRUE file = "vline.png" border = { 1, 0, 1, 1 } stretch = TRUE } #The following two entries describe how handles (grippers) are drawn. image { function = HANDLE orientation = HORIZONTAL recolorable = TRUE #The background image on boxes with horizontal handles. file = "toolbar.png" border = { 1,1,1,1 } stretch = TRUE #The overlay on horizontal handles overlay_file = "vertical_handle.png" overlay_border = { 0,0,0,0 } overlay_stretch = FALSE } image { function = HANDLE recolorable = TRUE #The background on vertical handles file = "toolbar.png" border = { 1, 1, 1, 1 } stretch = TRUE #The overlay on vertical handles. overlay_file = "horizontal_handle.png" overlay_border = {0,0,0,0} overlay_stretch = FALSE orientation = VERTICAL shadow = OUT } #This tells gtk how to draw the base of a handlebox; i.e. the bin that the #buttons sit in. image { function = BOX recolorable = TRUE detail = "handlebox_bin" file = "transparent.png" border = { 1,1,1,1 } stretch = TRUE } } } ##################################################### #Buttons ##################################################### style "button" { GtkButton::default_border = { 0, 0, 0, 0 } #GtkButton::default_outside_border = { 2, 2, 2, 2 } #This adds a little extra horizontal thickness to the buttons. I've added this so #the label on a button has a little room on either side. xthickness=2 ythickness=1 engine "pixmap" { image { function = BOX recolorable = TRUE state = NORMAL shadow = OUT detail = "buttondefault" file = "gray_button.png" border = { 9,9,10,10 } stretch = TRUE } image { function = BOX recolorable = TRUE state = NORMAL #shadow = IN file = "gray_button.png" border = { 9,9,10,10 } stretch = TRUE } image { function = BOX recolorable = TRUE state = PRELIGHT shadow = OUT file = "menu_hi-light_3.png" border = { 9,9,10,10 } stretch = TRUE } image { function = BOX recolorable = TRUE state = PRELIGHT shadow = IN file = "tooltippy.png" border = { 9,9,10,10 } stretch = TRUE } image { function = BOX recolorable = TRUE state = NORMAL shadow = OUT file = "menu_hi-light_2.png" border = { 9,9,10,10 } stretch = TRUE } image { function = BOX recolorable = TRUE state = INSENSITIVE shadow = OUT file = "tooltippyi.png" border = { 9,9,10,10 } stretch = TRUE } image { function = BOX recolorable = TRUE state = INSENSITIVE shadow = OUT file = "tooltippyi.png" border = { 9,9,10,10 } stretch = TRUE } image { function = BOX recolorable = TRUE state = SELECTED shadow = OUT file = "insens.png" border = {9,9,10,10 } stretch = TRUE } image { function = BOX recolorable = TRUE state = ACTIVE shadow = IN file = "tooltippy.png" border = { 9,9,10,10 } stretch = TRUE } } } class "GtkButton" style "button" ################################################ # Paned Widgets: Windows divided into two or more sections, which can be # resized by dragging handles. ################################################ style "wv-paned" = "wv-default" { #This defines the thickness of the bar that divides the window. GtkPaned::handle_size = 8 engine "pixmap" { # The handle on horizontal dividers image { function = HANDLE recolorable = TRUE file = "transparent.png" border = { 1, 1, 1, 1 } stretch = TRUE overlay_file = "horizontal_paned_handle.png" overlay_border = {0,0,0,0} overlay_stretch = FALSE orientation = HORIZONTAL } # The handle on vertical dividers image { function = HANDLE recolorable = TRUE file = "transparent.png" border = { 1, 1, 1, 1 } stretch = TRUE overlay_file = "vertical_paned_handle.png" overlay_border = {0,0,0,0} overlay_stretch = FALSE orientation = VERTICAL } } } class "Gtk*Paned" style "wv-paned" ################################################ # Toolbars drawn by gtk ################################################ style "wv-toolbar"="wv-default" { engine "pixmap" { # This tells gtk how to draw the toolbar image { function = BOX recolorable = TRUE shadow = OUT file = "toolbar.png" border = { 2,2,1,1 } stretch = TRUE } } } widget_class "GtkToolBar" style "wv-toolbar" class "*Tool*" style "wv-toolbar" ############################################### # Menus ############################################### style "wv-menu" { ythickness=3 xthickness=5 engine "pixmap" { image { function = BOX recolorable = TRUE file = "menu_background.png" border = {4,4,2,3} stretch = TRUE } image { function = HLINE recolorable = TRUE file = "hline.png" border = { 1, 1, 1, 0 } stretch = TRUE } } } #widget_class "*Menu*" style "wv-menu" class "GtkMenu" style "wv-menu" ############################################### # Menu Items ############################################### style "MenuItem" { #This sets the thickness of a buffer between the side of the menu #and where the mouse-over image (set below) is drawn. The side of #the menu is defined by the border set in the menu style above. xthickness = 4 ythickness = 3 engine "pixmap" { #This image is used to draw the highlight on a menu entry when it is #moused over. image { function = BOX recolorable = TRUE file = "menu_hi-light_2.png" border = { 2, 2, 2, 2 } stretch = TRUE } image { function = HLINE recolorable = TRUE file = "hline.png" border = { 1, 1, 1, 0 } stretch = TRUE } } } widget_class "*.GtkMenuItem.*" style "MenuItem" class "GtkMenuItem" style "MenuItem" ############################################### # Styles and Controls for Option Menus ############################################### style "OptionMenu" { engine "pixmap" { image { function = BOX recolorable = TRUE state = NORMAL file = "OptionMenu.png" border = { 12, 22, 10, 10 } stretch = TRUE } image { function = BOX state = PRELIGHT recolorable = TRUE file = "OptionMenuP.png" border = { 12, 22, 10, 10 } stretch = TRUE } image { function = BOX recolorable = TRUE state = SELECTED file = "OptionMenuA.png" border = { 12, 22, 10, 10 } stretch = TRUE } image { function = TAB recolorable = TRUE overlay_file = "menubar_option_arrow.png" overlay_stretch = FALSE } image { function = TAB recolorable = TRUE state = INSENSITIVE overlay_file = "menubar_option_arrow_insensitive.png" overlay_stretch = FALSE } } } class "GtkOptionMenu" style "OptionMenu" ##################################################### #Notebook: How to draw the tabs, spacings, and backgrounds for notebooks. ##################################################### style "notebook" { #These thickness settings make sure that we see the whole thin blue line at the top #of the notebook page. xthickness = 1 ythickness = 1 engine "pixmap" { # NOTEBOOK TABS ##################### #Tabs at the top of the notebook. ##################### #This is the image used for the selected tab. image { function = EXTENSION state = NORMAL gap_side = BOTTOM file = "SelectedTabTop.png" border = {9,9,9,1} stretch = TRUE } #This is the image used for tabs in the background. image { function = EXTENSION state = ACTIVE gap_side = BOTTOM file = "NormalTabTop.png" border = {9,9,9,1} stretch = TRUE } ######################## # Tabs at the bottom of the notebook. ######################## # The image used for background tabs. image { function = EXTENSION state = ACTIVE gap_side = TOP file = "NormalTabBottom.png" border = {8,8,1,9} stretch = TRUE } # The image for selected tabs. image { function = EXTENSION state = NORMAL gap_side = TOP file = "SelectedTabBottom.png" border = {8,8,1,9} stretch = TRUE } #Use this image when the tabs are at the top of the notebook. image { function = BOX_GAP gap_side = TOP file = "notebook_top_flat.png" border = {1,1,4,1} stretch = TRUE } # use this image when the tabs are on the bottom of the notebook. image { function = BOX_GAP gap_side = BOTTOM file = "notebook_bottom_flat.png" border = {1,1,1,4} stretch = TRUE } # Use this when the tabs are on the left image { function = BOX_GAP gap_side = LEFT file = "notebook_left_flat.png" border = {4,1,1,1} stretch = TRUE } # Use this when the tabs are on the right image { function = BOX_GAP gap_side = RIGHT file = "notebook_right_flat.png" border = {1,4,1,1} stretch = TRUE } #For drawing notebook pages when they are not attached to a tab. When does #this happen? image { function = BOX file = "notebook_top_flat.png" border = {1,1,4,1} stretch = TRUE gap_side = TOP } } } class "GtkNotebook" style "notebook" ##################################################### # Text Entries ##################################################### style "entry" { base[NORMAL] = "#ececed" engine "pixmap" { image { function = FLAT_BOX recolorable = TRUE state = INSENSITIVE detail = "entry_bg" file = "text_entry.png" border = {6,6,6,6 } stretch = TRUE } image { function = FLAT_BOX recolorable = TRUE state = NORMAL detail = "entry_bg" file = "text_entry.png" border = {6,6,6,6 } stretch = TRUE } image { function = FLAT_BOX recolorable = TRUE state = SELECTED detail = "entry_bg" file = "out_sel.png" border = { 1,1,8,8 } stretch = TRUE } #This is a transparent shadow. image { function = SHADOW recolorable = TRUE shadow = IN file = "transparent.png" border = { 2,2,2,2 } stretch = TRUE } } } class "GtkEntry" style "entry" ############################################### # Gtk Lists, like the Rhythmbox playlist or Nautilus Listview ############################################### style "list-header" { #Comment out the ythickness setting below for thicker column headers. ythickness = 2 GtkTreeView::odd_row_color = "#dddddd" GtkTreeView::even_row_color = "#ffffff" engine "pixmap" { #This image is used to draw the headers of columns in list views when they are #not selected. image { function = BOX recolorable = TRUE shadow = OUT file = "list_header.png" border = { 3,3,3,3 } stretch = TRUE } #This image is used to draw the column headers in list views when they are #clicked. image { function = BOX recolorable = TRUE shadow = IN file = "list_header_clicked.png" border = { 3,3,3,3 } stretch = TRUE } } } widget_class "*List" style "list-header" widget_class "*Tree*" style "list-header" widget_class "GtkCList" style "list-header" ############################################### # GtkScrollbar: The scrollbars on windows ############################################### style "Scrollbar" { GtkRange::trough_border = 1 GtkRange::slider_width = 16 GtkRange::stepper_size = 16 GtkScrollbar::min_slider_length = 30 engine "pixmap" { #The trough for vertical scrollbars. This is the region in which the slider moves. image { function = BOX recolorable = FALSE detail = "trough" file = "vertical_trough.png" border = { 3, 3, 18, 18 } stretch = TRUE orientation = VERTICAL } #The trough for horizontal scrollbars. image { function = BOX recolorable = FALSE detail = "trough" file = "horizontal_trough.png" border = { 17, 17, 1, 1 } stretch = TRUE orientation = HORIZONTAL } #The image used to draw the slider for horizontal scrollbars #in the NORMAL state. image { function = SLIDER recolorable = TRUE state = NORMAL file = "scrollbar_horizontal.png" border = { 15, 15, 6, 6 } stretch = TRUE orientation = HORIZONTAL } #The image used to draw the slider for horizontal scrollbars #in their prelight state. image { function = SLIDER recolorable = TRUE state = PRELIGHT file = "scrollbar_active_horizontal.png" border = { 15, 15, 6, 6 } stretch = TRUE orientation = HORIZONTAL } #The image used to draw the slider for horizontal scrollbars #in their ACTIVE (pressed?) state. image { function = SLIDER recolorable = TRUE state = ACTIVE file = "scrollbar_horizontal.png" border = { 15, 15, 6, 6 } stretch = TRUE orientation = HORIZONTAL } #The image used to draw the slider for horizontal scrollbars #in their INSENSITIVE state. image { function = SLIDER recolorable = TRUE state = INSENSITIVE file = "scrollbar_horizontal.png" border = { 15, 15, 6, 6 } stretch = TRUE orientation = HORIZONTAL } #The image used to draw the slider for vertical scrollbars #in their NORMAL state. image { function = SLIDER recolorable = TRUE state = NORMAL file = "scrollbar_vertical.png" border = { 6, 6, 14, 14 } stretch = TRUE orientation = VERTICAL } #The image used to draw the slider for vertical scrollbars #in their prelight state. image { function = SLIDER recolorable = TRUE state = PRELIGHT file = "scrollbar_active_vertical.png" border = { 6, 6, 14, 14 } stretch = TRUE orientation = VERTICAL } #The image used to draw the slider for vertical scrollbars #in their INSENSITIVE state. image { function = SLIDER recolorable = TRUE state = INSENSITIVE file = "scrollbar_vertical.png" border = { 6, 6, 14, 14 } stretch = TRUE orientation = VERTICAL } } } class "GtkScrollbar" style "Scrollbar" ########################################### # Scales: The sliders used for volume, track position, etc. Drawn without # arrow boxes on the end. ########################################### #Problem: scales in some apps, like the Gimp, dont look right when they #are small. The slider is too thin and has two overlapping pieces and looks #like crap. style "Scales" { GtkRange::trough_border = 0 GtkRange::slider_width = 15 engine "pixmap" { image { function = BOX recolorable = TRUE detail = "trough" file = "vertical_trough_3.png" border = { 1, 1, 3, 3 } stretch = TRUE orientation = VERTICAL } image { function = BOX recolorable = TRUE detail = "trough" file = "horizontal_trough_3.png" border = { 3, 3, 1, 1 } stretch = TRUE orientation = HORIZONTAL } image { function = SLIDER recolorable = TRUE state = NORMAL file = "scrollbar_horizontal.png" border = { 14, 14, 6, 6 } stretch = TRUE orientation = HORIZONTAL } image { function = SLIDER recolorable = TRUE state = PRELIGHT file = "scrollbar_active_horizontal.png" border = { 14, 14, 6, 6 } stretch = TRUE orientation = HORIZONTAL } image { function = SLIDER recolorable = TRUE state = ACTIVE file = "scrollbar_active_horizontal.png" border = { 14, 14, 6, 6 } stretch = TRUE orientation = HORIZONTAL } image { function = SLIDER recolorable = TRUE state = INSENSITIVE file = "scrollbar_horizontal.png" border = { 14, 14, 6, 6 } stretch = TRUE orientation = HORIZONTAL } image { function = SLIDER recolorable = TRUE state = NORMAL file = "scrollbar_vertical.png" border = { 6, 6, 14, 14 } stretch = TRUE orientation = VERTICAL } image { function = SLIDER recolorable = TRUE state = PRELIGHT file = "scrollbar_active_vertical.png" border = { 6, 6, 14, 14 } stretch = TRUE orientation = VERTICAL } image { function = SLIDER recolorable = TRUE state = ACTIVE file = "scrollbar_active_vertical.png" border = { 6, 6, 14, 14 } stretch = TRUE orientation = VERTICAL } image { function = SLIDER recolorable = TRUE state = INSENSITIVE file = "scrollbar_vertical.png" border = { 6, 6, 14, 14 } stretch = TRUE orientation = VERTICAL } } } class "GtkScale" style "Scales" ################################################## #Spin Controls #--------------- #These are buttons with two arrows that let you set some value by clicking the #the arrows. The widget might also have a text entry box for setting the value #directly by typing it in. ################################################## style "spin" { engine "pixmap" { #First we set the images for drawing different parts of a text entry that #might be attached to the widget. This could be done by inheriting from the #style used for GtkEntry, but we just set everything here explicitly. Still having #the same problem as with GtkEntry with the white outline if we do not draw #a shadow with a thick enough border. image { function = FLAT_BOX recolorable = TRUE state = NORMAL detail = "entry_bg" file = "text_entry.png" border = {6,6,6,6 } stretch = TRUE } image { function = FLAT_BOX recolorable = TRUE state = SELECTED detail = "entry_bg" file = "out_sel.png" border = { 1,1,8,8 } stretch = TRUE } image { function = FLAT_BOX recolorable = TRUE state = INSENSITIVE detail = "entry_bg" file = "text_entry.png" border = {6,6,6,6 } stretch = TRUE } image { function = SHADOW recolorable = TRUE shadow = IN file = "transparent.png" border = { 1,1,1,1 } stretch = TRUE } #The following two sections define the images used to draw the up and #down spin buttons in the INSENSITIVE state. image { function = BOX recolorable = TRUE state = INSENSITIVE detail = "spinbutton_up" file = "spin_button_up.png" border = { 7,7,6,0 } stretch = TRUE } image { function = BOX recolorable = TRUE state = INSENSITIVE detail = "spinbutton_down" file = "spin_button_down.png" border = { 7,7,0,6 } stretch = TRUE } #The following two sections define the images used to draw the up and #down spin buttons in the PRELIGHT state. image { function = BOX recolorable = TRUE state = PRELIGHT detail = "spinbutton_up" file = "spin_button_up_prelight.png" border = { 7,7,6,0 } stretch = TRUE } image { function = BOX recolorable = TRUE state = PRELIGHT detail = "spinbutton_down" file = "spin_button_down_prelight.png" border = { 7,7,0,6 } stretch = TRUE } #The following two sections define the images used to draw the up and #down spin buttons in any states that we have not already defined. image { function = BOX recolorable = TRUE detail = "spinbutton_up" file = "spin_button_up_active.png" border = { 7,7,6,0 } stretch = TRUE } image { function = BOX recolorable = TRUE detail = "spinbutton_down" file = "spin_button_down_active.png" border = { 7,7,0,6 } stretch = TRUE } #The arrows drawn on the spinbuttons are set by the next two #entries. Different types of arrows can be used for different #states by setting images for each state. image { function = ARROW recolorable = TRUE overlay_file = "spin_button_up_arrow.png" overlay_border = { 0, 0, 0, 0 } overlay_stretch = FALSE arrow_direction = UP } image { function = ARROW recolorable = TRUE overlay_file = "spin_button_down_arrow.png" overlay_border = { 0, 0, 0, 0 } overlay_stretch = FALSE arrow_direction = DOWN } } } class "GtkSpin*" style "spin" ############################################ # Check Boxes # -------------- # This section tells GTK how to draw check boxes. ############################################ style "CheckBox" { engine "pixmap" { #This is the image used to draw an unchecked box. image { function = CHECK recolorable = TRUE shadow = OUT overlay_file = "unchecked_box.png" overlay_stretch = FALSE } #This is the image used to draw a selected (checked) box. image { function = CHECK recolorable = TRUE shadow = IN overlay_file = "checked_box.png" overlay_stretch = FALSE } #Use this image to draw the highlight when a line with a check box #is moused over. image { function = FLAT_BOX recolorable = TRUE file = "menu_hi-light_2.png" border = { 1, 1, 1, 1 } } } } class "GtkCheckButton" style "CheckBox" ############################################ # Radio Buttons ############################################ style "RadioButton" { engine "pixmap" { image { function = OPTION recolorable = TRUE shadow = OUT overlay_file = "option_out_2.png" overlay_border = { 0, 0, 0, 0 } overlay_stretch = FALSE } image { function = OPTION recolorable = TRUE shadow = IN overlay_file = "option_in_2.png" overlay_border = { 0, 0, 0, 0 } overlay_stretch = FALSE } #Use this image to draw the highlight when a line with a radio box #is moused over. image { function = FLAT_BOX recolorable = TRUE file = "menu_hi-light_2.png" border = { 1, 1, 1, 1 } } } } class "GtkRadioButton" style "RadioButton" ################################################ # Statusbars Drawn by gtk (info bar on the bottom of the window) ################################################ style "wv-GtkStatusbar" = "wv-default" { GtkStatusbar::shadow_type = GTK_SHADOW_NONE engine "pixmap" { #This does not seem to be working. It seems that you can tell gtk how #to draw the resizing grip in the bottom right corner of the window, which #seems to be part of the status bar. Not sure why it is not working. image { function = RESIZE_GRIP recolorable = TRUE #state = NORMAL detail = "statusbar" overlay_file = "menu_hi-light_2.png" overlay_border = {1,1,1,1 } overlay_stretch = FALSE } } } class "GtkStatusbar" style "wv-GtkStatusbar" ########################################### #Progress Bars ########################################### style "ProgressBar" { #xthickness = 1 #ythickness = 1 GtkProgressBar::trough_border = 0 engine "pixmap" { image { function = BOX recolorable = TRUE detail = "bar" file = "progressbar.png" border = { 1, 2, 1, 1} stretch = TRUE } image { function = BOX recolorable = TRUE detail = "trough" file = "trough.png" border = { 1, 1, 1, 1 } stretch = TRUE orientation = HORIZONTAL } } } class "GtkProgressBar" style "ProgressBar" ########################################### #Text Boxes in Notebooks ########################################### #Notebook pages have a darker background than the normal base color. This #section sets the appropriate background colors for widgets with text entries #so they blend in with the darker grey background. This isn't a complete fix #for the problem, since some programs seem to use notebook pages (without #tabs) in such a way that they don't pick up the dark grey background. style "DarkTextEntry" { #xthickness = 1 #ythickness = 1 #font_name = "Bold" base[NORMAL] = "#CBCBCB" base[INSENSITIVE] = "#CBCBCB" } widget_class "*Notebook*Entry" style "DarkTextEntry" widget_class "*Notebook*ComboBox" style "DarkTextEntry" widget_class "*Notebook*SpinButton" style "DarkTextEntry" ############################################# #Gnome Panel ############################################# style "panelbg" { bg_pixmap[NORMAL] = "panel_background.png" bg_pixmap[INSENSITIVE] = "" bg_pixmap[PRELIGHT] = "" bg_pixmap[SELECTED] = "" bg_pixmap[ACTIVE] = "" } class "Panel*" style "panelbg" #Widgets that have not been defined yet class "GtkWidget" style "wv-default"