mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
optimization, more tests
This commit is contained in:
@@ -58,18 +58,18 @@ def layout_resolve(total: int, edges: Sequence[Edge]) -> list[int]:
|
|||||||
for size, edge in zip(sizes, edges)
|
for size, edge in zip(sizes, edges)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
total_flexible = sum((edge.fraction or 1) for _, edge in flexible_edges)
|
||||||
_Fraction = Fraction
|
_Fraction = Fraction
|
||||||
while flexible_edges:
|
while flexible_edges:
|
||||||
# Calculate number of characters in a ratio portion
|
# Calculate number of characters in a ratio portion
|
||||||
portion = _Fraction(
|
portion = _Fraction(remaining, total_flexible)
|
||||||
remaining, sum((edge.fraction or 1) for _, edge in flexible_edges)
|
|
||||||
)
|
|
||||||
|
|
||||||
# If any edges will be less than their minimum, replace size with the minimum
|
# If any edges will be less than their minimum, replace size with the minimum
|
||||||
for flexible_index, (index, edge) in enumerate(flexible_edges):
|
for flexible_index, (index, edge) in enumerate(flexible_edges):
|
||||||
if portion * edge.fraction <= edge.min_size:
|
if portion * edge.fraction <= edge.min_size:
|
||||||
sizes[index] = edge.min_size
|
sizes[index] = edge.min_size
|
||||||
remaining -= edge.min_size
|
remaining -= edge.min_size
|
||||||
|
total_flexible -= edge.fraction
|
||||||
del flexible_edges[flexible_index]
|
del flexible_edges[flexible_index]
|
||||||
# New fixed size will invalidate calculations, so we need to repeat the process
|
# New fixed size will invalidate calculations, so we need to repeat the process
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -64,6 +64,28 @@ def test_two():
|
|||||||
[5, 2, 1, 2],
|
[5, 2, 1, 2],
|
||||||
),
|
),
|
||||||
(2, [Edge(None, 1), Edge(None, 1), Edge(None, 1)], [1, 1, 1]),
|
(2, [Edge(None, 1), Edge(None, 1), Edge(None, 1)], [1, 1, 1]),
|
||||||
|
(
|
||||||
|
2,
|
||||||
|
[
|
||||||
|
Edge(None, 1, min_size=5),
|
||||||
|
Edge(None, 1, min_size=4),
|
||||||
|
Edge(None, 1, min_size=3),
|
||||||
|
],
|
||||||
|
[5, 4, 3],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
18,
|
||||||
|
[
|
||||||
|
Edge(None, 1, min_size=1),
|
||||||
|
Edge(3),
|
||||||
|
Edge(None, 1, min_size=1),
|
||||||
|
Edge(4),
|
||||||
|
Edge(None, 1, min_size=1),
|
||||||
|
Edge(5),
|
||||||
|
Edge(None, 1, min_size=1),
|
||||||
|
],
|
||||||
|
[1, 3, 2, 4, 1, 5, 2],
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_multiple(size, edges, result):
|
def test_multiple(size, edges, result):
|
||||||
|
|||||||
Reference in New Issue
Block a user