diff --git a/docs/dev/Lua API.rst b/docs/dev/Lua API.rst index 93a3ea160..683bb9d29 100644 --- a/docs/dev/Lua API.rst +++ b/docs/dev/Lua API.rst @@ -2366,6 +2366,12 @@ Supported callbacks and fields are: 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()`` Called every frame when the screen is on top of the stack. diff --git a/library/lua/gui.lua b/library/lua/gui.lua index 1bb9bae6b..ba15e32aa 100644 --- a/library/lua/gui.lua +++ b/library/lua/gui.lua @@ -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,6 +623,10 @@ function Screen:renderParent() else dscreen.clear() end + 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(...) diff --git a/library/lua/gui/widgets.lua b/library/lua/gui/widgets.lua index 01e1de89d..19b898446 100644 --- a/library/lua/gui/widgets.lua +++ b/library/lua/gui/widgets.lua @@ -442,7 +442,7 @@ end -- adding gaps between widgets according to self.autoarrange_gap. function Panel:postUpdateLayout() -- don't leave artifacts behind on the parent screen when we move - self.request_full_screen_refresh = true + gui.Screen.request_full_screen_refresh = true if not self.autoarrange_subviews then return end @@ -464,10 +464,6 @@ end function Panel:onRenderFrame(dc, rect) Panel.super.onRenderFrame(self, dc, rect) - if self.request_full_screen_refresh then - df.global.gps.force_full_display_count = 1 - self.request_full_screen_refresh = false - end if not self.frame_style then return end gui.paint_frame(dc, rect, self.frame_style, self.frame_title) if self.kbd_get_pos then