refactor(menubar, textbox): replace menubar.utils.compute_text_width() with textbox.get_markup_geometry()
feat(menubar): allow setting beautiful.menubar_font fix(menubar: init: get_current_page): label return value Update lib/wibox/widget/textbox.lua Co-authored-by: Lucas Schwiderski <4508454+sclu1034@users.noreply.github.com> Update lib/wibox/widget/textbox.lua Co-authored-by: Lucas Schwiderski <4508454+sclu1034@users.noreply.github.com> revert textbox changes fix(menubar: init: show): fix font height detection Update lib/menubar/init.lua fix(menubar: init: get_current_page): list_spacing depends on presence of icon; also take cursor block width into consideration fix(menubar: init: label): force icons to be square fix(menubar: init: get_current_page): also take border_width into consideration when computing available space merge conflict
This commit is contained in:
parent
b65025ef62
commit
2249dc3c81
|
@ -70,12 +70,15 @@ end
|
|||
-- @beautiful beautiful.menubar_bg_focus
|
||||
-- @param color
|
||||
|
||||
--- Menubar font.
|
||||
-- @beautiful beautiful.menubar_font
|
||||
-- @param[opt=beautiful.font] font
|
||||
|
||||
|
||||
-- menubar
|
||||
local menubar = { menu_entries = {} }
|
||||
menubar.menu_gen = require("menubar.menu_gen")
|
||||
menubar.utils = require("menubar.utils")
|
||||
local compute_text_width = menubar.utils.compute_text_width
|
||||
|
||||
-- Options section
|
||||
|
||||
|
@ -119,10 +122,9 @@ menubar.right_label = "▶▶"
|
|||
-- @tfield[opt="◀◀"] string left_label
|
||||
menubar.left_label = "◀◀"
|
||||
|
||||
-- awful.widget.common.list_update adds three times a margin of dpi(4)
|
||||
-- for each item:
|
||||
-- @tfield number list_interspace
|
||||
local list_interspace = theme.xresources.apply_dpi(4) * 3
|
||||
-- awful.widget.common.list_update adds spacing of dpi(4) between items.
|
||||
-- @tfield number list_spacing
|
||||
local list_spacing = theme.xresources.apply_dpi(4)
|
||||
|
||||
--- Allows user to specify custom parameters for prompt.run function
|
||||
-- (like colors). This will merge with the default parameters, overriding affected values.
|
||||
|
@ -149,7 +151,7 @@ end
|
|||
|
||||
--- Get how the menu item should be displayed.
|
||||
-- @param o The menu item.
|
||||
-- @return item name, item background color, background image, item icon.
|
||||
-- @return item name, item background color, background image, item icon, item args.
|
||||
local function label(o)
|
||||
local fg_color = theme.menubar_fg_normal or theme.menu_fg_normal or theme.fg_normal
|
||||
local bg_color = theme.menubar_bg_normal or theme.menu_bg_normal or theme.bg_normal
|
||||
|
@ -160,7 +162,8 @@ local function label(o)
|
|||
return colortext(gstring.xml_escape(o.name), fg_color),
|
||||
bg_color,
|
||||
nil,
|
||||
o.icon
|
||||
o.icon,
|
||||
o.icon and {icon_size=instance.geometry.height}
|
||||
end
|
||||
|
||||
local function load_count_table()
|
||||
|
@ -225,6 +228,11 @@ end
|
|||
-- @tparam number|screen scr Screen
|
||||
-- @return table List of items for current page.
|
||||
local function get_current_page(all_items, query, scr)
|
||||
|
||||
local compute_text_width = function(text, s)
|
||||
return wibox.widget.textbox.get_markup_geometry(text, s, instance.font)['width']
|
||||
end
|
||||
|
||||
scr = get_screen(scr)
|
||||
if not instance.prompt.width then
|
||||
instance.prompt.width = compute_text_width(instance.prompt.prompt, scr)
|
||||
|
@ -235,16 +243,19 @@ local function get_current_page(all_items, query, scr)
|
|||
if not menubar.right_label_width then
|
||||
menubar.right_label_width = compute_text_width(menubar.right_label, scr)
|
||||
end
|
||||
local border_width = theme.menubar_border_width or theme.menu_border_width or 0
|
||||
local available_space = instance.geometry.width - menubar.right_margin -
|
||||
menubar.right_label_width - menubar.left_label_width -
|
||||
compute_text_width(query, scr) - instance.prompt.width
|
||||
compute_text_width(query..' ', scr) - instance.prompt.width - border_width * 2
|
||||
-- space character is added as input cursor placeholder
|
||||
|
||||
local width_sum = 0
|
||||
local current_page = {}
|
||||
for i, item in ipairs(all_items) do
|
||||
item.width = item.width or
|
||||
compute_text_width(item.name, scr) +
|
||||
(item.icon and instance.geometry.height or 0) + list_interspace
|
||||
item.width = item.width or (
|
||||
compute_text_width(label(item), scr) +
|
||||
(item.icon and (instance.geometry.height + list_spacing) or 0) + list_spacing * 2
|
||||
)
|
||||
if width_sum + item.width > available_space then
|
||||
if current_item < i then
|
||||
table.insert(current_page, { name = menubar.right_label, icon = nil })
|
||||
|
@ -449,6 +460,7 @@ function menubar.show(scr)
|
|||
local bg_color = theme.menubar_bg_normal or theme.menu_bg_normal or theme.bg_normal
|
||||
local border_width = theme.menubar_border_width or theme.menu_border_width or 0
|
||||
local border_color = theme.menubar_border_color or theme.menu_border_color
|
||||
local font = theme.menubar_font or theme.font or "Monospace 10"
|
||||
|
||||
if not instance then
|
||||
-- Add to each category the name of its key in all_categories
|
||||
|
@ -467,11 +479,13 @@ function menubar.show(scr)
|
|||
fg = fg_color,
|
||||
border_width = border_width,
|
||||
border_color = border_color,
|
||||
font = font,
|
||||
},
|
||||
widget = common_args.w,
|
||||
prompt = awful.widget.prompt(),
|
||||
query = nil,
|
||||
count_table = nil,
|
||||
font = font,
|
||||
}
|
||||
local layout = wibox.layout.fixed.horizontal()
|
||||
layout:add(instance.prompt)
|
||||
|
@ -490,7 +504,7 @@ function menubar.show(scr)
|
|||
local geometry = menubar.geometry
|
||||
instance.geometry = {x = geometry.x or scrgeom.x,
|
||||
y = geometry.y or scrgeom.y,
|
||||
height = geometry.height or gmath.round(theme.get_font_height() * 1.5),
|
||||
height = geometry.height or gmath.round(theme.get_font_height(font) * 1.5),
|
||||
width = (geometry.width or scrgeom.width) - border_width * 2}
|
||||
instance.wibox:geometry(instance.geometry)
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@ local glib = lgi.GLib
|
|||
local w_textbox = require("wibox.widget.textbox")
|
||||
local gdebug = require("gears.debug")
|
||||
local protected_call = require("gears.protected_call")
|
||||
local gstring = require("gears.string")
|
||||
local unpack = unpack or table.unpack -- luacheck: globals unpack (compatibility with Lua 5.1)
|
||||
|
||||
local utils = {}
|
||||
|
@ -417,14 +416,9 @@ function utils.compute_textbox_width(textbox, s)
|
|||
return w
|
||||
end
|
||||
|
||||
--- Compute text width.
|
||||
-- @tparam str text Text.
|
||||
-- @tparam number|screen s Screen
|
||||
-- @treturn int Text width.
|
||||
-- @staticfct menubar.utils.compute_text_width
|
||||
function utils.compute_text_width(text, s)
|
||||
local w, _ = w_textbox(gstring.xml_escape(text)):get_preferred_size(s)
|
||||
return w
|
||||
function utils.compute_text_width(text, s, font)
|
||||
gdebug.deprecate("Use 'width = textbox.get_markup_geometry(text, s, font)['width']'.", {deprecated_in=4})
|
||||
return w_textbox.get_markup_geometry(text, s, font)['width']
|
||||
end
|
||||
|
||||
return utils
|
||||
|
|
|
@ -381,6 +381,7 @@ end
|
|||
-- @tparam[opt=nil] integer|screen s The screen on which the textbox would be displayed.
|
||||
-- @tparam[opt=beautiful.font] string font The font description as string.
|
||||
-- @treturn table Geometry (width, height) hashtable.
|
||||
-- @staticfct wibox.widget.textbox.get_markup_geometry
|
||||
function textbox.get_markup_geometry(text, s, font)
|
||||
font = font or beautiful.font
|
||||
local pctx = PangoCairo.font_map_get_default():create_context()
|
||||
|
|
Loading…
Reference in New Issue