代码之家  ›  专栏  ›  技术社区  ›  david

标题栏中的滑块小部件

  •  1
  • david  · 技术社区  · 8 年前

    我想在每个客户端的标题栏中放置一个滑块,以便它可以控制其不透明度。
    在正式rc中。lua,在标题栏配置中,我们可以找到:
    很坏的标题栏。小部件。浮动按钮(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 回复  |  直到 8 年前
        1
  •  1
  •   Uli Schlachter    8 年前

    添加 opacity_button(c), e、 g.之前 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,因为滑块小部件只生成整数值(至少在我的测试中是这样)。

    请注意,此代码以与floatingbutton相同的方式将客户机对象传递给小部件:作为信号连接函数的upvalue。我不知道你是怎么发现的 widget::redraw_needed ,但它的第一个参数不是客户机。

    推荐文章