mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
remove arrangement spacing (#2157)
* remove arrangement spacing * snapshot test * comment * changelog
This commit is contained in:
@@ -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
|
- 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
|
- 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
|
- 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
|
- Fix for interaction between pseudo-classes and widget-level render caches https://github.com/Textualize/textual/pull/2155
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
@@ -128,4 +128,4 @@ def arrange(
|
|||||||
|
|
||||||
placements.extend(layout_placements)
|
placements.extend(layout_placements)
|
||||||
|
|
||||||
return DockArrangeResult(placements, arrange_widgets, scroll_spacing)
|
return DockArrangeResult(placements, arrange_widgets)
|
||||||
|
|||||||
@@ -484,7 +484,6 @@ class Compositor:
|
|||||||
# Arrange the layout
|
# Arrange the layout
|
||||||
arrange_result = widget._arrange(child_region.size)
|
arrange_result = widget._arrange(child_region.size)
|
||||||
arranged_widgets = arrange_result.widgets
|
arranged_widgets = arrange_result.widgets
|
||||||
spacing = arrange_result.spacing
|
|
||||||
widgets.update(arranged_widgets)
|
widgets.update(arranged_widgets)
|
||||||
|
|
||||||
if visible_only:
|
if visible_only:
|
||||||
@@ -513,9 +512,7 @@ class Compositor:
|
|||||||
if fixed:
|
if fixed:
|
||||||
widget_region = sub_region + placement_offset
|
widget_region = sub_region + placement_offset
|
||||||
else:
|
else:
|
||||||
total_region = total_region.union(
|
total_region = total_region.union(sub_region.grow(margin))
|
||||||
sub_region.grow(spacing + margin)
|
|
||||||
)
|
|
||||||
widget_region = sub_region + placement_scroll_offset
|
widget_region = sub_region + placement_scroll_offset
|
||||||
|
|
||||||
widget_order = order + (
|
widget_order = order + (
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ class DockArrangeResult:
|
|||||||
"""A `WidgetPlacement` for every widget to describe it's location on screen."""
|
"""A `WidgetPlacement` for every widget to describe it's location on screen."""
|
||||||
widgets: set[Widget]
|
widgets: set[Widget]
|
||||||
"""A set of widgets in the arrangement."""
|
"""A set of widgets in the arrangement."""
|
||||||
spacing: Spacing
|
|
||||||
"""Shared spacing around the widgets."""
|
|
||||||
|
|
||||||
_spatial_map: SpatialMap[WidgetPlacement] | None = None
|
_spatial_map: SpatialMap[WidgetPlacement] | None = None
|
||||||
"""A Spatial map to query widget placements."""
|
"""A Spatial map to query widget placements."""
|
||||||
@@ -113,7 +111,7 @@ class Layout(ABC):
|
|||||||
else:
|
else:
|
||||||
# Use a size of 0, 0 to ignore relative sizes, since those are flexible anyway
|
# Use a size of 0, 0 to ignore relative sizes, since those are flexible anyway
|
||||||
arrangement = widget._arrange(Size(0, 0))
|
arrangement = widget._arrange(Size(0, 0))
|
||||||
return arrangement.total_region.right + arrangement.spacing.right
|
return arrangement.total_region.right
|
||||||
return width
|
return width
|
||||||
|
|
||||||
def get_content_height(
|
def get_content_height(
|
||||||
@@ -135,5 +133,5 @@ class Layout(ABC):
|
|||||||
else:
|
else:
|
||||||
# Use a height of zero to ignore relative heights
|
# Use a height of zero to ignore relative heights
|
||||||
arrangement = widget._arrange(Size(width, 0))
|
arrangement = widget._arrange(Size(width, 0))
|
||||||
height = arrangement.total_region.bottom + arrangement.spacing.bottom
|
height = arrangement.total_region.bottom
|
||||||
return height
|
return height
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
48
tests/snapshot_tests/snapshot_apps/layer_fix.py
Normal file
48
tests/snapshot_tests/snapshot_apps/layer_fix.py
Normal 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()
|
||||||
@@ -340,3 +340,8 @@ def test_scrollbar_thumb_height(snap_compare):
|
|||||||
assert snap_compare(
|
assert snap_compare(
|
||||||
SNAPSHOT_APPS_DIR / "scrollbar_thumb_height.py",
|
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"])
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ def test_arrange_empty():
|
|||||||
result = arrange(container, [], Size(80, 24), Size(80, 24))
|
result = arrange(container, [], Size(80, 24), Size(80, 24))
|
||||||
assert result.placements == []
|
assert result.placements == []
|
||||||
assert result.widgets == set()
|
assert result.widgets == set()
|
||||||
assert result.spacing == Spacing(0, 0, 0, 0)
|
|
||||||
|
|
||||||
|
|
||||||
def test_arrange_dock_top():
|
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),
|
WidgetPlacement(Region(0, 1, 80, 23), Spacing(), child, order=0, fixed=False),
|
||||||
]
|
]
|
||||||
assert result.widgets == {child, header}
|
assert result.widgets == {child, header}
|
||||||
assert result.spacing == Spacing(1, 0, 0, 0)
|
|
||||||
|
|
||||||
|
|
||||||
def test_arrange_dock_left():
|
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),
|
WidgetPlacement(Region(10, 0, 70, 24), Spacing(), child, order=0, fixed=False),
|
||||||
]
|
]
|
||||||
assert result.widgets == {child, header}
|
assert result.widgets == {child, header}
|
||||||
assert result.spacing == Spacing(0, 0, 0, 10)
|
|
||||||
|
|
||||||
|
|
||||||
def test_arrange_dock_right():
|
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),
|
WidgetPlacement(Region(0, 0, 70, 24), Spacing(), child, order=0, fixed=False),
|
||||||
]
|
]
|
||||||
assert result.widgets == {child, header}
|
assert result.widgets == {child, header}
|
||||||
assert result.spacing == Spacing(0, 10, 0, 0)
|
|
||||||
|
|
||||||
|
|
||||||
def test_arrange_dock_bottom():
|
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),
|
WidgetPlacement(Region(0, 0, 80, 23), Spacing(), child, order=0, fixed=False),
|
||||||
]
|
]
|
||||||
assert result.widgets == {child, header}
|
assert result.widgets == {child, header}
|
||||||
assert result.spacing == Spacing(0, 0, 1, 0)
|
|
||||||
|
|
||||||
|
|
||||||
def test_arrange_dock_badly():
|
def test_arrange_dock_badly():
|
||||||
|
|||||||
Reference in New Issue
Block a user