Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion export_presets.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ launcher_icons/adaptive_foreground_432x432="res://godot_only/android_icons/adapt
launcher_icons/adaptive_background_432x432="res://godot_only/android_icons/adaptive_background.png"
graphics/opengl_debug=false
xr_features/xr_mode=0
screen/immersive_mode=true
screen/immersive_mode=false
screen/support_small=true
screen/support_normal=true
screen/support_large=true
Expand Down
9 changes: 5 additions & 4 deletions project.godot
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ config_version=5
config/name="GodSVG Mobile"
config/version="1.0-alpha7"
config/tags=PackedStringArray("project")
run/main_scene="res://src/ui_parts/main_scene.tscn"
run/main_scene="res://src/portrait_ui/main_scene.tscn"
config/use_custom_user_dir=true
config/features=PackedStringArray("4.3")
run/low_processor_mode=true
Expand All @@ -37,10 +37,10 @@ HandlerGUI="*res://src/autoload/HandlerGUI.gd"

[display]

window/size/viewport_width=1024
window/size/viewport_height=640
window/size/mode=2
window/size/viewport_width=720
window/size/viewport_height=1280
window/energy_saving/keep_screen_on=false
window/handheld/orientation=1
mouse_cursor/tooltip_position_offset=Vector2(0, 10)

[filesystem]
Expand All @@ -51,6 +51,7 @@ import/fbx/enabled=false
[gui]

timers/tooltip_delay_sec=0.4
theme/custom="res://temp_theme.tres"

[input]

Expand Down
65 changes: 48 additions & 17 deletions src/autoload/HandlerGUI.gd
Original file line number Diff line number Diff line change
Expand Up @@ -274,30 +274,22 @@ func update_ui_scale() -> void:
# How much can the default size be increased before it takes all usable screen space.
var max_expansion := Vector2(usable_screen_size) / Vector2(window_default_size)
var max_scale := snappedf(minf(max_expansion.x, max_expansion.y) - 0.125, 0.25)
var min_scale := snappedf(max_scale / 2.0 - 0.125, 0.25)

var final_scale := Configs.savedata.ui_scale
if Configs.savedata.auto_ui_scale:
# The wider the screen, the bigger the automatically chosen UI scale.
var aspect_ratio := float(usable_screen_size.x) / usable_screen_size.y
var auto_scale := max_scale * clampf(aspect_ratio * 0.375, 0.6, 0.8)
if OS.get_name() == "Android":
auto_scale *= 1.1 # Default to giving mobile a bit more space.
final_scale = snappedf(final_scale * auto_scale, 0.25)
final_scale = clampf(final_scale, min_scale, max_scale)

if OS.get_name() == "Android":
# This is a temporary fix for smaller UI scale on Android.
# TODO Update this logic after moving to Godot 4.4
max_scale *= 1.1
var final_scale := minf(Configs.savedata.ui_scale * _calculate_auto_scale(), max_scale)
var resize_factor := final_scale / old_scale_factor

if not OS.get_name() in ["Android", "Web"]:
if window.mode == Window.MODE_WINDOWED:
# TODO Check later if this workaround is still necessary for Windows.
if OS.get_name() != "Windows" or window.mode == Window.MODE_WINDOWED:
# The window's minimum size can mess with the size change, so we set it to zero.
window.min_size = Vector2i.ZERO
window.size = Vector2i(mini(int(window.size.x * resize_factor),
usable_screen_size.x), mini(int(window.size.y * resize_factor),
usable_screen_size.y))
window.size *= resize_factor
window.min_size = window_default_size * final_scale
window.content_scale_factor = final_scale


func open_update_checker() -> void:
var confirmation_dialog = ConfirmDialog.instantiate()
add_menu(confirmation_dialog)
Expand Down Expand Up @@ -332,6 +324,45 @@ func open_export() -> void:
"The graphic can only be exported as SVG because its size is not defined. Do you want to proceed?"),
Translator.translate("Export"), FileUtils.open_export_dialog.bind(svg_export_data))

func _calculate_auto_scale() -> float:
if not Configs.savedata.auto_ui_scale:
return 1.0

# Credit: Godots (MIT, by MakovWait and contributors)

var screen := DisplayServer.window_get_current_screen()
if DisplayServer.screen_get_size(screen) == Vector2i():
return 1.0

# Use the smallest dimension to use a correct display scale on portrait displays.
var smallest_dimension := mini(DisplayServer.screen_get_size(screen).x,
DisplayServer.screen_get_size(screen).y)

