only do a full refresh when needed

this significantly reduces CPU utilization when DFHack-owned screens are
visible.
develop
Myk Taylor 2022-12-30 16:58:40 -08:00
parent 7d91f9262d
commit 70a0f4a718
No known key found for this signature in database
3 changed files with 17 additions and 2 deletions

@ -2363,7 +2363,14 @@ Supported callbacks and fields are:
where the above painting functions work correctly.
If omitted, the screen is cleared; otherwise it should do that itself.
In order to make a see-through dialog, call ``self._native.parent:render()``.
In order to make a dialog where portions of the parent viewscreen are still
visible in the background, call ``screen:renderParent()``.
If artifacts are left on the parent even after this function is called, such
as when the window is dragged or is resized, any code can set
``gui.Screen.request_full_screen_refresh`` to ``true``. Then when
``screen.renderParent()`` is next called, it will do a full flush of the
graphics and clear the screen of artifacts.
* ``function screen:onIdle()``

@ -597,6 +597,7 @@ end
Screen = defclass(Screen, View)
Screen.text_input_mode = false
Screen.request_full_screen_refresh = false
function Screen:postinit()
self:onResize(dscreen.getWindowSize())
@ -622,7 +623,10 @@ function Screen:renderParent()
else
dscreen.clear()
end
df.global.gps.force_full_display_count = 1
if Screen.request_full_screen_refresh then
df.global.gps.force_full_display_count = 1
Screen.request_full_screen_refresh = false
end
end
function Screen:sendInputToParent(...)

@ -487,6 +487,10 @@ Window.ATTRS {
draggable = true,
}
function Window:postUpdateLayout()
gui.Screen.request_full_screen_refresh = true
end
-------------------
-- ResizingPanel --
-------------------