fix Акт 2: позиционирование Body адаптивное (compact vs scrollable)
Some checks failed
Godot CI / Import + smoke test (push) Failing after 14s
Some checks failed
Godot CI / Import + smoke test (push) Failing after 14s
Проблема: Body RichTextLabel был с custom_minimum_size (540, 220)
ВСЕГДА. На шагах с коротким текстом (диск/имя/пароль/часовой пояс)
лейбл занимал 220px пустого пространства между заголовком и
полями ввода, выдавливая чекбокс/кнопки за пределы экрана.
Решение:
- В .tscn Body custom_minimum_size = (540, 0), fit_content=true
(адаптируется под контент).
- Window custom_minimum_size = (580, 220) — раньше 348, теперь
окно само растёт под content.
- В скрипте 2 хелпера:
* _set_body_compact() — fit_content=true, min_size (540, 0).
Используется для всех коротких шагов.
* _set_body_scrollable(h) — fit_content=false, min_size (540, h),
scroll_to_line(0). Используется только для LICENSE_FULL.
- Все шаги (_to_disk, _to_username, _to_password, _to_timezone,
_to_installing) вызывают _set_body_compact() в начале.
- LICENSE_FULL вызывает _set_body_scrollable(220) для скроллябельной
лицензии + в title подсказка «прокрути колесом мыши».
Теперь окно установки правильно ужимается под короткий контент и
все поля видны на экране.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
48a992e07a
commit
6db9c4947b
2 changed files with 22 additions and 4 deletions
|
|
@ -119,7 +119,7 @@ anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
|
|
||||||
[node name="Window" type="PanelContainer" parent="Center"]
|
[node name="Window" type="PanelContainer" parent="Center"]
|
||||||
custom_minimum_size = Vector2(580, 348)
|
custom_minimum_size = Vector2(580, 220)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_styles/panel = SubResource("style_window")
|
theme_override_styles/panel = SubResource("style_window")
|
||||||
|
|
||||||
|
|
@ -137,10 +137,10 @@ horizontal_alignment = 1
|
||||||
modulate = Color(0.94, 0.71, 0.1, 1)
|
modulate = Color(0.94, 0.71, 0.1, 1)
|
||||||
|
|
||||||
[node name="Body" type="RichTextLabel" parent="Center/Window/V"]
|
[node name="Body" type="RichTextLabel" parent="Center/Window/V"]
|
||||||
custom_minimum_size = Vector2(540, 220)
|
custom_minimum_size = Vector2(540, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
fit_content = false
|
fit_content = true
|
||||||
scroll_active = true
|
scroll_active = true
|
||||||
scroll_following = false
|
scroll_following = false
|
||||||
mouse_filter = 0
|
mouse_filter = 0
|
||||||
|
|
|
||||||
|
|
@ -74,9 +74,21 @@ func _ready() -> void:
|
||||||
_to_license_intro()
|
_to_license_intro()
|
||||||
|
|
||||||
|
|
||||||
|
func _set_body_compact() -> void:
|
||||||
|
body_label.fit_content = true
|
||||||
|
body_label.custom_minimum_size = Vector2(540, 0)
|
||||||
|
|
||||||
|
|
||||||
|
func _set_body_scrollable(min_h: int) -> void:
|
||||||
|
body_label.fit_content = false
|
||||||
|
body_label.custom_minimum_size = Vector2(540, min_h)
|
||||||
|
body_label.scroll_to_line(0)
|
||||||
|
|
||||||
|
|
||||||
func _to_license_intro() -> void:
|
func _to_license_intro() -> void:
|
||||||
current_step = Step.LICENSE_INTRO
|
current_step = Step.LICENSE_INTRO
|
||||||
title_label.text = "Шиндовс 9 — Шаг 1 из 5"
|
title_label.text = "Шиндовс 9 — Шаг 1 из 5"
|
||||||
|
_set_body_compact()
|
||||||
body_label.text = LICENSE_SHORT
|
body_label.text = LICENSE_SHORT
|
||||||
body_label.visible = true
|
body_label.visible = true
|
||||||
btn_a.text = "Принять"
|
btn_a.text = "Принять"
|
||||||
|
|
@ -93,7 +105,8 @@ func _to_license_intro() -> void:
|
||||||
func _to_license_full() -> void:
|
func _to_license_full() -> void:
|
||||||
current_step = Step.LICENSE_FULL
|
current_step = Step.LICENSE_FULL
|
||||||
license_read_clicked = true
|
license_read_clicked = true
|
||||||
title_label.text = "Шиндовс 9 — Полный текст соглашения"
|
title_label.text = "Шиндовс 9 — Полный текст соглашения (прокрути колесом мыши)"
|
||||||
|
_set_body_scrollable(220)
|
||||||
body_label.text = LICENSE_FULL
|
body_label.text = LICENSE_FULL
|
||||||
btn_a.text = "Принять"
|
btn_a.text = "Принять"
|
||||||
btn_a.visible = true
|
btn_a.visible = true
|
||||||
|
|
@ -103,6 +116,7 @@ func _to_license_full() -> void:
|
||||||
func _to_disk() -> void:
|
func _to_disk() -> void:
|
||||||
current_step = Step.DISK
|
current_step = Step.DISK
|
||||||
title_label.text = "Шиндовс 9 — Шаг 2 из 5"
|
title_label.text = "Шиндовс 9 — Шаг 2 из 5"
|
||||||
|
_set_body_compact()
|
||||||
body_label.text = "[center][b]Выбор диска для установки[/b][/center]\n\n[•] Диск C:\\\\ (250 ГБ свободно)\n\nДругие диски не обнаружены."
|
body_label.text = "[center][b]Выбор диска для установки[/b][/center]\n\n[•] Диск C:\\\\ (250 ГБ свободно)\n\nДругие диски не обнаружены."
|
||||||
btn_a.text = "Далее"
|
btn_a.text = "Далее"
|
||||||
btn_a.visible = true
|
btn_a.visible = true
|
||||||
|
|
@ -112,6 +126,7 @@ func _to_disk() -> void:
|
||||||
func _to_username() -> void:
|
func _to_username() -> void:
|
||||||
current_step = Step.USERNAME
|
current_step = Step.USERNAME
|
||||||
title_label.text = "Шиндовс 9 — Шаг 3 из 5"
|
title_label.text = "Шиндовс 9 — Шаг 3 из 5"
|
||||||
|
_set_body_compact()
|
||||||
body_label.text = "[center][b]Введите имя пользователя[/b][/center]\n\nЭто имя будет использоваться в системе. Минимум 2 символа, максимум 24. Только буквы и цифры."
|
body_label.text = "[center][b]Введите имя пользователя[/b][/center]\n\nЭто имя будет использоваться в системе. Минимум 2 символа, максимум 24. Только буквы и цифры."
|
||||||
var rng: RandomNumberGenerator = RandomNumberGenerator.new()
|
var rng: RandomNumberGenerator = RandomNumberGenerator.new()
|
||||||
rng.randomize()
|
rng.randomize()
|
||||||
|
|
@ -131,6 +146,7 @@ func _to_username() -> void:
|
||||||
func _to_password() -> void:
|
func _to_password() -> void:
|
||||||
current_step = Step.PASSWORD
|
current_step = Step.PASSWORD
|
||||||
title_label.text = "Шиндовс 9 — Шаг 4 из 5"
|
title_label.text = "Шиндовс 9 — Шаг 4 из 5"
|
||||||
|
_set_body_compact()
|
||||||
body_label.text = "[center][b]Введите пароль[/b][/center]\n\nИли оставьте поле пустым / отметьте «Без пароля». Можно потом изменить в настройках."
|
body_label.text = "[center][b]Введите пароль[/b][/center]\n\nИли оставьте поле пустым / отметьте «Без пароля». Можно потом изменить в настройках."
|
||||||
input_field.text = ""
|
input_field.text = ""
|
||||||
input_field.secret = true
|
input_field.secret = true
|
||||||
|
|
@ -151,6 +167,7 @@ func _to_password() -> void:
|
||||||
func _to_timezone() -> void:
|
func _to_timezone() -> void:
|
||||||
current_step = Step.TIMEZONE
|
current_step = Step.TIMEZONE
|
||||||
title_label.text = "Шиндовс 9 — Шаг 5 из 5"
|
title_label.text = "Шиндовс 9 — Шаг 5 из 5"
|
||||||
|
_set_body_compact()
|
||||||
body_label.text = "[center][b]Выберите часовой пояс[/b][/center]\n\nЭто повлияет на время в системе. По умолчанию — UTC+3 (С., страна Р)."
|
body_label.text = "[center][b]Выберите часовой пояс[/b][/center]\n\nЭто повлияет на время в системе. По умолчанию — UTC+3 (С., страна Р)."
|
||||||
input_field.visible = false
|
input_field.visible = false
|
||||||
input_field.secret = false
|
input_field.secret = false
|
||||||
|
|
@ -165,6 +182,7 @@ func _to_timezone() -> void:
|
||||||
func _to_installing() -> void:
|
func _to_installing() -> void:
|
||||||
current_step = Step.INSTALLING
|
current_step = Step.INSTALLING
|
||||||
title_label.text = "Шиндовс 9 — Установка"
|
title_label.text = "Шиндовс 9 — Установка"
|
||||||
|
_set_body_compact()
|
||||||
body_label.text = "[center]Подождите, пока система устанавливается.\nЭто займёт пару минут.[/center]"
|
body_label.text = "[center]Подождите, пока система устанавливается.\nЭто займёт пару минут.[/center]"
|
||||||
input_field.visible = false
|
input_field.visible = false
|
||||||
input_hint.visible = false
|
input_hint.visible = false
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue