Ported wibox.widget to lua 5.2

Tested with 5.1: all good

Signed-off-by: Arvydas Sidorenko <asido4@gmail.com>
This commit is contained in:
Arvydas Sidorenko 2012-06-12 15:55:10 +02:00 committed by Uli Schlachter
parent 4e67027a97
commit f73e0b44c0
6 changed files with 76 additions and 50 deletions

View File

@ -13,10 +13,11 @@ local setmetatable = setmetatable
local pairs = pairs
local type = type
module("wibox.widget.background")
-- wibox.widget.background
local background = { mt = {} }
--- Draw this widget
function draw(box, wibox, cr, width, height)
function background.draw(box, wibox, cr, width, height)
if not box.widget then
return
end
@ -46,7 +47,7 @@ function draw(box, wibox, cr, width, height)
end
--- Fit this widget into the given area
function fit(box, width, height)
function background.fit(box, width, height)
if not box.widget then
return 0, 0
end
@ -55,7 +56,7 @@ function fit(box, width, height)
end
--- Set the widget that is drawn on top of the background
function set_widget(box, widget)
function background.set_widget(box, widget)
if box.widget then
box.widget:disconnect_signal("widget::updated", box._emit_updated)
end
@ -68,7 +69,7 @@ function set_widget(box, widget)
end
--- Set the background to use
function set_bg(box, bg)
function background.set_bg(box, bg)
if bg then
box.background = color(bg)
else
@ -78,7 +79,7 @@ function set_bg(box, bg)
end
--- Set the foreground to use
function set_fg(box, fg)
function background.set_fg(box, fg)
if fg then
box.foreground = color(fg)
else
@ -88,7 +89,7 @@ function set_fg(box, fg)
end
--- Set the background image to use
function set_bgimage(box, image)
function background.set_bgimage(box, image)
box.bgimage = surface.load(image)
box._emit_updated()
end
@ -96,7 +97,7 @@ end
local function new()
local ret = base.make_widget()
for k, v in pairs(_M) do
for k, v in pairs(background) do
if type(v) == "function" then
ret[k] = v
end
@ -109,6 +110,10 @@ local function new()
return ret
end
setmetatable(_M, { __call = function (_, ...) return new(...) end })
function background.mt:__call(...)
return new(...)
end
return setmetatable(background, background.mt)
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80

View File

@ -10,19 +10,20 @@ local pairs = pairs
local type = type
local table = table
module("wibox.widget.base")
-- wibox.widget.base
local base = {}
--- Set/get a widget's buttons
function buttons(widget, buttons)
if buttons then
widget.widget_buttons = buttons
function base.buttons(widget, _buttons)
if _buttons then
widget.widget_buttons = _buttons
end
return widget.widget_buttons
end
--- Handle a button event on a widget. This is used internally.
function handle_button(event, widget, x, y, button, modifiers)
function base.handle_button(event, widget, x, y, button, modifiers)
local function is_any(mod)
return #mod == 1 and mod[1] == "Any"
end
@ -62,7 +63,7 @@ end
-- that the needed signals are added and mouse input handling is set up.
-- @param proxy If this is set, the returned widget will be a proxy for this
-- widget. It will be equivalent to this widget.
function make_widget(proxy)
function base.make_widget(proxy)
local ret = object()
-- This signal is used by layouts to find out when they have to update.
@ -75,14 +76,14 @@ function make_widget(proxy)
-- No buttons yet
ret.widget_buttons = {}
ret.buttons = buttons
ret.buttons = base.buttons
-- Make buttons work
ret:connect_signal("button::press", function(...)
return handle_button("press", ...)
return base.handle_button("press", ...)
end)
ret:connect_signal("button::release", function(...)
return handle_button("release", ...)
return base.handle_button("release", ...)
end)
if proxy then
@ -98,7 +99,7 @@ end
--- Do some sanity checking on widget. This function raises a lua error if
-- widget is not a valid widget.
function check_widget(widget)
function base.check_widget(widget)
debug.assert(type(widget) == "table")
for k, func in pairs({ "draw", "fit", "add_signal", "connect_signal", "disconnect_signal" }) do
debug.assert(type(widget[func]) == "function", func .. " is not a function")
@ -109,4 +110,6 @@ function check_widget(widget)
debug.assert(type(height) == "number")
end
return base
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80

