fix(FlowLayout): Align incomplete rows with the first card of the longest row
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
This commit is contained in:
@@ -24,6 +24,7 @@ def compute_layout(nat_sizes, rect_width, spacing, max_scale):
|
|||||||
# Определяем максимальное количество элементов в ряду и общий масштаб
|
# Определяем максимальное количество элементов в ряду и общий масштаб
|
||||||
max_items_per_row = 0
|
max_items_per_row = 0
|
||||||
global_scale = 1.0
|
global_scale = 1.0
|
||||||
|
max_row_x_start = min_margin # Начальная позиция x самого длинного ряда
|
||||||
temp_i = 0
|
temp_i = 0
|
||||||
|
|
||||||
# Первый проход: находим максимальное количество элементов в ряду
|
# Первый проход: находим максимальное количество элементов в ряду
|
||||||
@@ -45,7 +46,9 @@ def compute_layout(nat_sizes, rect_width, spacing, max_scale):
|
|||||||
available_width = rect_width - spacing * (count - 1) - 2 * min_margin
|
available_width = rect_width - spacing * (count - 1) - 2 * min_margin
|
||||||
desired_scale = available_width / sum_width if sum_width > 0 else 1.0
|
desired_scale = available_width / sum_width if sum_width > 0 else 1.0
|
||||||
global_scale = desired_scale if desired_scale < max_scale else max_scale
|
global_scale = desired_scale if desired_scale < max_scale else max_scale
|
||||||
|
# Сохраняем начальную позицию x для самого длинного ряда
|
||||||
|
scaled_row_width = int(sum_width * global_scale) + spacing * (count - 1)
|
||||||
|
max_row_x_start = max(min_margin, (rect_width - scaled_row_width) // 2)
|
||||||
temp_i = temp_j
|
temp_i = temp_j
|
||||||
|
|
||||||
# Второй проход: размещаем элементы
|
# Второй проход: размещаем элементы
|
||||||
@@ -71,8 +74,13 @@ def compute_layout(nat_sizes, rect_width, spacing, max_scale):
|
|||||||
scale = global_scale
|
scale = global_scale
|
||||||
scaled_row_width = int(sum_width * scale) + spacing * (count - 1)
|
scaled_row_width = int(sum_width * scale) + spacing * (count - 1)
|
||||||
|
|
||||||
# Центрируем ряд относительно контейнера
|
# Определяем начальную координату x
|
||||||
x = max(min_margin, (rect_width - scaled_row_width) // 2)
|
if count == max_items_per_row:
|
||||||
|
# Центрируем полный ряд
|
||||||
|
x = max(min_margin, (rect_width - scaled_row_width) // 2)
|
||||||
|
else:
|
||||||
|
# Выравниваем неполный ряд по левому краю, совмещая с началом самого длинного ряда
|
||||||
|
x = max_row_x_start
|
||||||
|
|
||||||
for k in range(i, j):
|
for k in range(i, j):
|
||||||
new_w = int(nat_sizes[k, 0] * scale)
|
new_w = int(nat_sizes[k, 0] * scale)
|
||||||
@@ -91,7 +99,7 @@ class FlowLayout(QLayout):
|
|||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.itemList = []
|
self.itemList = []
|
||||||
self.setContentsMargins(10, 10, 10, 10)
|
self.setContentsMargins(20, 20, 20, 20) # Отступы по краям
|
||||||
self._spacing = 20 # Отступ для анимации и предотвращения перекрытий
|
self._spacing = 20 # Отступ для анимации и предотвращения перекрытий
|
||||||
self._max_scale = 1.0 # Отключено масштабирование в layout
|
self._max_scale = 1.0 # Отключено масштабирование в layout
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user