var dpi := DisplayServer.screen_get_dpi(screen)
if dpi != 72:
if dpi < 72:
return 0.75
elif dpi <= 96:
return 1.0
elif dpi <= 120:
return 1.25
elif dpi <= 160:
return 1.5
elif dpi <= 200:
return 2.0
elif dpi <= 240:
return 2.5
elif dpi <= 320:
return 3.0
elif dpi <= 480:
return 4.0
else: # dpi > 480
return 5.0
elif smallest_dimension >= 1700:
# Likely a hiDPI display, but we aren't certain due to the returned DPI.
# Use an intermediate scale to handle this situation.
return 1.5
return 1.0

# Helpers

Expand Down
18 changes: 18 additions & 0 deletions src/portrait_ui/main_scene.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
extends VBoxContainer

const MacMenu = preload("res://src/ui_parts/global_menu.tscn")

@onready var panel_container: PanelContainer = $PanelContainer

func _ready() -> void:
Configs.theme_changed.connect(update_theme)
update_theme()
if NativeMenu.has_feature(NativeMenu.FEATURE_GLOBAL_MENU):
add_child(MacMenu.instantiate())

func update_theme() -> void:
pass
var stylebox := StyleBoxFlat.new()
stylebox.bg_color = ThemeUtils.overlay_panel_inner_color
stylebox.set_content_margin_all(0)
panel_container.add_theme_stylebox_override("panel", stylebox)
38 changes: 38 additions & 0 deletions src/portrait_ui/main_scene.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[gd_scene load_steps=5 format=3 uid="uid://bihwwoedqcyo8"]

[ext_resource type="Script" path="res://src/portrait_ui/main_scene.gd" id="1_o7lif"]
[ext_resource type="PackedScene" uid="uid://cr1fdlmbknnko" path="res://src/ui_parts/code_editor.tscn" id="3_4uluy"]
[ext_resource type="PackedScene" uid="uid://ccynisiuyn5qn" path="res://src/ui_parts/inspector.tscn" id="4_jik7v"]
[ext_resource type="PackedScene" uid="uid://bvrncl7e6yn5b" path="res://src/ui_parts/display.tscn" id="5_gb5yr"]

