feat(themes; beautiful): add partial support for GTK+3 themes (#2129)

This commit is contained in:
Yauhen Kirylau 2018-06-26 16:43:20 +02:00 committed by Emmanuel Lepage Vallée
parent 25adaae594
commit 4bd5b1940d
6 changed files with 649 additions and 5 deletions

View File

@ -77,6 +77,7 @@ Additionally, the following optional dependencies exist:
- libexecinfo on systems where libc does not provide `backtrace_symbols()` to
generate slightly better backtraces on crashes
- `Xephyr` or `Xvfb` for running integration tests
- [GTK+ >= 3.10](https://www.gtk.org/) for `./themes/gtk/`
## Running Awesome

View File

@ -191,10 +191,6 @@ table th, table td {
padding: 2px;
}
#content p, #content table, #content ol, #content ul, #content dl {
max-width: 900px;
}
#about {
padding: 15px;
padding-left: 16em;

293
lib/beautiful/gtk.lua Normal file
View File

@ -0,0 +1,293 @@
---------------------------------------------------------------------------
--- Querying current GTK+ 3 theme via GtkStyleContext.
--
-- @author Yauheni Kirylau <yawghen@gmail.com>
-- @copyright 2016-2017 Yauheni Kirylau
-- @module beautiful.gtk
---------------------------------------------------------------------------
local get_dpi = require("beautiful.xresources").get_dpi
local gears_debug = require("gears.debug")
local gears_math = require("gears.math")
local join = require("gears.table").join
local unpack = unpack or table.unpack -- luacheck: globals unpack (compatibility with Lua 5.1)
local gtk = {
cached_theme_variables = nil
}
local function convert_gtk_channel_to_hex(channel_value)
return string.format("%02x", gears_math.round(channel_value * 255))
end
local function convert_gtk_color_to_hex(gtk_color)
return "#" ..
convert_gtk_channel_to_hex(gtk_color.red) ..
convert_gtk_channel_to_hex(gtk_color.green) ..
convert_gtk_channel_to_hex(gtk_color.blue) ..
convert_gtk_channel_to_hex(gtk_color.alpha)
end
local function lookup_gtk_color_to_hex(_style_context, color_name)
local gtk_color = _style_context:lookup_color(color_name)
if not gtk_color then
return nil
end
return convert_gtk_color_to_hex(gtk_color)
end
local function get_gtk_property(_style_context, property_name)
local state = _style_context:get_state()
local property = _style_context:get_property(property_name, state)
if not property then
return nil
end
return property.value
end
local function get_gtk_color_property_to_hex(_style_context, property_name)
return convert_gtk_color_to_hex(
get_gtk_property(_style_context, property_name)
)
end
local function read_gtk_color_properties_from_widget(gtk_widget, properties)
local _style_context = gtk_widget:get_style_context()
local result = {}
for result_key, style_context_property in pairs(properties) do
result[result_key] = get_gtk_color_property_to_hex(
_style_context, style_context_property
)
end
return result
end
-- luacheck: max comment line length 300
--- Get GTK+3 theme variables from GtkStyleContext
-- @treturn table Key-value table with the following structure:
-- <table class='widget_list' border=1>
-- <tr style='font-weight: bold;'> <th align='center'>Result key</th> <th align='center'>StyleContext key</th> <th align='center'>StyleContext fallback #1</th> <th align='center'>StyleContext fallback #2</th> <th align='center'>GTK Widget fallback</th> </tr>
-- <tr> <td>`font_size`</td> <td></td> <td></td> <td></td> <td>Label font-size</td> </tr>
-- <tr> <td>`font_family`</td> <td></td> <td></td> <td></td> <td>Label font-family</td> </tr>
-- <tr> <td>`bg_color`</td> <td>`theme_bg_color`</td> <td></td> <td></td> <td>Window bg</td> </tr>
-- <tr> <td>`fg_color`</td> <td>`theme_fg_color`</td> <td></td> <td></td> <td>Window fg</td> </tr>
-- <tr> <td>`base_color`</td> <td>`theme_base_color`</td> <td></td> <td></td> <td>Entry bg</td> </tr>
-- <tr> <td>`text_color`</td> <td>`theme_text_color`</td> <td></td> <td></td> <td>Entry fg</td> </tr>
-- <tr> <td>`button_bg_color`</td> <td>`theme_button_bg_color`</td> <td>`theme_bg_color`</td> <td></td> <td>Button bg</td> </tr>
-- <tr> <td>`button_fg_color`</td> <td>`theme_button_fg_color`</td> <td>`theme_fg_color`</td> <td></td> <td>Button fg</td> </tr>
-- <tr> <td>`button_border_color`</td> <td></td> <td></td> <td></td> <td>Button border-color</td> </tr>
-- <tr> <td>`button_border_radius`</td> <td></td> <td></td> <td></td> <td>Button border-radius</td> </tr>
-- <tr> <td>`button_border_width`</td> <td></td> <td></td> <td></td> <td>Button border-top-width</td> </tr>
-- <tr> <td>`selected_bg_color`</td> <td>`theme_selected_bg_color`</td> <td></td> <td></td> <td>ToggleButton bg</td> </tr>
-- <tr> <td>`selected_fg_color`</td> <td>`theme_selected_fg_color`</td> <td></td> <td></td> <td>ToggleButton fg</td> </tr>
-- <tr> <td>`menubar_bg_color`</td> <td>`menubar_bg_color`</td> <td>`theme_bg_color`</td> <td></td> <td>HeaderBar bg</td> </tr>
-- <tr> <td>`menubar_fg_color`</td> <td>`menubar_fg_color`</td> <td>`theme_fg_color`</td> <td></td> <td>HeaderBar fg</td> </tr>
-- <tr> <td>`header_button_bg_color`</td> <td>`header_button_bg_color`</td> <td>`menubar_bg_color`</td> <td>`theme_bg_color`</td> <td>HeaderBar > Button bg</td> </tr>
-- <tr> <td>`header_button_fg_color`</td> <td>`header_button_fg_color`</td> <td>`menubar_fg_color`</td> <td>`theme_fg_color`</td> <td>HeaderBar > Button fg</td> </tr>
-- <tr> <td>`header_button_border_color`</td> <td></td> <td></td> <td></td> <td>HeaderBar > Button border-color</td> </tr>
-- <tr> <td>`error_color`</td> <td>`error_color`</td> <td>`error_bg_color`</td> <td></td> <td>destructive Button bg</td> </tr>
-- <tr> <td>`error_bg_color`</td> <td>`error_bg_color`</td> <td>`error_color`</td> <td></td> <td>destructive Button bg</td> </tr>
-- <tr> <td>`error_fg_color`</td> <td>`error_fg_color`</td> <td>`theme_selected_fg_color`</td> <td></td> <td>destructive Button fg</td> </tr>
-- <tr> <td>`warning_color`</td> <td>`warning_color`</td> <td>`warning_bg_color`</td> <td></td> <td></td> </tr>
-- <tr> <td>`warning_bg_color`</td> <td>`warning_bg_color`</td> <td>`warning_color`</td> <td></td> <td></td> </tr>
-- <tr> <td>`warning_fg_color`</td> <td>`warning_fg_color`</td> <td>`theme_selected_fg_color`</td> <td></td> <td></td> </tr>
-- <tr> <td>`success_color`</td> <td>`success_color`</td> <td>`success_bg_color`</td> <td></td> <td></td> </tr>
-- <tr> <td>`success_bg_color`</td> <td>`success_bg_color`</td> <td>`success_color`</td> <td></td> <td></td> </tr>
-- <tr> <td>`success_fg_color`</td> <td>`success_fg_color`</td> <td>`theme_selected_fg_color`</td> <td></td> <td></td> </tr>
-- <tr> <td>`tooltip_bg_color`</td> <td>`theme_tooltip_bg_color`</td> <td>`theme_bg_color`</td> <td></td> <td></td> </tr>
-- <tr> <td>`tooltip_fg_color`</td> <td>`theme_tooltip_fg_color`</td> <td>`theme_fg_color`</td> <td></td> <td></td> </tr>
-- <tr> <td>`osd_bg_color`</td> <td>`osd_bg`</td> <td>`theme_tooltip_bg_color`</td> <td>`theme_bg_color`</td> <td></td> </tr>
-- <tr> <td>`osd_fg_color`</td> <td>`osd_fg`</td> <td>`theme_tooltip_fg_color`</td> <td>`theme_fg_color`</td> <td></td> </tr>
-- <tr> <td>`osd_border_color`</td> <td>`osd_borders_color`</td> <td>`osd_fg_color`</td> <td></td> <td></td> </tr>
-- <tr> <td>`wm_bg_color`</td> <td>`wm_bg`</td> <td>`menubar_bg_color`</td> <td>`theme_bg_color`</td> <td>HeaderBar bg</td> </tr>
-- <tr> <td>`wm_border_focused_color`</td> <td>`wm_border_focused`</td> <td>`theme_selected_bg_color`</td> <td></td> <td>ToggleButton bg</td> </tr>
-- <tr> <td>`wm_border_unfocused_color`</td> <td>`wm_border_unfocused`</td> <td>`wm_border`</td> <td>`menubar_bg_color`</td> <!--<td>`theme_bg_color`</td>--> <td>HeaderBar bg</td> </tr>
-- <tr> <td>`wm_title_focused_color`</td> <td>`wm_title_focused`</td> <td>`wm_title`</td> <td>`theme_selected_fg_color`</td> <td>ToggleButton fg</td> </tr>
-- <tr> <td>`wm_title_unfocused_color`</td> <td>`wm_title_unfocused`</td> <td>`wm_unfocused_title`</td> <td>`menubar_fg_color`</td> <!--<td>`theme_fg_color`</td>--> <td>HeaderBar fg</td> </tr>
-- <tr> <td>`wm_icons_focused_color`</td> <td>`wm_icons_focused`</td> <td>`wm_title_focused`</td> <td>`theme_selected_fg_color`</td> <td>ToggleButton fg</td> </tr>
-- <tr> <td>`wm_icons_unfocused_color`</td> <td>`wm_icons_unfocused`</td> <td>`wm_title_unfocused`</td> <td>`menubar_fg_color`</td> <!--<td>`theme_fg_color`</td>--> <td>HeaderBar fg</td> </tr>
-- </table>
--
function gtk.get_theme_variables()
if gtk.cached_theme_variables then
return gtk.cached_theme_variables
end
local result = {}
local _gtk_status, Gtk = pcall(function()
return require('lgi').Gtk
end)
if not _gtk_status or not Gtk then
gears_debug.print_warning(
"Can't load GTK+3 introspection. "..
"Seems like GTK+3 is not installed or `lua-lgi` was built with an incompatible GTK+3 version."
)
return nil
end
local _window_status, window = pcall(function()
return Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
end)
if not _window_status or not window then
gears_debug.print_warning(
"Can't create GTK+3 window. "..
"Seems like GTK+3 theme is not set correctly or `lua-lgi` was built with an incompatible GTK+3 version."
)
return nil
end
local style_context = window:get_style_context()
result = join(result, read_gtk_color_properties_from_widget(
window, {
bg_color="background-color",
fg_color="color",
}
))
local label = Gtk.Label()
local label_style_context = label:get_style_context()
local gdk_scale = tonumber(os.getenv("GDK_SCALE") or 1.0)
local xrdb_scale = get_dpi() / 96
local pt_to_px_ratio = 1+1/3
result["font_size"] = get_gtk_property(
label_style_context, "font-size"
) * gdk_scale / xrdb_scale / pt_to_px_ratio
result["font_family"] = get_gtk_property(
label_style_context, "font-family"
)[1]
result = join(result, read_gtk_color_properties_from_widget(
Gtk.Entry(), {
base_color="background-color",
text_color="color",
}
))
result = join(result, read_gtk_color_properties_from_widget(
Gtk.ToggleButton(), {
selected_bg_color="background-color",
selected_fg_color="color",
}
))
local button = Gtk.Button()
result = join(result, read_gtk_color_properties_from_widget(
button, {
button_bg_color="background-color",
button_fg_color="color",
button_border_color="border-color",
}
))
local button_style_context = button:get_style_context()
for result_key, style_context_property in pairs({
button_border_radius="border-radius",
button_border_width="border-top-width",
}) do
local state = style_context:get_state()
local property = button_style_context:get_property(style_context_property, state)
result[result_key] = property.value
property:unset()
end
local headerbar = Gtk.HeaderBar()
window:set_titlebar(headerbar)
result = join(result, read_gtk_color_properties_from_widget(
headerbar, {
menubar_bg_color="background-color",
}
))
if result.menubar_bg_color and result.menubar_bg_color ~= "#00000000" then
headerbar:add(label)
result = join(result, read_gtk_color_properties_from_widget(
label, {
menubar_fg_color="color",
}
))
end
headerbar:add(button)
result = join(result, read_gtk_color_properties_from_widget(
button, {
header_button_bg_color="background-color",
header_button_border_color="border-color",
}
))
if result.header_button_bg_color and result.header_button_bg_color ~= "#00000000" then
result = join(result, read_gtk_color_properties_from_widget(
button, {
header_button_fg_color="color",
}
))
end
local error_button = Gtk.Button()
error_button:get_style_context():add_class("destructive-action")
result = join(result, read_gtk_color_properties_from_widget(
error_button, {
error_bg_color="background-color",
error_fg_color="color",
}
))
for _, color_data in ipairs({
{"bg_color", "theme_bg_color"},
{"fg_color", "theme_fg_color"},
{"base_color", "theme_base_color"},
{"text_color", "theme_text_color"},
{"selected_bg_color", "theme_selected_bg_color"},
{"selected_fg_color", "theme_selected_fg_color"},
--
{"tooltip_bg_color", "theme_tooltip_bg_color", "bg_color"},
{"tooltip_fg_color", "theme_tooltip_fg_color", "fg_color"},
{"osd_bg_color", "osd_bg", "tooltip_bg_color"},
{"osd_fg_color", "osd_fg", "tooltip_fg_color"},
{"osd_border_color", "osd_borders_color", "osd_fg_color"},
{"menubar_bg_color", "menubar_bg_color", "bg_color"},
{"menubar_fg_color", "menubar_fg_color", "fg_color"},
--
{"button_bg_color", "button_bg_color", "bg_color"},
{"button_fg_color", "button_fg_color", "fg_color"},
{"header_button_bg_color", "header_button_bg_color", "menubar_bg_color"},
{"header_button_fg_color", "header_button_fg_color", "menubar_fg_color"},
--
{"wm_bg_color", "wm_bg", "menubar_bg_color"},
{"wm_border_focused_color", "wm_border_focused", "selected_bg_color"},
{"wm_border_unfocused_color", "wm_border_unfocused", "wm_border", "menubar_bg_color"},
{"wm_title_focused_color", "wm_title_focused", "wm_title", "selected_fg_color"},
{"wm_title_unfocused_color", "wm_title_unfocused", "wm_unfocused_title", "menubar_fg_color"},
{"wm_icons_focused_color", "wm_icons_focused", "wm_title_focused_color", "selected_fg_color"},
{"wm_icons_unfocused_color", "wm_icons_unfocused", "wm_title_unfocused_color", "menubar_fg_color"},
--
{"error_color", "error_color"},
{"error_bg_color", "error_bg_color", "error_color"},
{"error_fg_color", "error_fg_color", "selected_fg_color"},
{"error_color", "error_color", "error_bg_color"},
{"warning_color", "warning_color"},
{"warning_bg_color", "warning_bg_color", "warning_color"},
{"warning_fg_color", "warning_fg_color", "selected_fg_color"},
{"warning_color", "warning_color", "warning_bg_color"},
{"success_color", "success_color"},
{"success_bg_color", "success_bg_color", "success_color"},
{"success_fg_color", "success_fg_color", "selected_fg_color"},
{"success_color", "success_color", "success_bg_color"},
}) do
local result_key, style_context_key, fallback_key, fallback_key2 = unpack(color_data)
result[result_key] = lookup_gtk_color_to_hex(style_context, style_context_key) or (
result[result_key] ~= "#00000000" and
result[result_key] or
result[fallback_key] or
result[fallback_key2] or
result[result_key] -- <-- here is for case if it was meant to be a fully transparent color on purpose
)
if not result[result_key] then
gears_debug.print_warning("Can't read color '" .. style_context_key .. "' from GTK+3 theme.")
end
end
window:destroy()
gtk.cached_theme_variables = result
return result
end
return gtk

View File

@ -22,10 +22,12 @@ local protected_call = require("gears.protected_call")
local xresources = require("beautiful.xresources")
local theme_assets = require("beautiful.theme_assets")
local gtk = require("beautiful.gtk")
local beautiful = {
xresources = xresources,
theme_assets = theme_assets,
gtk = gtk,
mt = {}
}

View File

@ -245,9 +245,11 @@ for f in $tests; do
pattern+='|^.{19} W: awesome:.*'
fi
error="$(grep --color -o --binary-files=text -E "$pattern" "$awesome_log" || true)"
# Filter out false positive errors:
error="$(echo "$error" | grep -vE ".{19} W: awesome: (Can't read color .* from GTK)" || true)"
if [[ $fail_on_warning ]]; then
# Filter out ignored warnings.
error="$(echo "$error" | grep -vE ".{19} W: awesome: (a_glib_poll|Cannot reliably detect EOF|beautiful: can't get colorscheme from xrdb)" || true)"
error="$(echo "$error" | grep -vE ".{19} W: awesome: (a_glib_poll|Cannot reliably detect EOF|beautiful: can't get colorscheme from xrdb|Can't read color .* from GTK+3 theme)" || true)"
fi
if [[ -n "$error" ]]; then
color_red

350
themes/gtk/theme.lua Normal file
View File

@ -0,0 +1,350 @@
----------------------------------------------
-- Awesome theme which follows GTK+ 3 theme --
-- by Yauhen Kirylau --
----------------------------------------------
local theme_assets = require("beautiful.theme_assets")
local dpi = require("beautiful.xresources").apply_dpi
local gfs = require("gears.filesystem")
local themes_path = gfs.get_themes_dir()
local gears_shape = require("gears.shape")
local wibox = require("wibox")
local awful_widget_clienticon = require("awful.widget.clienticon")
local gtk = require("beautiful.gtk")
-- Helper functions for modifying hex colors:
--
local hex_color_match = "[a-fA-F0-9][a-fA-F0-9]"
local function darker(color_value, darker_n)
local result = "#"
local channel_counter = 1
for s in color_value:gmatch(hex_color_match) do
local bg_numeric_value = tonumber("0x"..s)
if channel_counter <= 3 then
bg_numeric_value = bg_numeric_value - darker_n
end
if bg_numeric_value < 0 then bg_numeric_value = 0 end
if bg_numeric_value > 255 then bg_numeric_value = 255 end
result = result .. string.format("%02x", bg_numeric_value)
channel_counter = channel_counter + 1
end
return result
end
local function is_dark(color_value)
local bg_numeric_value = 0;
local channel_counter = 1
for s in color_value:gmatch(hex_color_match) do
bg_numeric_value = bg_numeric_value + tonumber("0x"..s);
if channel_counter == 3 then
break
end
channel_counter = channel_counter + 1
end
local is_dark_bg = (bg_numeric_value < 383)
return is_dark_bg
end
local function mix(color1, color2, ratio)
ratio = ratio or 0.5
local result = "#"
local channels1 = color1:gmatch(hex_color_match)
local channels2 = color2:gmatch(hex_color_match)
for _ = 1,3 do
local bg_numeric_value = math.ceil(
tonumber("0x"..channels1())*ratio +
tonumber("0x"..channels2())*(1-ratio)
)
if bg_numeric_value < 0 then bg_numeric_value = 0 end
if bg_numeric_value > 255 then bg_numeric_value = 255 end
result = result .. string.format("%02x", bg_numeric_value)
end
return result
end
local function reduce_contrast(color, ratio)
ratio = ratio or 50
return darker(color, is_dark(color) and -ratio or ratio)
end
local function choose_contrast_color(reference, candidate1, candidate2) -- luacheck: no unused
if is_dark(reference) then
if not is_dark(candidate1) then
return candidate1
else
return candidate2
end
else
if is_dark(candidate1) then
return candidate1
else
return candidate2
end
end
end
-- inherit xresources theme:
local theme = dofile(themes_path.."xresources/theme.lua")
-- load and prepare for use gtk theme:
theme.gtk = gtk.get_theme_variables()
if not theme.gtk then
local gears_debug = require("gears.debug")
gears_debug.print_warning("Can't load GTK+3 theme. Using 'xresources' theme as a fallback.")
return theme
end
theme.gtk.button_border_radius = dpi(theme.gtk.button_border_radius or 0)
theme.gtk.button_border_width = dpi(theme.gtk.button_border_width or 1)
theme.gtk.bold_font = theme.gtk.font_family .. ' Bold ' .. theme.gtk.font_size
theme.gtk.menubar_border_color = mix(
theme.gtk.menubar_bg_color,
theme.gtk.menubar_fg_color,
0.7
)
theme.font = theme.gtk.font_family .. ' ' .. theme.gtk.font_size
theme.bg_normal = theme.gtk.bg_color
theme.fg_normal = theme.gtk.fg_color
theme.wibar_bg = theme.gtk.menubar_bg_color
theme.wibar_fg = theme.gtk.menubar_fg_color
theme.bg_focus = theme.gtk.selected_bg_color
theme.fg_focus = theme.gtk.selected_fg_color
theme.bg_urgent = theme.gtk.error_bg_color
theme.fg_urgent = theme.gtk.error_fg_color
theme.bg_minimize = mix(theme.wibar_fg, theme.wibar_bg, 0.3)
theme.fg_minimize = mix(theme.wibar_fg, theme.wibar_bg, 0.9)
theme.bg_systray = theme.wibar_bg
theme.border_normal = theme.gtk.wm_border_unfocused_color
theme.border_focus = theme.gtk.wm_border_focused_color
theme.border_marked = theme.gtk.success_color
theme.border_width = dpi(theme.gtk.button_border_width or 1)
theme.border_radius = theme.gtk.button_border_radius
theme.useless_gap = dpi(3)
local rounded_rect_shape = function(cr,w,h)
gears_shape.rounded_rect(
cr, w, h, theme.border_radius
)
end
-- There are other variable sets
-- overriding the default one when
-- defined, the sets are:
-- taglist_[bg|fg|shape|shape_border_color|shape_border_width]_[focus|urgent|occupied|empty|volatile]
-- tasklist_[bg|fg|shape|shape_border_color|shape_border_width]_[focus|urgent|minimized]
-- titlebar_[bg|fg]_[normal|focus]
-- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
-- mouse_finder_[color|timeout|animate_timeout|radius|factor]
theme.tasklist_fg_normal = theme.wibar_fg
theme.tasklist_bg_normal = theme.wibar_bg
theme.tasklist_fg_focus = theme.tasklist_fg_normal
theme.tasklist_bg_focus = theme.tasklist_bg_normal
theme.tasklist_font_focus = theme.gtk.bold_font
theme.tasklist_shape_minimized = rounded_rect_shape
theme.tasklist_shape_border_color_minimized = mix(
theme.bg_minimize,
theme.fg_minimize,
0.85
)
theme.tasklist_shape_border_width_minimized = theme.gtk.button_border_width
theme.tasklist_spacing = theme.gtk.button_border_width
--[[ Advanced taglist and tasklist styling: {{{
--- In order to get taglist and tasklist to follow GTK theme you need to
-- modify your rc.lua in the following way:
diff --git a/rc.lua b/rc.lua
index 231a2f68c..533a859d2 100644
--- a/rc.lua
+++ b/rc.lua
@@ -217,24 +217,12 @@ awful.screen.connect_for_each_screen(function(s)
filter = awful.widget.taglist.filter.all,
buttons = taglist_buttons
}
+ -- and apply shape to it
+ if beautiful.taglist_shape_container then
+ local background_shape_wrapper = wibox.container.background(s.mytaglist)
+ background_shape_wrapper._do_taglist_update_now = s.mytaglist._do_taglist_update_now
+ background_shape_wrapper._do_taglist_update = s.mytaglist._do_taglist_update
+ background_shape_wrapper.shape = beautiful.taglist_shape_container
+ background_shape_wrapper.shape_clip = beautiful.taglist_shape_clip_container
+ background_shape_wrapper.shape_border_width = beautiful.taglist_shape_border_width_container
+ background_shape_wrapper.shape_border_color = beautiful.taglist_shape_border_color_container
+ s.mytaglist = background_shape_wrapper
+ end
-- Create a tasklist widget
s.mytasklist = awful.widget.tasklist {
screen = s,
filter = awful.widget.tasklist.filter.currenttags,
+ buttons = tasklist_buttons,
+ widget_template = beautiful.tasklist_widget_template
- buttons = tasklist_buttons
}
--]]
theme.tasklist_widget_template = {
{
{
{
{
id = 'clienticon',
widget = awful_widget_clienticon,
},
margins = dpi(4),
widget = wibox.container.margin,
},
{
id = 'text_role',
widget = wibox.widget.textbox,
},
layout = wibox.layout.fixed.horizontal,
},
left = dpi(2),
right = dpi(4),
widget = wibox.container.margin
},
id = 'background_role',
widget = wibox.container.background,
create_callback = function(self, c)
self:get_children_by_id('clienticon')[1].client = c
end,
}
theme.taglist_shape_container = rounded_rect_shape
theme.taglist_shape_clip_container = true
theme.taglist_shape_border_width_container = theme.gtk.button_border_width * 2
theme.taglist_shape_border_color_container = theme.gtk.header_button_border_color
-- }}}
theme.taglist_bg_occupied = theme.gtk.header_button_bg_color
theme.taglist_fg_occupied = theme.gtk.header_button_fg_color
theme.taglist_bg_empty = mix(
theme.gtk.menubar_bg_color,
theme.gtk.header_button_bg_color,
0.3
)
theme.taglist_fg_empty = mix(
theme.gtk.menubar_bg_color,
theme.gtk.header_button_fg_color
)
theme.titlebar_font_normal = theme.gtk.bold_font
theme.titlebar_bg_normal = theme.gtk.wm_border_unfocused_color
theme.titlebar_fg_normal = theme.gtk.wm_title_unfocused_color
--theme.titlebar_fg_normal = choose_contrast_color(
--theme.titlebar_bg_normal,
--theme.gtk.menubar_fg_color,
--theme.gtk.menubar_bg_color
--)
theme.titlebar_font_focus = theme.gtk.bold_font
theme.titlebar_bg_focus = theme.gtk.wm_border_focused_color
theme.titlebar_fg_focus = theme.gtk.wm_title_focused_color
--theme.titlebar_fg_focus = choose_contrast_color(
--theme.titlebar_bg_focus,
--theme.gtk.menubar_fg_color,
--theme.gtk.menubar_bg_color
--)
theme.tooltip_fg = theme.gtk.tooltip_fg_color
theme.tooltip_bg = theme.gtk.tooltip_bg_color
-- Variables set for theming the menu:
-- menu_[bg|fg]_[normal|focus]
-- menu_[border_color|border_width]
theme.menu_border_width = theme.gtk.button_border_width
theme.menu_border_color = theme.gtk.menubar_border_color
theme.menu_bg_normal = theme.gtk.menubar_bg_color
theme.menu_fg_normal = theme.gtk.menubar_fg_color
-- @TODO: get from gtk menu height
theme.menu_height = dpi(24)
theme.menu_width = dpi(150)
theme.menu_submenu_icon = nil
theme.menu_submenu = ""
-- You can add as many variables as
-- you wish and access them by using
-- beautiful.variable in your rc.lua
--theme.bg_widget = "#cc0000"
-- Recolor Layout icons:
theme = theme_assets.recolor_layout(theme, theme.wibar_fg)
-- Recolor titlebar icons:
--
theme = theme_assets.recolor_titlebar(
theme, theme.titlebar_fg_normal, "normal"
)
theme = theme_assets.recolor_titlebar(
theme, reduce_contrast(theme.titlebar_fg_normal, 50), "normal", "hover"
)
theme = theme_assets.recolor_titlebar(
theme, theme.gtk.error_bg_color, "normal", "press"
)
theme = theme_assets.recolor_titlebar(
theme, theme.titlebar_fg_focus, "focus"
)
theme = theme_assets.recolor_titlebar(
theme, reduce_contrast(theme.titlebar_fg_focus, 50), "focus", "hover"
)
theme = theme_assets.recolor_titlebar(
theme, theme.gtk.error_bg_color, "focus", "press"
)
-- Define the icon theme for application icons. If not set then the icons
-- from /usr/share/icons and /usr/share/icons/hicolor will be used.
theme.icon_theme = nil
-- Generate Awesome icon:
theme.awesome_icon = theme_assets.awesome_icon(
theme.menu_height, mix(theme.bg_focus, theme.fg_normal), theme.wibar_bg
)
-- Generate taglist squares:
--local taglist_square_size = dpi(4)
--theme.taglist_squares_sel = theme_assets.taglist_squares_sel(
--taglist_square_size, theme.gtk.header_button_border_color
--)
--theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel(
--taglist_square_size, theme.gtk.header_button_border_color
--)
-- Or disable them:
theme.taglist_squares_sel = nil
theme.taglist_squares_unsel = nil
-- Generate wallpaper:
local wallpaper_bg = theme.gtk.base_color
local wallpaper_fg = theme.gtk.bg_color
local wallpaper_alt_fg = theme.gtk.selected_bg_color
if not is_dark(theme.bg_normal) then
wallpaper_bg, wallpaper_fg = wallpaper_fg, wallpaper_bg
end
wallpaper_bg = reduce_contrast(wallpaper_bg, 50)
wallpaper_fg = reduce_contrast(wallpaper_fg, 30)
wallpaper_fg = mix(wallpaper_fg, wallpaper_bg, 0.4)
wallpaper_alt_fg = mix(wallpaper_alt_fg, wallpaper_fg, 0.4)
theme.wallpaper = function(s)
return theme_assets.wallpaper(wallpaper_bg, wallpaper_fg, wallpaper_alt_fg, s)
end
return theme
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80:foldmethod=marker