optimize refresh

This commit is contained in:
Will McGugan
2022-05-30 16:46:57 +01:00
parent 37d0b0330a
commit 1a2dfe8e5d
3 changed files with 9 additions and 5 deletions

View File

@@ -34,7 +34,7 @@ class Update(Message, verbosity=3):
@rich.repr.auto
class Layout(Message, verbosity=3):
def can_replace(self, message: Message) -> bool:
return isinstance(message, (Layout, Update))
return isinstance(message, Layout)
@rich.repr.auto

View File

@@ -174,15 +174,19 @@ class Screen(Widget):
async def handle_update(self, message: messages.Update) -> None:
message.stop()
message.prevent_default()
widget = message.widget
assert isinstance(widget, Widget)
self._dirty_widgets.add(widget)
self.check_idle()
async def handle_layout(self, message: messages.Layout) -> None:
print("LAYOUT")
message.stop()
message.prevent_default()
self._layout_required = True
self.check_idle()
self._refresh_layout()
def _screen_resized(self, size: Size):
"""Called by App when the screen is resized."""

View File

@@ -920,11 +920,11 @@ class Widget(DOMNode):
event (events.Idle): Idle event.
"""
if self._layout_required:
self._layout_required = False
self.screen.post_message_no_wait(messages.Layout(self))
elif self._repaint_required:
if self._repaint_required:
self.screen.post_message_no_wait(messages.Update(self, self))
if self._layout_required:
self.screen.post_message_no_wait(messages.Layout(self))
self._layout_required = False
self._repaint_required = False
def focus(self) -> None: