mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
combine updates
This commit is contained in:
@@ -6,7 +6,7 @@ class GridTest(App):
|
||||
async def on_mount(self) -> None:
|
||||
"""Make a simple grid arrangement."""
|
||||
|
||||
grid = await self.view.dock_grid(edge="left", size=70, name="left")
|
||||
grid = await self.view.dock_grid(edge="left", name="left")
|
||||
|
||||
grid.add_column(fraction=1, name="left", min_size=20)
|
||||
grid.add_column(size=30, name="center")
|
||||
|
||||
@@ -95,9 +95,6 @@ class Layout(ABC):
|
||||
|
||||
def reset(self) -> None:
|
||||
self._cuts = None
|
||||
# if self._require_update:
|
||||
# self.regions.clear()
|
||||
# self._layout_map = None
|
||||
|
||||
def reflow(
|
||||
self, console: Console, width: int, height: int, scroll: Offset
|
||||
@@ -176,6 +173,7 @@ class Layout(ABC):
|
||||
yield widget, region.intersection(clip), region
|
||||
|
||||
def get_offset(self, widget: Widget) -> Offset:
|
||||
"""Get the offset of a widget."""
|
||||
try:
|
||||
return self.map[widget].region.origin
|
||||
except KeyError:
|
||||
|
||||
@@ -25,7 +25,7 @@ class Message:
|
||||
]
|
||||
|
||||
sender: MessageTarget
|
||||
bubble: ClassVar[bool] = False
|
||||
bubble: ClassVar[bool] = True
|
||||
verbosity: ClassVar[int] = 1
|
||||
|
||||
def __init__(self, sender: MessageTarget) -> None:
|
||||
@@ -47,7 +47,7 @@ class Message:
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield self.sender
|
||||
|
||||
def __init_subclass__(cls, bubble: bool = False, verbosity: int = 1) -> None:
|
||||
def __init_subclass__(cls, bubble: bool = True, verbosity: int = 1) -> None:
|
||||
super().__init_subclass__()
|
||||
cls.bubble = bubble
|
||||
cls.verbosity = verbosity
|
||||
|
||||
@@ -33,11 +33,11 @@ class UpdateMessage(Message, verbosity=3):
|
||||
@rich.repr.auto
|
||||
class LayoutMessage(Message, verbosity=3):
|
||||
def can_replace(self, message: Message) -> bool:
|
||||
return isinstance(message, LayoutMessage)
|
||||
return isinstance(message, (LayoutMessage, UpdateMessage))
|
||||
|
||||
|
||||
@rich.repr.auto
|
||||
class CursorMoveMessage(Message, bubble=True):
|
||||
class CursorMoveMessage(Message):
|
||||
def __init__(self, sender: MessagePump, line: int) -> None:
|
||||
self.line = line
|
||||
super().__init__(sender)
|
||||
|
||||
@@ -90,18 +90,20 @@ class View(Widget):
|
||||
return super().check_layout() or self.layout.check_update()
|
||||
|
||||
async def message_update(self, message: UpdateMessage) -> None:
|
||||
message.stop()
|
||||
widget = message.widget
|
||||
assert isinstance(widget, Widget)
|
||||
if self.is_root_view:
|
||||
message.stop()
|
||||
widget = message.widget
|
||||
assert isinstance(widget, Widget)
|
||||
|
||||
display_update = self.root_view.layout.update_widget(self.console, widget)
|
||||
if display_update is not None:
|
||||
self.app.display(display_update)
|
||||
display_update = self.layout.update_widget(self.console, widget)
|
||||
if display_update is not None:
|
||||
self.app.display(display_update)
|
||||
|
||||
async def message_layout(self, message: LayoutMessage) -> None:
|
||||
message.stop()
|
||||
await self.root_view.refresh_layout()
|
||||
self.app.refresh()
|
||||
if self.is_root_view:
|
||||
message.stop()
|
||||
await self.refresh_layout()
|
||||
self.app.refresh()
|
||||
|
||||
async def mount(self, *anon_widgets: Widget, **widgets: Widget) -> None:
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ from ..geometry import Offset, Size
|
||||
from ..layouts.vertical import VerticalLayout
|
||||
from ..view import View
|
||||
from ..message import Message
|
||||
from ..messages import UpdateMessage
|
||||
from ..messages import UpdateMessage, LayoutMessage
|
||||
from ..widget import Widget
|
||||
from ..widgets import Static
|
||||
|
||||
@@ -49,11 +49,11 @@ class WindowView(View, layout=VerticalLayout):
|
||||
|
||||
async def watch_scroll_x(self, value: int) -> None:
|
||||
self.layout.require_update()
|
||||
self.refresh(layout=True)
|
||||
self.refresh()
|
||||
|
||||
async def watch_scroll_y(self, value: int) -> None:
|
||||
self.layout.require_update()
|
||||
self.refresh(layout=True)
|
||||
self.refresh()
|
||||
|
||||
async def on_resize(self, event: events.Resize) -> None:
|
||||
await self.emit(WindowChange(self))
|
||||
|
||||
@@ -18,6 +18,7 @@ from rich.console import Console, RenderableType
|
||||
from rich.panel import Panel
|
||||
from rich.padding import Padding, PaddingDimensions
|
||||
from rich.pretty import Pretty
|
||||
from rich.segment import Segment
|
||||
from rich.style import Style
|
||||
from rich.styled import Styled
|
||||
from rich.text import TextType
|
||||
@@ -282,6 +283,7 @@ class Widget(MessagePump):
|
||||
|
||||
async def on_idle(self, event: events.Idle) -> None:
|
||||
if self.check_layout():
|
||||
self.render_cache = None
|
||||
self.reset_check_repaint()
|
||||
self.reset_check_layout()
|
||||
await self.emit(LayoutMessage(self))
|
||||
|
||||
Reference in New Issue
Block a user