1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-18 17:19:50 +00:00

Auto-scale the UI based on dpi and resolution - Closes #643

Code is taken from Godot's editor, so I assume it should work well.
This commit is contained in:
Emmanouil Papadeas 2022-09-18 01:17:35 +03:00
parent c8efa7c09a
commit d69d98dc3b
3 changed files with 20 additions and 0 deletions

View file

@ -14,6 +14,7 @@ onready var right_cursor: Sprite = $RightCursor
func _init() -> void:
Global.shrink = _get_auto_display_scale()
if OS.get_name() == "OSX":
_use_osx_shortcuts()
@ -88,6 +89,22 @@ func _input(event: InputEvent) -> void:
get_focus_owner().release_focus()
# Taken from https://github.com/godotengine/godot/blob/3.x/editor/editor_settings.cpp#L1474
func _get_auto_display_scale() -> float:
if OS.get_name() == "OSX":
return OS.get_screen_max_scale()
var dpi := OS.get_screen_dpi()
var smallest_dimension: int = min(OS.get_screen_size().x, OS.get_screen_size().y)
if dpi >= 192 && smallest_dimension >= 1400:
return 2.0 # hiDPI display.
elif smallest_dimension >= 1700:
return 1.5 # Likely a hiDPI display, but we aren't certain due to the returned DPI.
elif smallest_dimension <= 800:
return 0.75 # Small loDPI display.
return 1.0
func _setup_application_window_size() -> void:
get_tree().set_screen_stretch(
SceneTree.STRETCH_MODE_DISABLED,

View file

@ -90,6 +90,7 @@ onready var right_side: VBoxContainer = $HSplitContainer/ScrollContainer/VBoxCon
onready var autosave_container: Container = right_side.get_node("Backup/AutosaveContainer")
onready var autosave_interval: SpinBox = autosave_container.get_node("AutosaveInterval")
onready var shrink_label: Label = right_side.get_node("Interface/ShrinkContainer/ShrinkLabel")
onready var shrink_h_slider: HSlider = $"%ShrinkHSlider"
onready var themes: BoxContainer = right_side.get_node("Interface/Themes")
onready var shortcuts: Control = right_side.get_node("Shortcuts")
onready var extensions: BoxContainer = right_side.get_node("Extensions")
@ -111,6 +112,7 @@ class Preference:
func _ready() -> void:
# Replace OK since preference changes are being applied immediately, not after OK confirmation
get_ok().text = tr("Close")
shrink_h_slider.value = Global.shrink # In case shrink is not equal to 1
for child in shortcuts.get_children():
if not child is AcceptDialog:

View file

@ -154,6 +154,7 @@ text = "1"
align = 2
[node name="ShrinkHSlider" type="HSlider" parent="HSplitContainer/ScrollContainer/VBoxContainer/Interface/ShrinkContainer"]
unique_name_in_owner = true
margin_left = 142.0
margin_right = 446.0
margin_bottom = 16.0