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

@@ -59,9 +59,9 @@ local ReaderView = OverlapGroup:extend{
hinting = true,
-- visible area within current viewing page
visible_area = Geom:new{x = 0, y = 0},
visible_area = nil,
-- dimen for current viewing page
page_area = Geom:new{},
page_area = nil,
-- dimen for area to dim
dim_area = nil,
-- has footer
@@ -78,8 +78,12 @@ function ReaderView:init()
self.view_modules = {}
-- fix recalculate from close document pageno
self.state.page = nil
-- fix inherited dim_area for following opened documents
self.dim_area = Geom:new{w = 0, h = 0}
-- Reset the various areas across documents
self.visible_area = Geom:new{x = 0, y = 0, w = 0, h = 0}
self.page_area = Geom:new{x = 0, y = 0, w = 0, h = 0}
self.dim_area = Geom:new{x = 0, y = 0, w = 0, h = 0}
self:addWidgets()
self.emitHintPageEvent = function()
self.ui:handleEvent(Event:new("HintPage", self.hinting))