diff options
Diffstat (limited to 'awesome/lib/wibox/init.lua')
-rw-r--r-- | awesome/lib/wibox/init.lua | 479 |
1 files changed, 0 insertions, 479 deletions
diff --git a/awesome/lib/wibox/init.lua b/awesome/lib/wibox/init.lua deleted file mode 100644 index 3fc89ce..0000000 --- a/awesome/lib/wibox/init.lua +++ /dev/null @@ -1,479 +0,0 @@ ---------------------------------------------------------------------------- --- @author Uli Schlachter --- @copyright 2010 Uli Schlachter --- @classmod wibox ---------------------------------------------------------------------------- - -local capi = { - drawin = drawin, - root = root, - awesome = awesome, - screen = screen -} -local setmetatable = setmetatable -local pairs = pairs -local type = type -local object = require("gears.object") -local grect = require("gears.geometry").rectangle -local beautiful = require("beautiful") -local base = require("wibox.widget.base") - ---- This provides widget box windows. Every wibox can also be used as if it were --- a drawin. All drawin functions and properties are also available on wiboxes! --- wibox -local wibox = { mt = {}, object = {} } -wibox.layout = require("wibox.layout") -wibox.container = require("wibox.container") -wibox.widget = require("wibox.widget") -wibox.drawable = require("wibox.drawable") -wibox.hierarchy = require("wibox.hierarchy") - -local force_forward = { - shape_bounding = true, - shape_clip = true, -} - ---Imported documentation - ---- Border width. --- --- **Signal:** --- --- * *property::border_width* --- --- @property border_width --- @param integer - ---- Border color. --- --- Please note that this property only support string based 24 bit or 32 bit --- colors: --- --- Red Blue --- _| _| --- #FF00FF --- T‾ --- Green --- --- --- Red Blue --- _| _| --- #FF00FF00 --- T‾ ‾T --- Green Alpha --- --- **Signal:** --- --- * *property::border_color* --- --- @property border_color --- @param string - ---- On top of other windows. --- --- **Signal:** --- --- * *property::ontop* --- --- @property ontop --- @param boolean - ---- The mouse cursor. --- --- **Signal:** --- --- * *property::cursor* --- --- @property cursor --- @param string --- @see mouse - ---- Visibility. --- --- **Signal:** --- --- * *property::visible* --- --- @property visible --- @param boolean - ---- The opacity of the wibox, between 0 and 1. --- --- **Signal:** --- --- * *property::opacity* --- --- @property opacity --- @tparam number opacity (between 0 and 1) - ---- The window type (desktop, normal, dock, ...). --- --- **Signal:** --- --- * *property::type* --- --- @property type --- @param string --- @see client.type - ---- The x coordinates. --- --- **Signal:** --- --- * *property::x* --- --- @property x --- @param integer - ---- The y coordinates. --- --- **Signal:** --- --- * *property::y* --- --- @property y --- @param integer - ---- The width of the wibox. --- --- **Signal:** --- --- * *property::width* --- --- @property width --- @param width - ---- The height of the wibox. --- --- **Signal:** --- --- * *property::height* --- --- @property height --- @param height - ---- The wibox screen. --- --- @property screen --- @param screen - ---- The wibox's `drawable`. --- --- **Signal:** --- --- * *property::drawable* --- --- @property drawable --- @tparam drawable drawable - ---- The widget that the `wibox` displays. --- @property widget --- @param widget - ---- The X window id. --- --- **Signal:** --- --- * *property::window* --- --- @property window --- @param string --- @see client.window - ---- The wibox's bounding shape as a (native) cairo surface. --- --- **Signal:** --- --- * *property::shape_bounding* --- --- @property shape_bounding --- @param surface._native - ---- The wibox's clip shape as a (native) cairo surface. --- --- **Signal:** --- --- * *property::shape_clip* --- --- @property shape_clip --- @param surface._native - ---- Get or set mouse buttons bindings to a wibox. --- --- @param buttons_table A table of buttons objects, or nothing. --- @function buttons - ---- Get or set wibox geometry. That's the same as accessing or setting the x, --- y, width or height properties of a wibox. --- --- @param A table with coordinates to modify. --- @return A table with wibox coordinates and geometry. --- @function geometry - ---- Get or set wibox struts. --- --- @param strut A table with new strut, or nothing --- @return The wibox strut in a table. --- @function struts --- @see client.struts - ---- The default background color. --- @beautiful beautiful.bg_normal --- @see bg - ---- The default foreground (text) color. --- @beautiful beautiful.fg_normal --- @see fg - ---- Set a declarative widget hierarchy description. --- See [The declarative layout system](../documentation/03-declarative-layout.md.html) --- @param args An array containing the widgets disposition --- @name setup --- @class function - ---- The background of the wibox. --- @param c The background to use. This must either be a cairo pattern object, --- nil or a string that gears.color() understands. --- @property bg --- @see gears.color - ---- The background image of the drawable. --- If `image` is a function, it will be called with `(context, cr, width, height)` --- as arguments. Any other arguments passed to this method will be appended. --- @param image A background image or a function --- @property bgimage --- @see gears.surface - ---- The foreground (text) of the wibox. --- @param c The foreground to use. This must either be a cairo pattern object, --- nil or a string that gears.color() understands. --- @property fg --- @see gears.color - ---- Find a widget by a point. --- The wibox must have drawn itself at least once for this to work. --- @tparam number x X coordinate of the point --- @tparam number y Y coordinate of the point --- @treturn table A sorted table of widgets positions. The first element is the biggest --- container while the last is the topmost widget. The table contains *x*, *y*, --- *width*, *height* and *widget*. --- @name find_widgets --- @class function - - -function wibox:set_widget(widget) - self._drawable:set_widget(widget) -end - -function wibox:get_widget() - return self._drawable.widget -end - -wibox.setup = base.widget.setup - -function wibox:set_bg(c) - self._drawable:set_bg(c) -end - -function wibox:set_bgimage(image, ...) - self._drawable:set_bgimage(image, ...) -end - -function wibox:set_fg(c) - self._drawable:set_fg(c) -end - -function wibox:find_widgets(x, y) - return self._drawable:find_widgets(x, y) -end - -function wibox:get_screen() - if self.screen_assigned and self.screen_assigned.valid then - return self.screen_assigned - else - self.screen_assigned = nil - end - local sgeos = {} - - for s in capi.screen do - sgeos[s] = s.geometry - end - - return grect.get_closest_by_coord(sgeos, self.x, self.y) -end - -function wibox:set_screen(s) - s = capi.screen[s or 1] - if s ~= self:get_screen() then - self.x = s.geometry.x - self.y = s.geometry.y - end - - -- Remember this screen so things work correctly if screens overlap and - -- (x,y) is not enough to figure out the correct screen. - self.screen_assigned = s - self._drawable:_force_screen(s) -end - -for _, k in pairs{ "buttons", "struts", "geometry", "get_xproperty", "set_xproperty" } do - wibox[k] = function(self, ...) - return self.drawin[k](self.drawin, ...) - end -end - -local function setup_signals(_wibox) - local obj - local function clone_signal(name) - -- When "name" is emitted on wibox.drawin, also emit it on wibox - obj:connect_signal(name, function(_, ...) - _wibox:emit_signal(name, ...) - end) - end - - obj = _wibox.drawin - clone_signal("property::border_color") - clone_signal("property::border_width") - clone_signal("property::buttons") - clone_signal("property::cursor") - clone_signal("property::height") - clone_signal("property::ontop") - clone_signal("property::opacity") - clone_signal("property::struts") - clone_signal("property::visible") - clone_signal("property::width") - clone_signal("property::x") - clone_signal("property::y") - clone_signal("property::geometry") - clone_signal("property::shape_bounding") - clone_signal("property::shape_clip") - - obj = _wibox._drawable - clone_signal("button::press") - clone_signal("button::release") - clone_signal("mouse::enter") - clone_signal("mouse::leave") - clone_signal("mouse::move") - clone_signal("property::surface") -end - ---- Create a wibox. --- @tparam[opt=nil] table args --- @tparam integer args.border_width Border width. --- @tparam string args.border_color Border color. --- @tparam boolean args.ontop On top of other windows. --- @tparam string args.cursor The mouse cursor. --- @tparam boolean args.visible Visibility. --- @tparam number args.opacity The opacity of the wibox, between 0 and 1. --- @tparam string args.type The window type (desktop, normal, dock, …). --- @tparam integer args.x The x coordinates. --- @tparam integer args.y The y coordinates. --- @tparam integer args.width The width of the wibox. --- @tparam integer args.height The height of the wibox. --- @tparam screen args.screen The wibox screen. --- @tparam wibox.widget args.widget The widget that the wibox displays. --- @param args.shape_bounding The wibox’s bounding shape as a (native) cairo surface. --- @param args.shape_clip The wibox’s clip shape as a (native) cairo surface. --- @tparam color args.bg The background of the wibox. --- @tparam surface args.bgimage The background image of the drawable. --- @tparam color args.fg The foreground (text) of the wibox. --- @treturn wibox The new wibox --- @function .wibox - -local function new(args) - args = args or {} - local ret = object() - local w = capi.drawin(args) - - function w.get_wibox() - return ret - end - - ret.drawin = w - ret._drawable = wibox.drawable(w.drawable, { wibox = ret }, - "wibox drawable (" .. object.modulename(3) .. ")") - - ret._drawable:_inform_visible(w.visible) - w:connect_signal("property::visible", function() - ret._drawable:_inform_visible(w.visible) - end) - - for k, v in pairs(wibox) do - if type(v) == "function" then - ret[k] = v - end - end - - setup_signals(ret) - ret.draw = ret._drawable.draw - - -- Set the default background - ret:set_bg(args.bg or beautiful.bg_normal) - ret:set_fg(args.fg or beautiful.fg_normal) - - -- Add __tostring method to metatable. - local mt = {} - local orig_string = tostring(ret) - mt.__tostring = function() - return string.format("wibox: %s (%s)", - tostring(ret._drawable), orig_string) - end - ret = setmetatable(ret, mt) - - -- Make sure the wibox is drawn at least once - ret.draw() - - -- If a value is not found, look in the drawin - setmetatable(ret, { - __index = function(self, k) - if rawget(self, "get_"..k) then - return self["get_"..k](self) - else - return w[k] - end - end, - __newindex = function(self, k,v) - if rawget(self, "set_"..k) then - self["set_"..k](self, v) - elseif w[k] ~= nil or force_forward[k] then - w[k] = v - else - rawset(self, k, v) - end - end - }) - - -- Set other wibox specific arguments - if args.bgimage then - ret:set_bgimage( args.bgimage ) - end - - if args.widget then - ret:set_widget ( args.widget ) - end - - if args.screen then - ret:set_screen ( args.screen ) - end - - return ret -end - ---- Redraw a wibox. You should never have to call this explicitely because it is --- automatically called when needed. --- @param wibox --- @function draw - -function wibox.mt:__call(...) - return new(...) -end - --- Extend the luaobject -object.properties(capi.drawin, { - getter_class = wibox.object, - setter_class = wibox.object, - auto_emit = true, -}) - -return setmetatable(wibox, wibox.mt) - --- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 |