【问题标题】:slider widget in titlebars标题栏中的滑块小部件
【发布时间】:2018-03-11 17:12:16
【问题描述】:

我想在每个客户端的标题栏中放置一个滑块,以便控制其不透明度。
在官方 rc.lua 中,在标题栏配置中我们可以找到:
可怕的.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 似乎没有正确传递给函数。

谢谢你帮助我
大卫

【问题讨论】:

    标签: widget opacity titlebar awesome-wm


    【解决方案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,但它没有将客户端作为其第一个参数。

    【讨论】:

    • 太棒了!我在文档中进行了搜索,但我无法完全理解我对 lua 和真棒所做的事情......你的代码很棒,我在标题栏中看到了滑块。但是当我滑动车把时,我收到了来自“slider.lua:472”的错误消息:“mousegrabber 已经在运行”谢谢 Uli!
    • 好的,我解决了这个问题。标题栏定义中的小部件声明错误。再次感谢 Uli!
    猜你喜欢
    • 2017-06-19
    • 2019-01-29
    • 1970-01-01
    • 2014-02-18
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多