mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Revamp flash_ui handling, once more, with feeling ;) (#7262)
* Simplify flash_ui handling (by handling the unhighlight pre-callback, c.f., #7262 for more details). * UIManager: Handle translucent window-level widgets (and those wrapped in a translucent MovableContainer) properly in setDirty directly, making sure what's *underneath* them gets repainted to avoid alpha layering glitches. (This was previously handled via localized hacks). * Update UIManager's documentation, and format it properly for ldoc parsing, making the HTML docs more useful. * ReaderView: Reinitialize the various page areas when opening a new document, to prevent poisoning from the previous document. * Event: Handle nils in an event's arguments. * CheckButton/RadioButton: Switch to simple inversion to handle highlighting * CheckButton: Make the highlight span the inner frame's width, instead of just the text's width, if possible. * AlphaContainer: Fix & simplify, given the UIManager alpha handling. * MovableContainer: When translucent, cache the canvas bb used for composition. * Avoid spurious refreshes in a few widgets using various dummy *TextWidgets in order to first compute a text height. * KeyValuePage: Avoid floats in size computations.
This commit is contained in:
@@ -58,6 +58,7 @@ local InputText = InputContainer:new{
|
||||
is_password_type = false, -- set to true if original text_type == "password"
|
||||
is_text_editable = true, -- whether text is utf8 reversible and editing won't mess content
|
||||
is_text_edited = false, -- whether text has been updated
|
||||
for_measurement_only = nil, -- When the widget is a one-off used to compute text height
|
||||
}
|
||||
|
||||
-- only use PhysicalKeyboard if the device does not have touch screen
|
||||
@@ -318,6 +319,7 @@ function InputText:initTextBox(text, char_added)
|
||||
lang = self.lang, -- these might influence height
|
||||
para_direction_rtl = self.para_direction_rtl,
|
||||
auto_para_direction = self.auto_para_direction,
|
||||
for_measurement_only = true, -- flag it as a dummy, so it won't trigger any bogus repaint/refresh...
|
||||
}
|
||||
self.height = text_widget:getTextHeight()
|
||||
self.scroll = true
|
||||
@@ -343,6 +345,7 @@ function InputText:initTextBox(text, char_added)
|
||||
dialog = self.parent,
|
||||
scroll_callback = self.scroll_callback,
|
||||
scroll_by_pan = self.scroll_by_pan,
|
||||
for_measurement_only = self.for_measurement_only,
|
||||
}
|
||||
else
|
||||
self.text_widget = TextBoxWidget:new{
|
||||
@@ -362,6 +365,7 @@ function InputText:initTextBox(text, char_added)
|
||||
width = self.width,
|
||||
height = self.height,
|
||||
dialog = self.parent,
|
||||
for_measurement_only = self.for_measurement_only,
|
||||
}
|
||||
end
|
||||
-- Get back possibly modified charpos and virtual_line_num
|
||||
@@ -388,9 +392,12 @@ function InputText:initTextBox(text, char_added)
|
||||
self[1] = self._frame
|
||||
self.dimen = self._frame:getSize()
|
||||
--- @fixme self.parent is not always in the widget stack (BookStatusWidget)
|
||||
UIManager:setDirty(self.parent, function()
|
||||
return "ui", self.dimen
|
||||
end)
|
||||
-- Don't even try to refresh dummy widgets used for text height computations...
|
||||
if not self.for_measurement_only then
|
||||
UIManager:setDirty(self.parent, function()
|
||||
return "ui", self.dimen
|
||||
end)
|
||||
end
|
||||
if self.edit_callback then
|
||||
self.edit_callback(self.is_text_edited)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user