Add color groups
This commit is contained in:
parent
1257ac228e
commit
2f9af8d5dd
11
README.md
11
README.md
|
@ -285,6 +285,7 @@ here is the list:
|
|||
| add_prefix_widget | Add a widget at the beginning of the menu | the widget | --- |
|
||||
| add_suffix_widget | Add a widget at the end of the menu | the widget | --- |
|
||||
| add_colors_namespace | Use prefixed colors from beautiful | the namespace name | --- |
|
||||
| add_colors_group | Add a new color group (see below for details)| the group name | --- |
|
||||
|
||||
|
||||
###Signals
|
||||
|
@ -366,6 +367,16 @@ allow masks such as desaturation, tinting, invert or some matrix to be applied
|
|||
on the pixmap before it is being drawn. This function take the path/surface as
|
||||
only parameter and return the transformed surface.
|
||||
|
||||
Other elements can be added to items such as prefix, underlay and siffixes.
|
||||
Those elements sometime need extra color groups. The `add_color_group` method
|
||||
allow to register such new category. For a common example, the underlay, it
|
||||
will be possible to pass `underlay_bg_focus` or `underlay_fg_disabled` colors
|
||||
or any other registered states.
|
||||
|
||||
Some generic menu can also register beautiful namespaces using the
|
||||
`add_colors_namespace` method. For example, the tasklist namespace can be used
|
||||
by adding elements such as `beautiful.tasklist_bg_urgent` to your theme.
|
||||
|
||||
## Extending Radical
|
||||
|
||||
Radical is not designed to be used "as is". Every menus are different. While
|
||||
|
|
4
base.lua
4
base.lua
|
@ -430,6 +430,10 @@ local function new(args)
|
|||
end
|
||||
end
|
||||
|
||||
data.add_colors_group = function(data,section)
|
||||
theme.add_section(data,section,args)
|
||||
end
|
||||
|
||||
data.set_layout = function(_,value)
|
||||
if value then
|
||||
value:setup_key_hooks(data)
|
||||
|
|
|
@ -143,7 +143,20 @@ local function new_item(data,args)
|
|||
item.get_fg = function()
|
||||
return data.fg
|
||||
end
|
||||
|
||||
item.set_underlay = function(item,underlay)
|
||||
if not item._internal.underlay_init then
|
||||
data:add_colors_group("underlay")
|
||||
item._internal.underlay_init = true
|
||||
end
|
||||
|
||||
item._internal.underlay_content = underlay
|
||||
end
|
||||
item.get_underlay = function(item)
|
||||
return item._internal.underlay_content
|
||||
end
|
||||
item.state = theme.init_state(item)
|
||||
item.underlay = args.underlay
|
||||
|
||||
for i=1,10 do
|
||||
item["button"..i] = args["button"..i]
|
||||
|
|
|
@ -42,6 +42,15 @@ end
|
|||
|
||||
-- Util to help match colors to states
|
||||
local theme_colors = {}
|
||||
|
||||
local function load_section(data,priv,section,args)
|
||||
local bg,fg,args = section.."_bg_", section.."_fg_",args or {}
|
||||
for k,v in pairs(theme_colors) do
|
||||
priv[bg..k] = args[bg..v.beautiful_name] or beautiful["menu_"..bg..v.beautiful_name] or beautiful[bg..v.beautiful_name]
|
||||
priv[fg..k] = args[fg..v.beautiful_name] or beautiful["menu_"..fg..v.beautiful_name] or beautiful[fg..v.beautiful_name]
|
||||
end
|
||||
end
|
||||
|
||||
function module.register_color(state_id,name,beautiful_name,allow_fallback)
|
||||
theme_colors[name] = {id=state_id,beautiful_name=beautiful_name,fallback=allow_fallback}
|
||||
module.colors_by_id[state_id] = name
|
||||
|
@ -51,11 +60,15 @@ function module.setup_colors(data,args)
|
|||
for k,v in pairs(theme_colors) do
|
||||
priv["fg_"..k] = args["fg_"..k] or beautiful["menu_fg_"..v.beautiful_name] or beautiful["fg_"..v.beautiful_name] or (v.fallback and beautiful.fg_normal)
|
||||
priv["bg_"..k] = args["bg_"..k] or beautiful["menu_bg_"..v.beautiful_name] or beautiful["bg_"..v.beautiful_name] or (v.fallback and beautiful.bg_normal)
|
||||
priv["underlay_bg_"..k] = args["underlay_bg_"..k] or beautiful["menu_underlay_bg_"..v.beautiful_name] or beautiful["underlay_bg_"..v.beautiful_name]
|
||||
--priv["underlay_bg_"..k] = args["underlay_bg_"..k] or beautiful["menu_underlay_bg_"..v.beautiful_name] or beautiful["underlay_bg_"..v.beautiful_name]
|
||||
end
|
||||
|
||||
-- Handle custom sections
|
||||
for _,section in ipairs(priv.section or {}) do
|
||||
load_section(data,priv,section,args)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function module.setup_item_colors(data,item,args)
|
||||
local priv = item._private_data
|
||||
for k,v in pairs(theme_colors) do
|
||||
|
@ -84,8 +97,24 @@ function module.add_colors_from_namespace(data,namespace)
|
|||
for k,v in pairs(theme_colors) do
|
||||
priv["fg_"..k] = beautiful[namespace.."_fg_"..v.beautiful_name] or priv["fg_"..k]
|
||||
priv["bg_"..k] = beautiful[namespace.."_bg_"..v.beautiful_name] or priv["bg_"..k]
|
||||
priv["underlay_bg_"..k] = beautiful[namespace.."_underlay_bg_"..v.beautiful_name] or priv["underlay_bg_"..k]
|
||||
end
|
||||
priv["fg"] = beautiful[namespace.."_fg"] or priv["fg"]
|
||||
priv["bg"] = beautiful[namespace.."_bg"] or priv["bg"]
|
||||
priv.namespace = priv.namespace or {}
|
||||
priv.namespace[#priv.namespace+1] = namespace
|
||||
end
|
||||
|
||||
-- Utils to add new color-able elements of an item
|
||||
-- this can be used either for extentions, such as {pre,suf}fixes
|
||||
-- or "special" [item_]styles
|
||||
|
||||
function module.add_section(data,section,args)
|
||||
local priv = data._internal.private_data
|
||||
|
||||
load_section(data,priv,section,args)
|
||||
|
||||
priv.section = priv.section or {}
|
||||
priv.section[#priv.section+1] = section
|
||||
end
|
||||
|
||||
return setmetatable(module, { __call = function(_, ...) return new(...) end })
|
||||
|
|
Loading…
Reference in New Issue