Skip to content

Commit 528097e

Browse files
committed
simpler caching mechanism
1 parent 665610e commit 528097e

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

src/textual/_arrange.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,8 @@ def arrange(
6464

6565
for widgets in layers.values():
6666
# Partition widgets into split widgets and non-split widgets
67-
6867
non_split_widgets, split_widgets = partition(_get_split, widgets)
6968
if split_widgets:
70-
7169
_split_placements, dock_region = _arrange_split_widgets(
7270
split_widgets, size, viewport
7371
)

src/textual/layouts/stream.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ class StreamLayout(Layout):
3232
name = "stream"
3333

3434
def __init__(self) -> None:
35-
self._cache: dict[object, list[WidgetPlacement]] = {}
35+
self._cached_placements: list[WidgetPlacement] | None = None
36+
self._cached_width = 0
37+
super().__init__()
3638

3739
def arrange(
3840
self, parent: Widget, children: list[Widget], size: Size, greedy: bool = True
@@ -42,8 +44,10 @@ def arrange(
4244
return []
4345
viewport = parent.app.viewport_size
4446

45-
cache_key = (size, viewport)
46-
previous_results = self._cache.get(cache_key, None) or []
47+
if size.width != self._cached_width:
48+
self._cached_placements = None
49+
previous_results = self._cached_placements or []
50+
4751
layout_widgets = parent.screen._layout_widgets.get(parent, [])
4852

4953
_Region = Region
@@ -58,12 +62,14 @@ def arrange(
5862

5963
pre_populate = bool(previous_results and layout_widgets)
6064
for widget, placement in zip_longest(children, previous_results):
61-
if pre_populate and placement is not None and widget == placement.widget:
65+
if pre_populate and placement is not None and widget is placement.widget:
6266
if widget in layout_widgets:
6367
pre_populate = False
6468
else:
6569
placements.append(placement)
6670
y = placement.region.bottom
71+
styles = widget.styles._base_styles
72+
previous_margin = styles.margin.bottom
6773
continue
6874
if widget is None:
6975
break
@@ -104,7 +110,8 @@ def arrange(
104110
)
105111
y += height
106112

107-
self._cache[cache_key] = placements
113+
self._cached_width = size.width
114+
self._cached_placements = placements
108115
return placements
109116

110117
def get_content_width(self, widget: Widget, container: Size, viewport: Size) -> int:

0 commit comments

Comments
 (0)