View File

@ -12,10 +12,11 @@ local type = type
local pcall = pcall
local print = print
module("wibox.widget.imagebox")
-- wibox.widget.imagebox
local imagebox = { mt = {} }
--- Draw an imagebox with the given cairo context in the given geometry.
function draw(box, wibox, cr, width, height)
function imagebox.draw(box, wibox, cr, width, height)
if not box.image then return end
cr:save()
@ -37,7 +38,7 @@ function draw(box, wibox, cr, width, height)
end
--- Fit the imagebox into the given geometry
function fit(box, width, height)
function imagebox.fit(box, width, height)
if not box.image then
return 0, 0
end
@ -70,7 +71,7 @@ end
--- Set an imagebox' image
-- @param image Either a string or a cairo image surface. A string is
-- interpreted as the path to a png image file.
function set_image(box, image)
function imagebox.set_image(box, image)
local image = image
if type(image) == "string" then
@ -101,7 +102,7 @@ end
--- Should the image be resized to fit into the available space?
-- @param allowed If false, the image will be clipped, else it will be resized
-- to fit into the available space.
function set_resize(box, allowed)
function imagebox.set_resize(box, allowed)
box.resize_forbidden = not allowed
box:emit_signal("widget::updated")
end
@ -110,7 +111,7 @@ end
local function new()
local ret = base.make_widget()
for k, v in pairs(_M) do
for k, v in pairs(imagebox) do
if type(v) == "function" then
ret[k] = v
end
@ -119,6 +120,10 @@ local function new()
return ret
end
setmetatable(_M, { __call = function (_, ...) return new(...) end })
function imagebox.mt:__call(...)
return new(...)
end
return setmetatable(imagebox, imagebox.mt)
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80

View File

@ -4,12 +4,15 @@
-- @release @AWESOME_VERSION@
---------------------------------------------------------------------------
require("wibox.widget.base")
require("wibox.widget.textbox")
require("wibox.widget.imagebox")
require("wibox.widget.background")
require("wibox.widget.systray")
-- wibox.widget
module("wibox.widget")
return
{
base = require("wibox.widget.base");
textbox = require("wibox.widget.textbox");
imagebox = require("wibox.widget.imagebox");
background = require("wibox.widget.background");
systray = require("wibox.widget.systray");
}
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80

View File

@ -11,13 +11,14 @@ local capi = { awesome = awesome }
local setmetatable = setmetatable
local error = error
module("wibox.widget.systray")
-- wibox.widget.systray
local systray = { mt = {} }
local created_systray = false
local horizontal = true
local base_size = nil
function draw(box, wibox, cr, width, height)
function systray.draw(box, wibox, cr, width, height)
local x, y, width, height = lbase.rect_to_device_geometry(cr, 0, 0, width, height)
local num_entries = capi.awesome.systray()
local bg = beautiful.bg_systray or beautiful.bg_normal
@ -36,7 +37,7 @@ function draw(box, wibox, cr, width, height)
capi.awesome.systray(wibox.drawin, x, y, base, horizontal, bg)
end
function fit(box, width, height)
function systray.fit(box, width, height)
local num_entries = capi.awesome.systray()
local base = base_size
if base == nil then
@ -60,8 +61,8 @@ local function new()
end
created_systray = true
ret.fit = fit
ret.draw = draw
ret.fit = systray.fit
ret.draw = systray.draw
ret.set_base_size = function(_, size) base_size = size end
ret.set_horizontal = function(_, horiz) horizontal = horiz end
@ -72,6 +73,10 @@ local function new()
return ret
end
setmetatable(_M, { __call = function (_, ...) return new(...) end })
function systray.mt:__call(...)
return new(...)
end
return setmetatable(systray, systray.mt)
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80

