mirror of
https://github.com/koreader/koreader
synced 2024-11-10 01:10:34 +00:00
39744d7642
The coordinates could wonky otherwise, as TouchMenuItem is an InputContainer. Mostly harmless in practice as that UC is its main widget.
53 lines
1.5 KiB
Lua
53 lines
1.5 KiB
Lua
--[[--
|
|
An UnderlineContainer is a WidgetContainer that is able to paint
|
|
a line under its child node.
|
|
--]]
|
|
|
|
|
|
local Blitbuffer = require("ffi/blitbuffer")
|
|
local Geom = require("ui/geometry")
|
|
local Size = require("ui/size")
|
|
local WidgetContainer = require("ui/widget/container/widgetcontainer")
|
|
|
|
local UnderlineContainer = WidgetContainer:extend{
|
|
linesize = Size.line.thick,
|
|
padding = Size.padding.tiny,
|
|
-- We default to white to be invisible by default for FocusManager use-cases (only switching to black @ onFocus)
|
|
color = Blitbuffer.COLOR_WHITE,
|
|
vertical_align = "top",
|
|
}
|
|
|
|
function UnderlineContainer:getSize()
|
|
local contentSize = self[1]:getSize()
|
|
return Geom:new{
|
|
w = contentSize.w,
|
|
h = contentSize.h + self.linesize + 2*self.padding
|
|
}
|
|
end
|
|
|
|
function UnderlineContainer:paintTo(bb, x, y)
|
|
local container_size = self:getSize()
|
|
if not self.dimen then
|
|
self.dimen = Geom:new{
|
|
x = x, y = y,
|
|
w = container_size.w,
|
|
h = container_size.h
|
|
}
|
|
else
|
|
self.dimen.x = x
|
|
self.dimen.y = y
|
|
end
|
|
local content_size = self[1]:getSize()
|
|
local p_y = y
|
|
if self.vertical_align == "center" then
|
|
p_y = math.floor((container_size.h - content_size.h) / 2) + y
|
|
elseif self.vertical_align == "bottom" then
|
|
p_y = (container_size.h - content_size.h) + y
|
|
end
|
|
self[1]:paintTo(bb, x, p_y)
|
|
bb:paintRect(x, y + container_size.h - self.linesize,
|
|
container_size.w, self.linesize, self.color)
|
|
end
|
|
|
|
return UnderlineContainer
|