From 7accd7572be6b175ec5d5642a3ea8088a286fc35 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Fri, 7 Dec 2012 23:28:55 +0800 Subject: [PATCH] add OverlapGroup in widget.lua --- frontend/ui/widget.lua | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/frontend/ui/widget.lua b/frontend/ui/widget.lua index 43a6f28af..7da05bc46 100644 --- a/frontend/ui/widget.lua +++ b/frontend/ui/widget.lua @@ -478,6 +478,56 @@ function VerticalGroup:free() WidgetContainer.free(self) end + +--[[ +A Layout widget that puts objects above each other +]] +OverlapGroup = WidgetContainer:new{ + _size = nil, +} + +function OverlapGroup:getSize() + if not self._size then + self._size = {w = 0, h = 0} + self._offsets = { x = math.huge, y = math.huge } + for i, widget in ipairs(self) do + local w_size = widget:getSize() + if self._size.h < w_size.h then + self._size.h = w_size.h + end + if self._size.w < w_size.w then + self._size.w = w_size.w + end + end + end + + if self.dimen.w then + self._size.w = self.dimen.w + end + if self.dimen.h then + self._size.h = self.dimen.h + end + + return self._size +end + +function OverlapGroup:paintTo(bb, x, y) + local size = self:getSize() + + for i, wget in ipairs(self) do + local wget_size = wget:getSize() + if wget.align == "right" then + wget:paintTo(bb, x+size.w-wget_size.w, y) + elseif wget.align == "center" then + wget:paintTo(bb, x+(size.w-wget_size.w)/2, y) + else + -- default to left + wget:paintTo(bb, x, y) + end + end +end + + --[[ Dummy Widget that reserves vertical space ]]