remove arrangement spacing (#2157)

* remove arrangement spacing

* snapshot test

* comment

* changelog
This commit is contained in:
Will McGugan
2023-03-28 15:27:01 +01:00
committed by GitHub
parent 17c6f3fc2a
commit b005c13956
8 changed files with 217 additions and 14 deletions

View File

@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
- Issue with parsing action strings whose arguments contained quoted closing parenthesis https://github.com/Textualize/textual/pull/2112
- Issues with parsing action strings with tuple arguments https://github.com/Textualize/textual/pull/2112
- Fix for tabs not invalidating https://github.com/Textualize/textual/issues/2125
- Fixed scrollbar layers issue https://github.com/Textualize/textual/issues/1358
- Fix for interaction between pseudo-classes and widget-level render caches https://github.com/Textualize/textual/pull/2155
### Changed

View File

@@ -128,4 +128,4 @@ def arrange(
placements.extend(layout_placements)
return DockArrangeResult(placements, arrange_widgets, scroll_spacing)
return DockArrangeResult(placements, arrange_widgets)

View File

@@ -484,7 +484,6 @@ class Compositor:
# Arrange the layout
arrange_result = widget._arrange(child_region.size)
arranged_widgets = arrange_result.widgets
spacing = arrange_result.spacing
widgets.update(arranged_widgets)
if visible_only:
@@ -513,9 +512,7 @@ class Compositor:
if fixed:
widget_region = sub_region + placement_offset
else:
total_region = total_region.union(
sub_region.grow(spacing + margin)
)
total_region = total_region.union(sub_region.grow(margin))
widget_region = sub_region + placement_scroll_offset
widget_order = order + (

View File

@@ -21,8 +21,6 @@ class DockArrangeResult:
"""A `WidgetPlacement` for every widget to describe it's location on screen."""
widgets: set[Widget]
"""A set of widgets in the arrangement."""
spacing: Spacing
"""Shared spacing around the widgets."""
_spatial_map: SpatialMap[WidgetPlacement] | None = None
"""A Spatial map to query widget placements."""
@@ -113,7 +111,7 @@ class Layout(ABC):
else:
# Use a size of 0, 0 to ignore relative sizes, since those are flexible anyway
arrangement = widget._arrange(Size(0, 0))
return arrangement.total_region.right + arrangement.spacing.right
return arrangement.total_region.right
return width
def get_content_height(
@@ -135,5 +133,5 @@ class Layout(ABC):
else:
# Use a height of zero to ignore relative heights
arrangement = widget._arrange(Size(width, 0))
height = arrangement.total_region.bottom + arrangement.spacing.bottom
height = arrangement.total_region.bottom
return height

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,48 @@
from textual.app import App, ComposeResult
from textual.containers import Vertical
from textual.widgets import Header, Footer, Label
from textual.binding import Binding
class Dialog(Vertical):
def compose(self) -> ComposeResult:
"""Compose the child widgets."""
yield Label("This should not cause a scrollbar to appear")
class DialogIssueApp(App[None]):
CSS = """
Screen {
layers: base dialog;
}
.hidden {
display: none;
}
Dialog {
align: center middle;
border: round red;
width: 50%;
height: 50%;
layer: dialog;
offset: 50% 50%;
}
"""
BINDINGS = [
Binding("d", "dialog", "Toggle the dialog"),
]
def compose(self) -> ComposeResult:
yield Header()
yield Vertical()
yield Dialog(classes="hidden")
yield Footer()
def action_dialog(self) -> None:
self.query_one(Dialog).toggle_class("hidden")
if __name__ == "__main__":
DialogIssueApp().run()

View File

@@ -340,3 +340,8 @@ def test_scrollbar_thumb_height(snap_compare):
assert snap_compare(
SNAPSHOT_APPS_DIR / "scrollbar_thumb_height.py",
)
def test_layer_fix(snap_compare):
# Check https://github.com/Textualize/textual/issues/1358
assert snap_compare(SNAPSHOT_APPS_DIR / "layer_fix.py", press=["d"])

View File

@@ -12,7 +12,6 @@ def test_arrange_empty():
result = arrange(container, [], Size(80, 24), Size(80, 24))
assert result.placements == []
assert result.widgets == set()
assert result.spacing == Spacing(0, 0, 0, 0)
def test_arrange_dock_top():
@@ -31,7 +30,6 @@ def test_arrange_dock_top():
WidgetPlacement(Region(0, 1, 80, 23), Spacing(), child, order=0, fixed=False),
]
assert result.widgets == {child, header}
assert result.spacing == Spacing(1, 0, 0, 0)
def test_arrange_dock_left():
@@ -49,7 +47,6 @@ def test_arrange_dock_left():
WidgetPlacement(Region(10, 0, 70, 24), Spacing(), child, order=0, fixed=False),
]
assert result.widgets == {child, header}
assert result.spacing == Spacing(0, 0, 0, 10)
def test_arrange_dock_right():
@@ -67,7 +64,6 @@ def test_arrange_dock_right():
WidgetPlacement(Region(0, 0, 70, 24), Spacing(), child, order=0, fixed=False),
]
assert result.widgets == {child, header}
assert result.spacing == Spacing(0, 10, 0, 0)
def test_arrange_dock_bottom():
@@ -85,7 +81,6 @@ def test_arrange_dock_bottom():
WidgetPlacement(Region(0, 0, 80, 23), Spacing(), child, order=0, fixed=False),
]
assert result.widgets == {child, header}
assert result.spacing == Spacing(0, 0, 1, 0)
def test_arrange_dock_badly():