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