Clarify grid autobreak behavior

This commit is contained in:
2026-07-07 23:06:53 +01:00
parent 44403bea2b
commit 5bd819d812
5 changed files with 52 additions and 17 deletions

View File

@@ -134,6 +134,7 @@ class GridLayoutContext:
columns: int
min_column_width: int
fit_gauges: bool
cell_padding: int = 12
row_height: int = 0
available_width: int = 0
_next_index: int = 0
@@ -169,7 +170,7 @@ class GridLayoutContext:
def cell_width(self) -> int | None:
if self.available_width <= 0:
return None
return max(int(self.available_width / self.columns), 1)
return max(int(self.available_width / self.columns) - self.cell_padding, 1)
def create_gauge_context(gauge_type: str, config: ConfigT) -> GaugeContext[ConfigT]:
@@ -257,9 +258,15 @@ def _available_layout_width(parent: Tag | None, width: int) -> int:
return 0
def _resolved_columns(columns: int, min_column_width: int, available_width: int) -> int:
columns = max(int(columns), 1)
def _resolved_columns(
columns: int | Literal["auto"], min_column_width: int, available_width: int
) -> int:
min_column_width = max(int(min_column_width), 0)
if columns == "auto":
if available_width > 0 and min_column_width > 0:
return max(1, available_width // min_column_width)
return 1
columns = max(int(columns), 1)
if available_width > 0 and min_column_width > 0:
columns = min(columns, max(1, available_width // min_column_width))
return columns
@@ -305,9 +312,10 @@ def gauge_panel(
def gauge_grid(
*,
columns: int = 1,
columns: int | Literal["auto"] = 1,
min_column_width: int = 180,
fit_gauges: bool = True,
cell_padding: int = 12,
row_height: int = 0,
tag: Tag | None = None,
parent: Tag | None = None,
@@ -318,7 +326,7 @@ def gauge_grid(
) -> GridLayoutContext:
"""Create a lightweight wrapping gauge layout container."""
if not _dpg_context_active:
return GridLayoutContext(None, 1, min_column_width, fit_gauges)
return GridLayoutContext(None, 1, min_column_width, fit_gauges, cell_padding)
layout_parent, layout_width = _next_layout_cell(parent)
if layout_parent is not None:
parent = layout_parent
@@ -340,7 +348,13 @@ def gauge_grid(
for _ in range(columns):
dpg.add_table_column(parent=container, width_stretch=True, init_width_or_weight=1.0)
return GridLayoutContext(
container, columns, min_column_width, fit_gauges, row_height, available_width
container,
columns,
min_column_width,
fit_gauges,
cell_padding,
row_height,
available_width,
)