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:
NiLuJe
2021-02-20 18:22:48 +01:00
committed by GitHub
parent 1cdc6c61e0
commit fe10d0bce5
25 changed files with 707 additions and 685 deletions

View File

@@ -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