View File

@ -16,7 +16,8 @@ local setmetatable = setmetatable
local pairs = pairs
local error = error
module("wibox.widget.textbox")
-- wibox.widget.textbox
local textbox = { mt = {} }
-- Setup a pango layout for the given textbox and cairo context
local function setup_layout(box, width, height)
@ -26,7 +27,7 @@ local function setup_layout(box, width, height)
end
--- Draw the given textbox on the given cairo context in the given geometry
function draw(box, wibox, cr, width, height)
function textbox.draw(box, wibox, cr, width, height)
cr:update_layout(box._layout)
setup_layout(box, width, height)
local ink, logical = box._layout:get_pixel_extents()
@ -41,7 +42,7 @@ function draw(box, wibox, cr, width, height)
end
--- Fit the given textbox
function fit(box, width, height)
function textbox.fit(box, width, height)
setup_layout(box, width, height)
local ink, logical = box._layout:get_pixel_extents()
return logical.width, logical.height
@ -49,7 +50,7 @@ end
--- Set a textbox' text.
-- @param text The text to set. This can contain pango markup (e.g. <b>bold</b>)
function set_markup(box, text)
function textbox.set_markup(box, text)
local attr, parsed = Pango.parse_markup(text, -1, 0)
-- In case of error, attr is false and parsed is an error message
if not attr then error(parsed) end
@ -61,7 +62,7 @@ end
--- Set a textbox' text.
-- @param text The text to display. Pango markup is ignored and shown as-is.
function set_text(box, text)
function textbox.set_text(box, text)
box._layout.text = text
box._layout.attributes = nil
box:emit_signal("widget::updated")
@ -69,7 +70,7 @@ end
--- Set a textbox' ellipsize mode.
-- @param mode Where should long lines be shortened? "start", "middle" or "end"
function set_ellipsize(box, mode)
function textbox.set_ellipsize(box, mode)
local allowed = { none = "NONE", start = "START", middle = "MIDDLE", ["end"] = "END" }
if allowed[mode] then
box._layout:set_ellipsize(allowed[mode])
@ -79,7 +80,7 @@ end
--- Set a textbox' wrap mode.
-- @param mode Where to wrap? After "word", "char" or "word_char"
function set_wrap(box, mode)
function textbox.set_wrap(box, mode)
local allowed = { word = "WORD", char = "CHAR", word_char = "WORD_CHAR" }
if allowed[mode] then
box._layout:set_wrap(allowed[mode])
@ -89,7 +90,7 @@ end
--- Set a textbox' vertical alignment
-- @param mode Where should the textbox be drawn? "top", "center" or "bottom"
function set_valign(box, mode)
function textbox.set_valign(box, mode)
local allowed = { top = true, center = true, bottom = true }
if allowed[mode] then
box._valign = mode
@ -99,7 +100,7 @@ end
--- Set a textbox' horizontal alignment
-- @param mode Where should the textbox be drawn? "left", "center" or "right"
function set_align(box, mode)
function textbox.set_align(box, mode)
local allowed = { left = "LEFT", center = "CENTER", right = "RIGHT" }
if allowed[mode] then
box._layout:set_alignment(allowed[mode])
@ -109,7 +110,7 @@ end
--- Set a textbox' font
-- @param font The font description as string
function set_font(box, font)
function textbox.set_font(box, font)
box._layout:set_font_description(beautiful.get_font(font))
end
@ -117,7 +118,7 @@ end
local function new()
local ret = base.make_widget()
for k, v in pairs(_M) do
for k, v in pairs(textbox) do
if type(v) == "function" then
ret[k] = v
end
@ -135,6 +136,10 @@ local function new()
return ret
end
setmetatable(_M, { __call = function (_, ...) return new(...) end })
function textbox.mt:__call(...)
return new(...)
end
return setmetatable(textbox, textbox.mt)
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80