diff --git a/item/common.lua b/item/common.lua index f9608bc..cac9619 100644 --- a/item/common.lua +++ b/item/common.lua @@ -38,6 +38,7 @@ function module.setup_fkey(item,data) item.button1(data) data.visible = false end) + item:emit_signal("f_key::changed", value) end item.get_f_key = function() return item._internal.f_key end diff --git a/widgets/fkey.lua b/widgets/fkey.lua index 32c7714..0d33a34 100644 --- a/widgets/fkey.lua +++ b/widgets/fkey.lua @@ -5,67 +5,42 @@ local pango = require( "lgi" ).Pango local pangocairo = require( "lgi" ).PangoCairo local wibox = require( "wibox" ) local beautiful = require( "beautiful" ) - -local pango_l,pango_crx,max_width,keys = nil,nil,0,{} - -local function create_pango(height) - local padding = height/4 - pango_crx = pangocairo.font_map_get_default():create_context() - pango_l = pango.Layout.new(pango_crx) - local desc = pango.FontDescription() - desc:set_family("Verdana") - desc:set_weight(pango.Weight.BOLD) - desc:set_size((height-padding*2) * pango.SCALE) - pango_l:set_font_description(desc) - pango_l.text = "F88" - max_width = pango_l:get_pixel_extents().width + height + 4 -end +local constrainedtext = require("radical.widgets.constrainedtext") +local shape = require("gears.shape") local function new(data,item) - local pref = wibox.widget.textbox() - pref.draw = function(self, context, cr, width, height) - local padding = height/4 - local key = item._internal.f_key - if not keys[height] then - pref:emit_signal("widget::updated") - create_pango(height) - keys[height] = {} - end - if key and key > 12 and keys[height][0] then - cr:set_source_surface(keys[height][0]) - cr:paint() - elseif not keys[height] or not keys[height][key] then - if not pango_l then - create_pango(height) - end - local img = cairo.ImageSurface(cairo.Format.ARGB32, max_width,beautiful.menu_height) - local cr2 = cairo.Context(img) - cr2:set_source(color(beautiful.fg_normal)) - cr2:arc((height-padding)/2 + 2, (height-padding)/2 + padding/2, (height-padding)/2,0,2*math.pi) - cr2:arc(max_width - (height-padding)/2 - 2, (height-padding)/2 + padding/2, (height-padding)/2,0,2*math.pi) - cr2:rectangle((height-padding)/2+2,padding/2,max_width - (height),(height-padding)) - cr2:fill() - cr2:move_to(height/2 + padding/2,padding/4) - cr2:set_source(color(beautiful.bg_normal)) - pango_l.text = (key and key <= 12) and ("F"..(key)) or " ---" - cr2:show_layout(pango_l) - keys[height][key > 12 and 0 or key] = img - end - cr:set_source_surface((key and key > 12 and keys[height][0]) and keys[height][0] or keys[height][key]) - cr:paint() - end - pref.fit = function(self,context,width,height) - if not keys[height] then - pref:emit_signal("widget::updated") - create_pango(height) - keys[height] = {} - end + local pref = wibox.widget { + { + { + { + padding = 1, + width_for_text = "F99", + text = item._internal.f_key or "F1", + widget = constrainedtext, + id = "textbox", + }, + left = data.item_height / 2 - 2*2, + right = data.item_height / 2 - 2*2, + widget = wibox.container.margin + }, + shape = shape.rounded_bar, + bg = color(beautiful.fg_normal), + fg = color(beautiful.bg_normal), + widget = wibox.container.background + }, + margins = 2, + widget = wibox.container.margin + } - return max_width,data.item_height - end - pref:set_markup("F11") - return pref + local tb = pref:get_children_by_id("textbox")[1] + assert(tb) + + item:connect_signal("f_key::changed" , function() + tb:set_text("F"..item._internal.f_key) + end) + + return pref end return setmetatable({}, { __call = function(_, ...) return new(...) end }) --- kate: space-indent on; indent-width 2; replace-tabs on; +-- kate: space-indent on; indent-width 4; replace-tabs on;