mirror of
https://github.com/koreader/koreader
synced 2024-11-18 03:25:46 +00:00
620542b055
InputText: checks whether provided content can be given back unaltered, which may not be the case after it is splitted to UTF8 chars if the text is binary content. Prevent editing text if that is the case. Adds InputText and InputDialog :isEditable() and :isEdited() methods. Also accounts for the scrollbar width when measuring text to prevent it from being displayed when not needed. Also ensure a minimal size of the scrollbar thumb so it is rendered when huge text with many lines is displayed. Virtual keyboard: Hold on Backspace: delete from cursor to start of line instead of clearing all text content.
44 lines
1.3 KiB
Lua
44 lines
1.3 KiB
Lua
local Blitbuffer = require("ffi/blitbuffer")
|
|
local Geom = require("ui/geometry")
|
|
local Size = require("ui/size")
|
|
local Widget = require("ui/widget/widget")
|
|
|
|
local VerticalScrollBar = Widget:new{
|
|
enable = true,
|
|
low = 0,
|
|
high = 1,
|
|
width = Size.padding.default,
|
|
height = Size.item.height_large,
|
|
bordersize = Size.border.thin,
|
|
bordercolor = Blitbuffer.COLOR_BLACK,
|
|
radius = 0,
|
|
rectcolor = Blitbuffer.COLOR_BLACK,
|
|
-- minimal height of the thumb/knob/grip (usually showing the current
|
|
-- view size and position relative to the whole scrollable height):
|
|
min_thumb_size = Size.line.thick,
|
|
}
|
|
|
|
function VerticalScrollBar:getSize()
|
|
return Geom:new{
|
|
w = self.width,
|
|
h = self.height
|
|
}
|
|
end
|
|
|
|
function VerticalScrollBar:set(low, high)
|
|
self.low = low > 0 and low or 0
|
|
self.high = high < 1 and high or 1
|
|
end
|
|
|
|
function VerticalScrollBar:paintTo(bb, x, y)
|
|
if not self.enable then return end
|
|
bb:paintBorder(x, y, self.width, self.height,
|
|
self.bordersize, self.bordercolor, self.radius)
|
|
bb:paintRect(x + self.bordersize, y + self.bordersize + self.low * self.height,
|
|
self.width - 2 * self.bordersize,
|
|
math.max((self.height - 2 * self.bordersize) * (self.high - self.low), self.min_thumb_size),
|
|
self.rectcolor)
|
|
end
|
|
|
|
return VerticalScrollBar
|