naughty: simplify width/height calculations

This also fixes an issue with spacing calculation which previously
disregarded border_width.

Signed-off-by: koniu <gkusnierz@gmail.com>
This commit is contained in:
koniu 2009-05-06 19:43:28 +01:00 committed by Julien Danjou
parent 4d60ad7e36
commit d397d72a8d
1 changed files with 25 additions and 24 deletions

View File

@ -121,8 +121,8 @@ end
local function get_offset(screen, position, idx, width, height)
local ws = capi.screen[screen].workarea
local v = {}
width = width or notifications[screen][position][idx].width or config.width
local idx = idx or #notifications[screen][position] + 1
local width = width or notifications[screen][position][idx].width
-- calculate x
if position:match("left") then
@ -351,35 +351,36 @@ function notify(args)
border_color = border_color,
border_width = border_width })
-- position the wibox
if height then
if iconbox and iconbox.image.height > height then
notification.height = iconbox.image.height
else
notification.height = height
end
else
-- calculate the height
if not height then
if iconbox and iconbox:extents().height > textbox:extents().height then
notification.height = iconbox:extents().height
height = iconbox:extents().height
else
notification.height = textbox:extents().height
height = textbox:extents().height
end
end
if width then
notification.width = width
else
notification.width = textbox:extents().width + (iconbox and iconbox:extents().width or 0) + (2 * (border_width or 0))
end
if notification.width > capi.screen[screen].workarea.width - 2 * (border_width or 0) then
notification.width = capi.screen[screen].workarea.width - 2 * (border_width or 0)
end
if notification.height > capi.screen[screen].workarea.height - 2 * (border_width or 0) - 2 * (config.padding or 0) then
notification.height = capi.screen[screen].workarea.height - 2 * (border_width or 0) - 2 * (config.padding or 0)
end
-- calculate the width
if not width then
width = textbox:extents().width + (iconbox and iconbox:extents().width or 0)
end
-- crop to workarea size if too big
if width > capi.screen[screen].workarea.width - 2 * (border_width or 0) - 2 * (config.padding or 0) then
width = capi.screen[screen].workarea.width - 2 * (border_width or 0) - 2 * (config.padding or 0)
end
if height > capi.screen[screen].workarea.height - 2 * (border_width or 0) - 2 * (config.padding or 0) then
height = capi.screen[screen].workarea.height - 2 * (border_width or 0) - 2 * (config.padding or 0)
end
-- set size in notification object
notification.height = height + 2 * (border_width or 0)
notification.width = width + 2 * (border_width or 0)
-- position the wibox
local offset = get_offset(screen, notification.position, nil, notification.width, notification.height)
notification.box:geometry({ width = notification.width,
height = notification.height,
notification.box:geometry({ width = width,
height = height,
x = offset.x,
y = offset.y })
notification.box.ontop = ontop