diff --git a/src/ltui/view.lua b/src/ltui/view.lua index 416ae34..0e8efba 100644 --- a/src/ltui/view.lua +++ b/src/ltui/view.lua @@ -61,8 +61,8 @@ function view:init(name, bounds) state.selected = false -- is selected? state.focused = false -- is focused? state.redraw = true -- need redraw - state.on_refresh = true -- need refresh - state.on_resize = true -- need resize + state.on_refresh = true -- need refresh + state.on_resize = true -- need resize self._STATE = state -- init options @@ -93,8 +93,8 @@ end function view:exit() -- close window - if self:window() then - self:window():close() + if self._WINDOW then + self._WINDOW:close() self._WINDOW = nil end end @@ -156,6 +156,15 @@ end -- get the view window function view:window() + if not self._WINDOW then + + -- create window + self._WINDOW = curses.new_pad(self:height() > 0 and self:height() or 1, self:width() > 0 and self:width() or 1) + assert(self._WINDOW, "cannot create window!") + + -- disable cursor + self._WINDOW:leaveok(true) + end return self._WINDOW end @@ -217,21 +226,14 @@ function view:on_resize() log:print("%s: resize ..", self) -- close the previous windows first - if self:window() then - self:window():close() + if self._WINDOW then + self._WINDOW:close() self._WINDOW = nil end -- need renew canvas self._CANVAS = nil - -- create a new window - self._WINDOW = curses.new_pad(self:height() > 0 and self:height() or 1, self:width() > 0 and self:width() or 1) - assert(self._WINDOW, "cannot create window!") - - -- disable cursor - self:window():leaveok(true) - -- clear mark self:state_set("resize", false) diff --git a/tests/dialog.lua b/tests/dialog.lua index 2fba14a..bcf064b 100644 --- a/tests/dialog.lua +++ b/tests/dialog.lua @@ -126,6 +126,7 @@ end -- on resize function demo:on_resize() self:dialog_main():bounds_set(rect {1, 1, self:width() - 1, self:height() - 1}) + self:dialog_help():bounds_set(rect {1, 1, self:width() - 1, self:height() - 1}) self:center(self:dialog_input(), {centerx = true, centery = true}) self:center(self:dialog_tips(), {centerx = true, centery = true}) application.on_resize(self)