virtual size and docks

This commit is contained in:
Will McGugan
2023-05-12 15:36:49 +02:00
parent 4434b59982
commit 9a134b4920
7 changed files with 32 additions and 25 deletions

View File

@@ -94,7 +94,9 @@ def arrange(
) )
dock_region = dock_region.shrink(margin).translate(align_offset) dock_region = dock_region.shrink(margin).translate(align_offset)
add_placement( add_placement(
_WidgetPlacement(dock_region, null_spacing, dock_widget, top_z, True) _WidgetPlacement(
dock_region, null_spacing, dock_widget, top_z, True, False
)
) )
dock_spacing = Spacing(top, right, bottom, left) dock_spacing = Spacing(top, right, bottom, left)

View File

@@ -592,6 +592,7 @@ class Compositor:
get_layer_index = layers_to_index.get get_layer_index = layers_to_index.get
scroll_spacing = arrange_result.scroll_spacing scroll_spacing = arrange_result.scroll_spacing
total_region = total_region.shrink(scroll_spacing)
# Add all the widgets # Add all the widgets
for sub_region, margin, sub_widget, z, fixed, overlay in reversed( for sub_region, margin, sub_widget, z, fixed, overlay in reversed(
@@ -621,13 +622,21 @@ class Compositor:
constrain in ("y", "both"), constrain in ("y", "both"),
) )
if overlay:
clip_region = no_clip
else:
if fixed:
clip_region = sub_clip
else:
clip_region = sub_clip.shrink(scroll_spacing)
add_widget( add_widget(
sub_widget, sub_widget,
sub_region, sub_region,
widget_region, widget_region,
((1, 0, 0),) if overlay else widget_order, ((1, 0, 0),) if overlay else widget_order,
layer_order, layer_order,
no_clip if overlay else sub_clip, clip_region,
visible, visible,
) )

View File

@@ -72,9 +72,9 @@ class WidgetPlacement(NamedTuple):
region: Region region: Region
margin: Spacing margin: Spacing
widget: Widget widget: Widget
order: int = 0 order: int
fixed: bool = False fixed: bool
overlay: bool = False overlay: bool
class Layout(ABC): class Layout(ABC):

View File

@@ -21,8 +21,9 @@ def partition(
""" """
result: tuple[list[T], list[T]] = ([], []) result: tuple[list[T], list[T]] = ([], [])
appends = (result[0].append, result[1].append) append0 = result[0].append
append1 = result[1].append
for value in iterable: for value in iterable:
appends[1 if pred(value) else 0](value) (append1 if pred(value) else append0)(value)
return result return result

View File

@@ -153,7 +153,7 @@ class GridLayout(Layout):
.shrink(margin) .shrink(margin)
.clip_size(cell_size) .clip_size(cell_size)
) )
add_placement(WidgetPlacement(region, margin, widget)) add_placement(WidgetPlacement(region, margin, widget, 0, False, False))
add_widget(widget) add_widget(widget)
return (placements, set(widgets)) return (placements, set(widgets))

View File

@@ -580,7 +580,10 @@ class Screen(Generic[ScreenResultType], Widget):
) in layers: ) in layers:
if widget in exposed_widgets: if widget in exposed_widgets:
if widget._size_updated( if widget._size_updated(
region.size, virtual_size, container_size, layout=False region.size,
virtual_size,
container_size,
layout=False,
): ):
widget.post_message( widget.post_message(
ResizeEvent( ResizeEvent(

View File

@@ -24,10 +24,8 @@ def test_arrange_dock_top():
result = arrange(container, [child, header], Size(80, 24), Size(80, 24)) result = arrange(container, [child, header], Size(80, 24), Size(80, 24))
assert result.placements == [ assert result.placements == [
WidgetPlacement( WidgetPlacement(Region(0, 0, 80, 1), Spacing(), header, TOP_Z, True, False),
Region(0, 0, 80, 1), Spacing(), header, order=TOP_Z, fixed=True WidgetPlacement(Region(0, 1, 80, 23), Spacing(), child, 0, False, False),
),
WidgetPlacement(Region(0, 1, 80, 23), Spacing(), child, order=0, fixed=False),
] ]
assert result.widgets == {child, header} assert result.widgets == {child, header}
@@ -41,10 +39,8 @@ def test_arrange_dock_left():
result = arrange(container, [child, header], Size(80, 24), Size(80, 24)) result = arrange(container, [child, header], Size(80, 24), Size(80, 24))
assert result.placements == [ assert result.placements == [
WidgetPlacement( WidgetPlacement(Region(0, 0, 10, 24), Spacing(), header, TOP_Z, True, False),
Region(0, 0, 10, 24), Spacing(), header, order=TOP_Z, fixed=True WidgetPlacement(Region(10, 0, 70, 24), Spacing(), child, 0, False, False),
),
WidgetPlacement(Region(10, 0, 70, 24), Spacing(), child, order=0, fixed=False),
] ]
assert result.widgets == {child, header} assert result.widgets == {child, header}
@@ -58,10 +54,8 @@ def test_arrange_dock_right():
result = arrange(container, [child, header], Size(80, 24), Size(80, 24)) result = arrange(container, [child, header], Size(80, 24), Size(80, 24))
assert result.placements == [ assert result.placements == [
WidgetPlacement( WidgetPlacement(Region(70, 0, 10, 24), Spacing(), header, TOP_Z, True, False),
Region(70, 0, 10, 24), Spacing(), header, order=TOP_Z, fixed=True WidgetPlacement(Region(0, 0, 70, 24), Spacing(), child, 0, False, False),
),
WidgetPlacement(Region(0, 0, 70, 24), Spacing(), child, order=0, fixed=False),
] ]
assert result.widgets == {child, header} assert result.widgets == {child, header}
@@ -75,10 +69,8 @@ def test_arrange_dock_bottom():
result = arrange(container, [child, header], Size(80, 24), Size(80, 24)) result = arrange(container, [child, header], Size(80, 24), Size(80, 24))
assert result.placements == [ assert result.placements == [
WidgetPlacement( WidgetPlacement(Region(0, 23, 80, 1), Spacing(), header, TOP_Z, True, False),
Region(0, 23, 80, 1), Spacing(), header, order=TOP_Z, fixed=True WidgetPlacement(Region(0, 0, 80, 23), Spacing(), child, 0, False, False),
),
WidgetPlacement(Region(0, 0, 80, 23), Spacing(), child, order=0, fixed=False),
] ]
assert result.widgets == {child, header} assert result.widgets == {child, header}