Skip to content

Commit 1a66332

Browse files
Limit UI scale to prevent overflow on some devices (#66)
Restrict UI scale based on minimum content width. Only show valid scale options in settings to avoid UI being too large or too small making it unusable.
1 parent 4496ab8 commit 1a66332

4 files changed

Lines changed: 21 additions & 4 deletions

File tree

src/autoload/HandlerGUI.gd

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ var tabs_panel: PanelContainer
2020

2121
var android_runtime: JNISingleton
2222
var is_light_system_bars: bool = false
23-
2423
var status_bar_visible: bool = true
2524

25+
var minimum_content_width : float
26+
2627
func set_system_bar_color(color: Color, override_appearance := false) -> void:
2728
if not android_runtime:
2829
return
@@ -380,8 +381,19 @@ func get_auto_ui_scale() -> float:
380381
var base_dpi := 160.0
381382
var scale := dpi / base_dpi
382383
var blend: float = clamp((dpi - 240.0) / 400.0, 0.0, 1.0)
383-
var adjusted_scale: float = lerp(scale, pow(scale, 0.75), blend)
384-
return max(adjusted_scale, 1.0)
384+
var adjusted_scale: float = max(lerp(scale, pow(scale, 0.75), blend), 1.0)
385+
386+
var screen_width := get_tree().root.size.x
387+
print("contents_minimum_width: ", minimum_content_width)
388+
print("screen_width: ", screen_width)
389+
print("adjusted_scale: ", adjusted_scale)
390+
391+
# Ensure the scale doesn't cause UI overflow.
392+
if (screen_width / adjusted_scale) < minimum_content_width:
393+
adjusted_scale = screen_width / minimum_content_width
394+
print("Adjusted scale due to min content width: ", adjusted_scale)
395+
396+
return snapped(adjusted_scale, 0.01)
385397

386398
func update_ui_scale() -> void:
387399
var window := get_window()

src/ui_parts/display.gd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ func sync_reference_image() -> void:
8989
reference_texture.hide()
9090

9191
func _on_snap_button_toggled(toggled_on: bool) -> void:
92+
HandlerGUI.update_ui_scale()
9293
Configs.savedata.snap = absf(Configs.savedata.snap) if toggled_on else -absf(Configs.savedata.snap)
9394

9495
func _on_snap_number_edit_value_changed(new_value: float) -> void:

src/ui_parts/editor_scene.gd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ func update_layout() -> void:
197197
side_panel_vbox.add_child(create_layout_node(side_panel_top[0]))
198198
elif not side_panel_bottom.is_empty():
199199
side_panel_vbox.add_child(create_layout_node(side_panel_bottom[0]))
200+
201+
HandlerGUI.minimum_content_width = get_minimum_size().x
200202

201203
func _on_main_splitter_dragged(offset: int) -> void:
202204
Configs.savedata.main_splitter_offset = offset

src/ui_widgets/settings_content_generic.gd

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,9 +557,11 @@ func setup_other_content() -> void:
557557
var dropdown_map := {
558558
SaveData.ScalingApproach.AUTO: "Auto (%d%%)" % int(auto_scale * 100),
559559
}
560+
var screen_width := get_tree().root.size.x
560561
for approach in all_options.keys():
561562
var value: float= all_options[approach]
562-
dropdown_map[approach] = "%d%%" % int(value * 100)
563+
if ((screen_width / value) >= HandlerGUI.minimum_content_width) && value >= auto_scale/2:
564+
dropdown_map[approach] = "%d%%" % int(value * 100)
563565

564566
current_setup_setting = "ui_scale"
565567
add_dropdown(Translator.translate("UI scale"), dropdown_map.keys(), dropdown_map)

0 commit comments

Comments
 (0)