小部件放在另一个小部件的背景上。

在awesome wm中是否可能将 widget 绘制在另一个 widget 上方?例如:在进度条上绘制带有一些文本(百分比)的文本框。以下是可行的解决方案

点赞
用户436275
用户436275

没有内置的类似这样的函数,但是你可以自己编写(未经测试):

function make_stack(w1, w2)
  local ret = wibox.widget.base.make_widget()

  local update = function() ret:emit_signal("widget::updated") end
  w1:connect_signal("widget::updated", update)
  w2:connect_signal("widget::updated", update)

  ret.fit = function(self, ...) return w2:fit(...) end
  ret.draw = function(self, wibox, cr, width, height)
    wibox.layout.base.draw_widget(wibox, cr, w1, 0, 0, width, height)
    wibox.layout.base.draw_widget(wibox, cr, w2, 0, 0, width, height)
  end

  return ret
end

函数make_stack(w1, w2)创建一个新的小部件,将w2绘制在w1之上。如fit函数所示,小部件w2决定两个小部件的大小。

例如,可以按以下方式使用:left_layout:add(make_stack(mytasklist[s], mytextclock))

2015-01-11 08:59:19