标题栏中的滑块小部件

时间:2018-03-10 08:54:37

标签: widget opacity titlebar awesome-wm

我想在每个客户端的标题栏中放置一个滑块,以便控制其不透明度 在官方的rc.lua中,在标题栏配置中我们可以找到:
    awful.titlebar.widget.floatingbutton(c)
所以客户的id被发送到小部件

我想到了类似下面的代码:

local MAX = 1
local MIN = 0
--
-- le widget slider
opaciteControle = wibox.widget {
   --forced_width        = 100,
   bar_shape           = gears.shape.rounded_rect,
   bar_height          = 1,
   bar_color           = beautiful.border_color,
   --handle_color        = beautiful.bg_normal,
   handle_color        = "#FFFFFF",
   handle_shape        = gears.shape.circle,
   handle_border_color = beautiful.border_color,
   handle_border_width = 1,
   minimum             = MIN,
   maximum             = MAX,
   value               = .8,
   widget              = wibox.widget.slider,
}
-- le widget text
opaciteTexte = wibox.widget {
   text                = "opacite",
   align               = "center",
   widget              = wibox.widget.textbox,
}
-- le widget à afficher
opacite = wibox.widget {
   opaciteTexte,
   opaciteControle,
   vertical_offset=5,
   layout=wibox.layout.stack
}
-- actualisation
opaciteControle:connect_signal("widget::redraw_needed", function(c)
                     local v=opaciteControle.value
                     --
                     c.opacity=v
end)

最后在标题栏的布局中插入这个小部件,但这个小部分不起作用;客户端的ID似乎没有正确传递给函数。

感谢您帮助我 大卫

1 个答案:

答案 0 :(得分:1)

添加opacity_button(c),,例如在配置中awful.titlebar.widget.floatingbutton(c),之前。前面某处将以下内容添加到您的配置中:

local function opacity_button(c)
    local SCALE = 100
    local slider = wibox.widget {
       --forced_width        = 100,
       bar_shape           = gears.shape.rounded_rect,
       bar_height          = 1,
       bar_color           = beautiful.border_color,
       --handle_color        = beautiful.bg_normal,
       handle_color        = "#FFFFFF",
       handle_shape        = gears.shape.circle,
       handle_border_color = beautiful.border_color,
       handle_border_width = 1,
       minimum             = 0,
       maximum             = SCALE,
       value               = c.opacity * SCALE,
       widget              = wibox.widget.slider,
    }

    c:connect_signal("property::opacity", function()
        slider.value = c.opacity * SCALE
    end)
    slider:connect_signal("property::value", function()
        c.opacity = slider.value / SCALE
    end)

    -- Wrap other widgets around slider here if you want,
    -- e.g. your stack widget and the textbox
    local result = slider
    return slider
end

我不知道你为什么使用widget::redraw_signal信号。而是使用滑块的property::value信号。此外,如果客户端的不透明度通过某些外部手段(即此小部件外部)发生更改,此小部件会更新滑块。

哦和:这会将窗口小部件的值缩放100,因为滑块窗口小部件只生成整数值(至少在我的测试中)。

请注意,此代码将客户端对象传递给窗口小部件的方式与例如浮动按钮:作为信号连接功能的升值。我不知道你是如何找到widget::redraw_needed的,但它没有将客户端作为它的第一个参数。