From 03663fe778794c2e4229a4d03a0bd24060f3b6a0 Mon Sep 17 00:00:00 2001 From: kindlycat Date: Wed, 12 Aug 2015 22:31:06 +0000 Subject: [PATCH] Add "opacity" property for widgets --- lib/wibox/drawable.lua | 3 +++ lib/wibox/layout/base.lua | 3 +++ lib/wibox/widget/base.lua | 9 +++++++++ 3 files changed, 15 insertions(+) diff --git a/lib/wibox/drawable.lua b/lib/wibox/drawable.lua index c9d0a483..3f05df9b 100644 --- a/lib/wibox/drawable.lua +++ b/lib/wibox/drawable.lua @@ -59,7 +59,10 @@ local function do_redraw(self) self._widget_geometries = {} if self.widget and self.widget.visible then cr:set_source(self.foreground_color) + cr:push_group() self.widget:draw(self.widget_arg, cr, width, height) + cr:pop_group_to_source() + cr:paint_with_alpha(self.widget.opacity) self:widget_at(self.widget, 0, 0, width, height) end diff --git a/lib/wibox/layout/base.lua b/lib/wibox/layout/base.lua index 97e93966..3b85c2e1 100644 --- a/lib/wibox/layout/base.lua +++ b/lib/wibox/layout/base.lua @@ -66,11 +66,14 @@ function base.draw_widget(wibox, cr, widget, x, y, width, height) cr:rectangle(0, 0, width, height) cr:clip() + cr:push_group() -- Let the widget draw itself local success, msg = pcall(widget.draw, widget, wibox, cr, width, height) if not success then print("Error while drawing widget: " .. msg) end + cr:pop_group_to_source() + cr:paint_with_alpha(widget.opacity) -- Register the widget for input handling wibox:widget_at(widget, base.rect_to_device_geometry(cr, 0, 0, width, height)) diff --git a/lib/wibox/widget/base.lua b/lib/wibox/widget/base.lua index f57c01f5..dd37d5c0 100644 --- a/lib/wibox/widget/base.lua +++ b/lib/wibox/widget/base.lua @@ -116,6 +116,15 @@ function base.make_widget(proxy, widget_name) end end + -- Add opacity property and setter. + ret.opacity = 1 + function ret:set_opacity(b) + if b ~= self.opacity then + self.opacity = b + self:emit_signal("widget::updated") + end + end + -- Add __tostring method to metatable. ret.widget_name = widget_name or object.modulename(3) local mt = {}