From 137f1b10abf6e51d2bb73b1c0ba8d77ccce74378 Mon Sep 17 00:00:00 2001 From: Anish Mishra Date: Fri, 4 Jul 2025 18:16:25 +0530 Subject: [PATCH] Rework UI scaling --- project.godot | 5 +++-- src/autoload/HandlerGUI.gd | 36 +++++++---------------------- src/config_classes/SaveData.gd | 2 +- src/ui_parts/display.tscn | 2 +- src/ui_parts/settings_menu.gd | 41 +++++++++++++++++----------------- 5 files changed, 33 insertions(+), 53 deletions(-) diff --git a/project.godot b/project.godot index 3820b87..a87a275 100644 --- a/project.godot +++ b/project.godot @@ -34,8 +34,8 @@ HandlerGUI="*res://src/autoload/HandlerGUI.gd" [display] -window/size/viewport_width=720 -window/size/viewport_height=1280 +window/size/viewport_width=480 +window/size/viewport_height=854 window/energy_saving/keep_screen_on=false window/handheld/orientation=6 mouse_cursor/tooltip_position_offset=Vector2(0, 10) @@ -375,5 +375,6 @@ locale/translations=PackedStringArray("res://translations/bg.po", "res://transla [rendering] renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" textures/vram_compression/import_etc2_astc=true environment/defaults/default_clear_color=Color(0.12, 0.132, 0.2, 1) diff --git a/src/autoload/HandlerGUI.gd b/src/autoload/HandlerGUI.gd index 22e38ff..9713808 100644 --- a/src/autoload/HandlerGUI.gd +++ b/src/autoload/HandlerGUI.gd @@ -409,34 +409,12 @@ func get_min_ui_scale(usable_screen_size: Vector2i) -> float: func get_auto_ui_scale() -> float: var dpi := DisplayServer.screen_get_dpi(DisplayServer.window_get_current_screen()) - - if dpi <= 120: - return 0.75 - elif dpi <= 160: - return 1.0 - elif dpi <= 200: - return 1.25 - elif dpi <= 240: - return 1.5 - elif dpi <= 280: - return 1.75 - elif dpi <= 320: - return 2.0 - elif dpi <= 360: - return 2.25 - elif dpi <= 400: - return 2.5 - elif dpi <= 440: - return 2.75 - elif dpi <= 480: - return 3.0 - elif dpi <= 560: - return 3.5 - elif dpi <= 640: - return 4.0 - else: - return 5.0 - + print(dpi) + var base_dpi := 160.0 + var scale := dpi / base_dpi + var blend: float = clamp((dpi - 240.0) / 400.0, 0.0, 1.0) + var adjusted_scale: float = lerp(scale, pow(scale, 0.75), blend) + return max(adjusted_scale, 1.0) func update_ui_scale() -> void: var window := get_window() @@ -452,7 +430,9 @@ func update_ui_scale() -> void: SaveData.ScalingApproach.CONSTANT_150: final_scale = 1.50 SaveData.ScalingApproach.CONSTANT_175: final_scale = 1.75 SaveData.ScalingApproach.CONSTANT_200: final_scale = 2.0 + SaveData.ScalingApproach.CONSTANT_225: final_scale = 2.25 SaveData.ScalingApproach.CONSTANT_250: final_scale = 2.5 + SaveData.ScalingApproach.CONSTANT_275: final_scale = 2.75 SaveData.ScalingApproach.CONSTANT_300: final_scale = 3.0 SaveData.ScalingApproach.CONSTANT_400: final_scale = 4.0 window.content_scale_factor = final_scale diff --git a/src/config_classes/SaveData.gd b/src/config_classes/SaveData.gd index ad24193..6b57916 100644 --- a/src/config_classes/SaveData.gd +++ b/src/config_classes/SaveData.gd @@ -258,7 +258,7 @@ const HANDLE_SIZE_MAX = 4.0 Configs.handle_visuals_changed.emit() enum ScalingApproach {AUTO, CONSTANT_075, CONSTANT_100, CONSTANT_125, CONSTANT_150, - CONSTANT_175, CONSTANT_200, CONSTANT_250, CONSTANT_300, CONSTANT_400, MAX} + CONSTANT_175, CONSTANT_200, CONSTANT_225, CONSTANT_250, CONSTANT_275, CONSTANT_300, CONSTANT_400, MAX} @export var ui_scale := ScalingApproach.AUTO: set(new_value): # Validation diff --git a/src/ui_parts/display.tscn b/src/ui_parts/display.tscn index 2c4e66f..e39ebc5 100644 --- a/src/ui_parts/display.tscn +++ b/src/ui_parts/display.tscn @@ -51,7 +51,7 @@ unique_name_in_owner = true disable_3d = true handle_input_locally = false gui_snap_controls_to_pixels = false -size = Vector2i(720, 1249) +size = Vector2i(480, 823) size_2d_override_stretch = true render_target_update_mode = 4 script = ExtResource("9_4xrk7") diff --git a/src/ui_parts/settings_menu.gd b/src/ui_parts/settings_menu.gd index 9b710a6..c82e3e7 100644 --- a/src/ui_parts/settings_menu.gd +++ b/src/ui_parts/settings_menu.gd @@ -258,28 +258,27 @@ func setup_content() -> void: "Changes the visual size and grabbing area of handles.")) current_setup_setting = "ui_scale" - var dropdown_values := [ - SaveData.ScalingApproach.AUTO, - SaveData.ScalingApproach.CONSTANT_100, - SaveData.ScalingApproach.CONSTANT_125, - SaveData.ScalingApproach.CONSTANT_150, - SaveData.ScalingApproach.CONSTANT_175, - SaveData.ScalingApproach.CONSTANT_200, - SaveData.ScalingApproach.CONSTANT_250, - SaveData.ScalingApproach.CONSTANT_300 - ] - # Dictionary[SaveData.ScalingApproach, String] - var dropdown_map: Dictionary = { - SaveData.ScalingApproach.AUTO: "Auto (%d%%)" % int(HandlerGUI.get_auto_ui_scale()/ 1.5 * 100), - SaveData.ScalingApproach.CONSTANT_100: "66%", - SaveData.ScalingApproach.CONSTANT_125: "83%", - SaveData.ScalingApproach.CONSTANT_150: "100%", - SaveData.ScalingApproach.CONSTANT_175: "116%", - SaveData.ScalingApproach.CONSTANT_200: "133%", - SaveData.ScalingApproach.CONSTANT_250: "166%", - SaveData.ScalingApproach.CONSTANT_300: "200%" + + var auto_scale: float = HandlerGUI.get_auto_ui_scale() + var all_options := { + SaveData.ScalingApproach.CONSTANT_100: 1.0, + SaveData.ScalingApproach.CONSTANT_125: 1.25, + SaveData.ScalingApproach.CONSTANT_150: 1.5, + SaveData.ScalingApproach.CONSTANT_175: 1.75, + SaveData.ScalingApproach.CONSTANT_200: 2.0, + SaveData.ScalingApproach.CONSTANT_225: 2.25, + SaveData.ScalingApproach.CONSTANT_250: 2.5, + SaveData.ScalingApproach.CONSTANT_275: 2.75, + SaveData.ScalingApproach.CONSTANT_300: 3.0 + } + var dropdown_map := { + SaveData.ScalingApproach.AUTO: "Auto (%d%%)" % int(auto_scale * 100), } - add_dropdown(Translator.translate("UI scale"), dropdown_values, dropdown_map) + for approach in all_options.keys(): + var value: float= all_options[approach] + dropdown_map[approach] = "%d%%" % int(value * 100) + + add_dropdown(Translator.translate("UI scale"), dropdown_map.keys(), dropdown_map) add_advice(Translator.translate("Changes the scale factor for the interface.")) # Disable mouse wrap if not available. if not DisplayServer.has_feature(DisplayServer.FEATURE_MOUSE_WARP):