[node name="MainScene" type="VBoxContainer"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_o7lif")

[node name="PanelContainer" type="PanelContainer" parent="."]
custom_minimum_size = Vector2(360, 0)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3

[node name="HSplitContainer" type="VSplitContainer" parent="PanelContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 40
theme_override_constants/minimum_grab_thickness = 30

[node name="Inspector" parent="PanelContainer/HSplitContainer" instance=ExtResource("4_jik7v")]
layout_mode = 2

[node name="CodeEditor" parent="PanelContainer/HSplitContainer" instance=ExtResource("3_4uluy")]
visible = false
layout_mode = 2

[node name="Display" parent="PanelContainer/HSplitContainer" instance=ExtResource("5_gb5yr")]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
166 changes: 83 additions & 83 deletions src/ui_parts/display.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@
[ext_resource type="Script" path="res://src/ui_parts/handles_manager.gd" id="13_lwhwy"]
[ext_resource type="Script" path="res://src/ui_parts/camera.gd" id="15_hevpa"]

[sub_resource type="ShaderMaterial" id="ShaderMaterial_kqplg"]
shader = ExtResource("10_x7ybk")
shader_parameter/uv_scale = 1.0

[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_eujxa"]
bg_color = Color(0.866667, 0.933333, 1, 0.133333)
corner_radius_top_left = 5
corner_radius_bottom_left = 5

[sub_resource type="ShaderMaterial" id="ShaderMaterial_kqplg"]
shader = ExtResource("10_x7ybk")
shader_parameter/uv_scale = 1.0

[node name="Display" type="VBoxContainer"]
anchors_preset = 15
anchor_right = 1.0
Expand All @@ -34,83 +34,6 @@ grow_vertical = 2
theme_override_constants/separation = 0
script = ExtResource("1_oib5g")

[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 2
size_flags_vertical = 0

[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer"]
layout_mode = 2
alignment = 2

[node name="LeftMenu" type="HBoxContainer" parent="PanelContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 2
theme_override_constants/separation = 5

[node name="MoreOptions" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
size_flags_horizontal = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"IconButton"
icon = ExtResource("2_3wliq")
icon_alignment = 1

[node name="Settings" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
size_flags_horizontal = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"IconButton"
icon = ExtResource("3_0w618")
icon_alignment = 1

[node name="Reference" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
size_flags_horizontal = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"IconButton"
icon = ExtResource("4_2hiq7")
icon_alignment = 1

[node name="Visuals" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
size_flags_horizontal = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"IconButton"
icon = ExtResource("4_n3qjt")
icon_alignment = 1

[node name="Snapping" type="HBoxContainer" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
theme_override_constants/separation = 0

[node name="SnapButton" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu/Snapping"]
layout_mode = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"RightConnectedButton"
toggle_mode = true
icon = ExtResource("5_1k2cq")
script = ExtResource("6_3v3ve")
hover_pressed_stylebox = SubResource("StyleBoxFlat_eujxa")

[node name="SnapNumberEdit" parent="PanelContainer/HBoxContainer/LeftMenu/Snapping" instance=ExtResource("7_wrrfr")]
custom_minimum_size = Vector2(48, 22)
layout_mode = 2
theme_type_variation = &"LeftConnectedLineEdit"
max_length = 20
editable = false
min_value = 0.001
allow_lower = false

[node name="ZoomMenu" parent="PanelContainer/HBoxContainer" instance=ExtResource("8_xtdmn")]
unique_name_in_owner = true
layout_mode = 2

[node name="ViewportPanel" type="PanelContainer" parent="."]
layout_mode = 2
size_flags_vertical = 3
Expand All @@ -126,7 +49,7 @@ unique_name_in_owner = true
disable_3d = true
handle_input_locally = false
gui_snap_controls_to_pixels = false
size = Vector2i(450, 2)
size = Vector2i(716, 1248)
size_2d_override_stretch = true
render_target_update_mode = 4
script = ExtResource("9_4xrk7")
Expand Down Expand Up @@ -202,6 +125,84 @@ theme_override_constants/outline_size = 4
theme_override_font_sizes/font_size = 14
horizontal_alignment = 2

[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 2
size_flags_vertical = 0

[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer"]
layout_mode = 2
alignment = 2

[node name="LeftMenu" type="HBoxContainer" parent="PanelContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 2
theme_override_constants/separation = 5

[node name="MoreOptions" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
size_flags_horizontal = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"IconButton"
icon = ExtResource("2_3wliq")
icon_alignment = 1

[node name="Settings" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
size_flags_horizontal = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"IconButton"
icon = ExtResource("3_0w618")
icon_alignment = 1

[node name="Reference" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
size_flags_horizontal = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"IconButton"
icon = ExtResource("4_2hiq7")
icon_alignment = 1

[node name="Visuals" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
size_flags_horizontal = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"IconButton"
icon = ExtResource("4_n3qjt")
icon_alignment = 1

[node name="Snapping" type="HBoxContainer" parent="PanelContainer/HBoxContainer/LeftMenu"]
layout_mode = 2
theme_override_constants/separation = 0

[node name="SnapButton" type="Button" parent="PanelContainer/HBoxContainer/LeftMenu/Snapping"]
layout_mode = 2
focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"RightConnectedButton"
toggle_mode = true
icon = ExtResource("5_1k2cq")
script = ExtResource("6_3v3ve")
hover_pressed_stylebox = SubResource("StyleBoxFlat_eujxa")

[node name="SnapNumberEdit" parent="PanelContainer/HBoxContainer/LeftMenu/Snapping" instance=ExtResource("7_wrrfr")]
custom_minimum_size = Vector2(48, 22)
layout_mode = 2
theme_type_variation = &"LeftConnectedLineEdit"
max_length = 20
editable = false
min_value = 0.001
allow_lower = false

[node name="ZoomMenu" parent="PanelContainer/HBoxContainer" instance=ExtResource("8_xtdmn")]
unique_name_in_owner = true
layout_mode = 2

[connection signal="size_changed" from="ViewportPanel/ViewportContainer/Viewport" to="ViewportPanel/ViewportContainer/Viewport" method="_on_size_changed"]
[connection signal="pressed" from="PanelContainer/HBoxContainer/LeftMenu/MoreOptions" to="." method="_on_more_options_pressed"]
[connection signal="pressed" from="PanelContainer/HBoxContainer/LeftMenu/Settings" to="." method="_on_settings_pressed"]
[connection signal="pressed" from="PanelContainer/HBoxContainer/LeftMenu/Reference" to="." method="_on_reference_pressed"]
Expand All @@ -210,4 +211,3 @@ horizontal_alignment = 2
[connection signal="value_changed" from="PanelContainer/HBoxContainer/LeftMenu/Snapping/SnapNumberEdit" to="." method="_on_snap_number_edit_value_changed"]
[connection signal="zoom_changed" from="PanelContainer/HBoxContainer/ZoomMenu" to="ViewportPanel/ViewportContainer/Viewport" method="_on_zoom_changed"]
[connection signal="zoom_reset_pressed" from="PanelContainer/HBoxContainer/ZoomMenu" to="ViewportPanel/ViewportContainer/Viewport" method="center_frame"]
[connection signal="size_changed" from="ViewportPanel/ViewportContainer/Viewport" to="ViewportPanel/ViewportContainer/Viewport" method="_on_size_changed"]
Loading
Loading