From b9c32abaa3b1e42b4fd9182593d47f1a594408b3 Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Wed, 17 Jun 2026 23:16:56 -0700 Subject: [PATCH 01/10] remove unnecessary preloads in gui --- standalone/gdre_main.gd | 3 --- standalone/gdre_patch_pck.gd | 1 - 2 files changed, 4 deletions(-) diff --git a/standalone/gdre_main.gd b/standalone/gdre_main.gd index 13391c7e0..0ae0bb227 100644 --- a/standalone/gdre_main.gd +++ b/standalone/gdre_main.gd @@ -8,9 +8,6 @@ var CONFIG_PATH = "user://gdre_settings.cfg" # var isHiDPI = DisplayServer.screen_get_dpi() >= 240 var isHiDPI = false -var gdre_recover = preload("res://gdre_recover.tscn") -var gdre_new_pck = preload("res://gdre_new_pck.tscn") -var gdre_patch_pck = preload("res://gdre_patch_pck.tscn") @onready var RECOVERY_DIALOG: GDRERecoverDialog = %GdreRecover @onready var NEW_PCK_DIALOG: GDRENewPck = %GdreNewPck @onready var PATCH_PCK_DIALOG: GDREPatchPCK = %GdrePatchPck diff --git a/standalone/gdre_patch_pck.gd b/standalone/gdre_patch_pck.gd index aa348a5e9..fe6cca873 100644 --- a/standalone/gdre_patch_pck.gd +++ b/standalone/gdre_patch_pck.gd @@ -4,7 +4,6 @@ extends GDREChildDialog const file_icon: Texture2D = preload("res://gdre_icons/gdre_File.svg") const file_ok: Texture2D = preload("res://gdre_icons/gdre_FileOk.svg") const file_broken: Texture2D = preload("res://gdre_icons/gdre_FileBroken.svg") -const gdre_export_report = preload("res://gdre_export_report.tscn") const gdre_file_tree = preload("res://gdre_file_tree.gd") var arrow_right: Texture2D = get_theme_icon("arrow_collapsed", "Tree") var select_button: Texture2D = get_theme_icon("select_option", "Tree") From c686cff27d42c98b283be2ee1da5bf1e6b353652 Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Wed, 17 Jun 2026 23:16:56 -0700 Subject: [PATCH 02/10] gdre_file_tree: allow custom right click items to have is_applicable callable checks --- standalone/gdre_file_tree.gd | 45 +++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/standalone/gdre_file_tree.gd b/standalone/gdre_file_tree.gd index f71e94cbe..d820e2f3e 100644 --- a/standalone/gdre_file_tree.gd +++ b/standalone/gdre_file_tree.gd @@ -133,8 +133,19 @@ var num_malformed:int = 0 var right_click_menu: PopupMenu = null var right_clicked_item: TreeItem = null -var custom_right_click_map: Dictionary[int, String] = {} -var custom_right_click_items: Dictionary[String, Callable] = {} +class CustomRightClickItem: + var id: int + var text: String + var callable: Callable + var is_applicable: Callable + + func _init(id: int, text: String, callable: Callable, check_callable: Callable): + self.id = id + self.text = text + self.callable = callable + self.is_applicable = check_callable + +var custom_right_click_map: Dictionary[int, CustomRightClickItem] = {} enum { @@ -149,8 +160,8 @@ enum { var last_open_id = POPUP_CUSTOM_SEPERATOR + 1 var current_sort = SortType.SORT_NAME_ASCENDING -func get_highlighted_items() -> Array: - var highlighted_items = [] +func get_highlighted_items() -> Array[TreeItem]: + var highlighted_items: Array[TreeItem] = [] if (select_mode == SELECT_MULTI): var item = self.get_next_selected(get_root()) while (item): @@ -181,15 +192,10 @@ func items_has_folder(items: Array) -> bool: return true return false - -# Right click stuff - - -func add_custom_right_click_item(text: String, callable: Callable): +func add_custom_right_click_item(text: String, callable: Callable, check_callable: Callable = func(_items: Array[TreeItem]) -> bool: return true): var id = last_open_id last_open_id += 1 - custom_right_click_map[id] = text - custom_right_click_items[text] = callable + custom_right_click_map[id] = CustomRightClickItem.new(id, text, callable, check_callable) func _on_gui_input(input:InputEvent): if input is InputEventKey: @@ -258,7 +264,7 @@ func _on_item_right_clicked(): var has_folder = false clear_right_click_state() - var selected_items = get_highlighted_items() + var selected_items: Array[TreeItem] = get_highlighted_items() right_clicked_item = self.get_item_at_position(get_local_mouse_position()) if (not right_clicked_item_is_selected(selected_items)): set_right_clicked_outline_color(false) @@ -270,7 +276,7 @@ func _on_item_right_clicked(): has_folder = true if (selected_items.size() > 1): plural = true - pop_right_menu_items(check_name, plural, has_folder) + pop_right_menu_items(check_name, plural, has_folder, selected_items) right_click_menu.position = DisplayServer.mouse_get_position() right_click_menu.visible = true @@ -323,16 +329,13 @@ func _on_right_click_id(id): set_fold_all(item, false, true) _: if custom_right_click_map.has(id): - var text = custom_right_click_map.get(id) - if custom_right_click_items.has(text): - var callable = custom_right_click_items.get(text) - callable.call(selected_items) + custom_right_click_map.get(id).callable.call(selected_items) func _on_right_click_visibility_changed(): if not right_click_menu.visible: set_right_clicked_outline_color(true) -func pop_right_menu_items(check_name: String = "Item", plural: bool = false, has_folder: bool = false): +func pop_right_menu_items(check_name: String = "Item", plural: bool = false, has_folder: bool = false, selected_items: Array[TreeItem] = []): right_click_menu.clear(true) right_click_menu.reset_size() if self.show_copy_paths_in_right_click_menu: @@ -355,9 +358,9 @@ func pop_right_menu_items(check_name: String = "Item", plural: bool = false, has if custom_right_click_map.size() > 0: if right_click_menu.get_item_count() != 0: right_click_menu.add_separator("", POPUP_CUSTOM_SEPERATOR) - for id in custom_right_click_map.keys(): - var text = custom_right_click_map.get(id) - right_click_menu.add_item(text, id) + for crc in custom_right_click_map.values(): + if crc.is_applicable.call(selected_items): + right_click_menu.add_item(crc.text, crc.id) # ** CHECK PROPAGATION From 4747ba09d270715f426412083bf04fe6f2801c57 Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Wed, 17 Jun 2026 23:16:56 -0700 Subject: [PATCH 03/10] clean up gdre_media_player --- standalone/gdre_media_player.gd | 53 ++++----- standalone/gdre_media_player.tscn | 186 +++++++++++++++++------------- 2 files changed, 133 insertions(+), 106 deletions(-) diff --git a/standalone/gdre_media_player.gd b/standalone/gdre_media_player.gd index 6b0268fa3..c3efd8994 100644 --- a/standalone/gdre_media_player.gd +++ b/standalone/gdre_media_player.gd @@ -1,18 +1,19 @@ class_name GDREMediaPlayer extends Control -var AUDIO_PLAYER: Control = null -var TIME_LABEL: Label = null -var AUDIO_PLAYER_STREAM: AudioStreamPlayer = null -var VIDEO_PLAYER_STREAM: VideoStreamPlayer = null -var VIDEO_VIEW_BOX: Control = null -var VIDEO_ASPECT_RATIO_CONTAINER: AspectRatioContainer = null -var AUDIO_PREVIEW_BOX = null -var AUDIO_VIEW_BOX: Control = null -var AUDIO_STREAM_INFO: Label = null -var PROGRESS_BAR: Slider = null -var PLAY_BUTTON: Button = null -var PAUSE_BUTTON: Button = null -var STOP_BUTTON: Button = null + +@onready var TIME_LABEL: Label = %TimeLabel +@onready var PROGRESS_BAR: Slider = %ProgressBar +@onready var PLAY_BUTTON: Button = %Play +@onready var PAUSE_BUTTON: Button = %Pause +@onready var STOP_BUTTON: Button = %Stop +@onready var AUDIO_PLAYER_STREAM: AudioStreamPlayer = %AudioStreamPlayer +@onready var AUDIO_PREVIEW_BOX: Control = %AudioPreviewBox +@onready var AUDIO_VIEW_BOX: Control = %AudioViewBox +@onready var AUDIO_STREAM_INFO: Label = %AudioStreamInfo +@onready var VIDEO_PLAYER_STREAM: VideoStreamPlayer = %VideoStreamPlayer +@onready var VIDEO_VIEW_BOX: Control = %VideoViewBox +@onready var VIDEO_ASPECT_RATIO_CONTAINER: AspectRatioContainer = %AspectRatioContainer + var controller: PlayerController = null var dragging_slider: bool = false var last_updated_time: float = 0 @@ -249,9 +250,13 @@ func load_video(path): if not is_supported_video_format(path): return false var video_stream: VideoStream = ResourceCompatLoader.real_load(path, "", ResourceCompatLoader.CACHE_MODE_IGNORE_DEEP) + return load_video_stream(video_stream) + + +func load_video_stream(video_stream: VideoStream): + reset() if (video_stream == null): return false - reset() VIDEO_VIEW_BOX.visible = true VIDEO_PLAYER_STREAM.stream = video_stream VIDEO_PLAYER_STREAM.expand = false @@ -277,9 +282,13 @@ func load_sample(path): audio_stream = AudioStreamOggVorbis.load_from_file(path) elif ext == "mp3": audio_stream = AudioStreamMP3.load_from_file(path) + + return load_audio_stream(audio_stream) + +func load_audio_stream(audio_stream: AudioStream): + reset() if (audio_stream == null): return false - reset() AUDIO_VIEW_BOX.visible = true AUDIO_PLAYER_STREAM.stream = audio_stream controller = AudioPlayerController.new(AUDIO_PLAYER_STREAM) @@ -419,18 +428,6 @@ func _on_audio_preview_box_pos_changed(value: float) -> void: update_text_label() func _ready(): - TIME_LABEL = get_node("BarHBox/TimeLabel") - PROGRESS_BAR = get_node("BarHBox/ProgressBar") - PLAY_BUTTON = get_node("MediaControlsHBox/Play") - PAUSE_BUTTON = get_node("MediaControlsHBox/Pause") - STOP_BUTTON = get_node("MediaControlsHBox/Stop") - AUDIO_PLAYER_STREAM = get_node("AudioStreamPlayer") - AUDIO_PREVIEW_BOX = get_node("AudioViewBox/AudioPreviewBox") - AUDIO_VIEW_BOX = get_node("AudioViewBox") - AUDIO_STREAM_INFO = get_node("AudioViewBox/AudioStreamInfo") - VIDEO_PLAYER_STREAM = get_node("VideoViewBox/AspectRatioContainer/VideoStreamPlayer") - VIDEO_VIEW_BOX = get_node("VideoViewBox") - VIDEO_ASPECT_RATIO_CONTAINER = get_node("VideoViewBox/AspectRatioContainer") # connect signals PROGRESS_BAR.connect("drag_started", self._on_slider_drag_started) PROGRESS_BAR.connect("drag_ended", self._on_slider_drag_ended) @@ -446,7 +443,7 @@ func _ready(): STOP_BUTTON.icon = stop_icon reset() - #load_media("/Users/nikita/Desktop/_test_individual_export/Door_OGV.ogv") + # load_media("/Users/nikita/Workspace/godot-ws/test-decomps/_test_files/Door_OGV.ogv") #load_media("/Users/nikita/Desktop/_test_individual_export/gearhead.ogv") #load_media("/Users/nikita/Downloads/4K_resolution_sample.ogv") # load_media('/Users/nikita/Desktop/_test_individual_export/A moment of silent.ogg') diff --git a/standalone/gdre_media_player.tscn b/standalone/gdre_media_player.tscn index d804852fb..43e8bccda 100644 --- a/standalone/gdre_media_player.tscn +++ b/standalone/gdre_media_player.tscn @@ -7,6 +7,8 @@ [ext_resource type="Texture2D" uid="uid://b2l0m3p42t05e" path="res://gdre_icons/gdre_Pause.svg" id="3_ykcsx"] [ext_resource type="Texture2D" uid="uid://cdhnddtchuo2h" path="res://gdre_icons/gdre_Stop.svg" id="4_hkamq"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ykcsx"] + [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wtasi"] bg_color = Color(0, 0, 0, 1) @@ -20,84 +22,40 @@ grow_vertical = 2 theme = ExtResource("1_ykcsx") script = ExtResource("1_3jmtn") -[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=1239073489] - -[node name="BarHBox" type="HBoxContainer" parent="." unique_id=194730088] +[node name="MainMarginContainer" type="MarginContainer" parent="." unique_id=117012998] layout_mode = 1 -anchors_preset = -1 -anchor_left = 0.033 -anchor_top = 1.0 -anchor_right = 0.954 -anchor_bottom = 1.0 -offset_left = -0.0159988 -offset_top = -89.0 -offset_right = 0.991943 -offset_bottom = -58.0 - -[node name="TimeLabel" type="Label" parent="BarHBox" unique_id=312598558] -layout_mode = 2 -layout_direction = 2 -text = "0:00.0 / 0:00.0" -horizontal_alignment = 2 -vertical_alignment = 1 - -[node name="Spacer" type="Label" parent="BarHBox" unique_id=382946252] -layout_mode = 2 -text = " " - -[node name="ProgressBar" type="HSlider" parent="BarHBox" unique_id=1975088300] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 4 -step = 0.1 - -[node name="MediaControlsHBox" type="HBoxContainer" parent="." unique_id=134619065] -layout_mode = 1 -anchors_preset = -1 -anchor_left = 0.5 -anchor_top = 1.0 -anchor_right = 0.5 +anchors_preset = 15 +anchor_right = 1.0 anchor_bottom = 1.0 -offset_left = -64.0 -offset_top = -61.0 -offset_right = 64.0 -offset_bottom = -11.0 grow_horizontal = 2 -grow_vertical = 0 -alignment = 1 +grow_vertical = 2 +theme_override_constants/margin_bottom = 20 -[node name="Play" type="Button" parent="MediaControlsHBox" unique_id=1724807303] +[node name="VBoxContainer" type="VBoxContainer" parent="MainMarginContainer" unique_id=678703902] layout_mode = 2 -theme_type_variation = &"FlatButton" -icon = ExtResource("2_u82do") -flat = true -[node name="Pause" type="Button" parent="MediaControlsHBox" unique_id=191127019] +[node name="TabContainer" type="TabContainer" parent="MainMarginContainer/VBoxContainer" unique_id=1158548116] layout_mode = 2 -size_flags_horizontal = 6 -theme_type_variation = &"FlatButton" -disabled = true -icon = ExtResource("3_ykcsx") -flat = true +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxEmpty_ykcsx") +current_tab = 0 +tabs_visible = false -[node name="Stop" type="Button" parent="MediaControlsHBox" unique_id=2131331742] +[node name="DefaultBox" type="Control" parent="MainMarginContainer/VBoxContainer/TabContainer" unique_id=923543433] +unique_name_in_owner = true layout_mode = 2 -theme_type_variation = &"FlatButton" -icon = ExtResource("4_hkamq") -flat = true +size_flags_vertical = 3 +metadata/_tab_index = 0 -[node name="AudioViewBox" type="Control" parent="." unique_id=1368951095] +[node name="AudioViewBox" type="Control" parent="MainMarginContainer/VBoxContainer/TabContainer" unique_id=1368951095] +unique_name_in_owner = true visible = false -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = -1.0 -offset_bottom = -103.0 -grow_horizontal = 2 -grow_vertical = 2 +layout_mode = 2 +size_flags_vertical = 3 +metadata/_tab_index = 1 -[node name="AudioPreviewBox" type="ColorRect" parent="AudioViewBox" unique_id=828882885] +[node name="AudioPreviewBox" type="ColorRect" parent="MainMarginContainer/VBoxContainer/TabContainer/AudioViewBox" unique_id=828882885] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -108,7 +66,8 @@ color = Color(0.129412, 0.14902, 0.176471, 1) script = ExtResource("3_ooril") metadata/_custom_type_script = "uid://qmyh4wh5voec" -[node name="AudioStreamInfo" type="Label" parent="AudioViewBox" unique_id=561309970] +[node name="AudioStreamInfo" type="Label" parent="MainMarginContainer/VBoxContainer/TabContainer/AudioViewBox" unique_id=561309970] +unique_name_in_owner = true layout_mode = 1 anchors_preset = -1 anchor_left = 1.0 @@ -127,16 +86,18 @@ theme_override_font_sizes/font_size = 14 text = "Sampling Rate: 48000 Loop: No" -[node name="VideoViewBox" type="Control" parent="." unique_id=1323826717] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_bottom = -103.0 -grow_horizontal = 2 -grow_vertical = 2 +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="MainMarginContainer/VBoxContainer/TabContainer/AudioViewBox" unique_id=1239073489] +unique_name_in_owner = true + +[node name="VideoViewBox" type="Control" parent="MainMarginContainer/VBoxContainer/TabContainer" unique_id=1323826717] +unique_name_in_owner = true +visible = false +layout_mode = 2 +size_flags_vertical = 3 +metadata/_tab_index = 2 -[node name="AspectRatioContainer" type="AspectRatioContainer" parent="VideoViewBox" unique_id=232503494] +[node name="AspectRatioContainer" type="AspectRatioContainer" parent="MainMarginContainer/VBoxContainer/TabContainer/VideoViewBox" unique_id=232503494] +unique_name_in_owner = true clip_contents = true layout_mode = 1 anchors_preset = 15 @@ -146,11 +107,80 @@ grow_horizontal = 2 grow_vertical = 2 ratio = 1.7778 -[node name="BG" type="Panel" parent="VideoViewBox/AspectRatioContainer" unique_id=1349121247] +[node name="BG" type="Panel" parent="MainMarginContainer/VBoxContainer/TabContainer/VideoViewBox/AspectRatioContainer" unique_id=1349121247] +unique_name_in_owner = true layout_mode = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_wtasi") -[node name="VideoStreamPlayer" type="VideoStreamPlayer" parent="VideoViewBox/AspectRatioContainer" unique_id=824291810] +[node name="VideoStreamPlayer" type="VideoStreamPlayer" parent="MainMarginContainer/VBoxContainer/TabContainer/VideoViewBox/AspectRatioContainer" unique_id=824291810] +unique_name_in_owner = true custom_minimum_size = Vector2(16, 9) layout_mode = 2 expand = true + +[node name="BarMarginContainer" type="MarginContainer" parent="MainMarginContainer/VBoxContainer" unique_id=1048638154] +layout_mode = 2 +theme_override_constants/margin_left = 40 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 40 +theme_override_constants/margin_bottom = 0 + +[node name="BarHBox" type="HBoxContainer" parent="MainMarginContainer/VBoxContainer/BarMarginContainer" unique_id=194730088] +unique_name_in_owner = true +layout_mode = 2 + +[node name="TimeLabel" type="Label" parent="MainMarginContainer/VBoxContainer/BarMarginContainer/BarHBox" unique_id=312598558] +unique_name_in_owner = true +layout_mode = 2 +layout_direction = 2 +text = "0:00.0 / 0:00.0" +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="Spacer" type="Label" parent="MainMarginContainer/VBoxContainer/BarMarginContainer/BarHBox" unique_id=382946252] +layout_mode = 2 +text = " " + +[node name="ProgressBar" type="HSlider" parent="MainMarginContainer/VBoxContainer/BarMarginContainer/BarHBox" unique_id=1975088300] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +step = 0.1 + +[node name="MediaControlsHBox" type="HBoxContainer" parent="MainMarginContainer/VBoxContainer" unique_id=134619065] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +alignment = 1 + +[node name="Play" type="Button" parent="MainMarginContainer/VBoxContainer/MediaControlsHBox" unique_id=1724807303] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"FlatButton" +icon = ExtResource("2_u82do") +flat = true + +[node name="Spacer" type="Control" parent="MainMarginContainer/VBoxContainer/MediaControlsHBox" unique_id=1124725233] +custom_minimum_size = Vector2(10, 0) +layout_mode = 2 + +[node name="Pause" type="Button" parent="MainMarginContainer/VBoxContainer/MediaControlsHBox" unique_id=191127019] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 6 +theme_type_variation = &"FlatButton" +disabled = true +icon = ExtResource("3_ykcsx") +flat = true + +[node name="Spacer2" type="Control" parent="MainMarginContainer/VBoxContainer/MediaControlsHBox" unique_id=1566507677] +custom_minimum_size = Vector2(10, 0) +layout_mode = 2 + +[node name="Stop" type="Button" parent="MainMarginContainer/VBoxContainer/MediaControlsHBox" unique_id=2131331742] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"FlatButton" +icon = ExtResource("4_hkamq") +flat = true From 7cde6a1b19322a2d79d2dd8405ffd6de7847acd9 Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Wed, 17 Jun 2026 23:16:56 -0700 Subject: [PATCH 04/10] make GDRESettings::get_auto_display_scale() static --- gui/find_replace_bar.cpp | 4 ++-- gui/gdre_progress.cpp | 4 ++-- gui/mesh_previewer.cpp | 2 +- gui/scene_previewer.cpp | 2 +- utility/gdre_settings.cpp | 4 ++-- utility/gdre_settings.h | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/gui/find_replace_bar.cpp b/gui/find_replace_bar.cpp index 5dc02abfc..c38c6dc27 100644 --- a/gui/find_replace_bar.cpp +++ b/gui/find_replace_bar.cpp @@ -1016,7 +1016,7 @@ GDREFindReplaceBar::GDREFindReplaceBar() { search_text->set_placeholder(TTRC("Find")); search_text->set_tooltip_text(TTRC("Find")); search_text->set_accessibility_name(TTRC("Find")); - search_text->set_custom_minimum_size(Size2(100 * GDRESettings::get_singleton()->get_auto_display_scale(), 0)); + search_text->set_custom_minimum_size(Size2(100 * GDRESettings::get_auto_display_scale(), 0)); search_text->connect(SceneStringName(text_changed), callable_mp(this, &GDREFindReplaceBar::_search_text_changed)); search_text->connect(SceneStringName(text_submitted), callable_mp(this, &GDREFindReplaceBar::_search_text_submitted)); @@ -1077,7 +1077,7 @@ GDREFindReplaceBar::GDREFindReplaceBar() { replace_text->set_placeholder(TTRC("Replace")); replace_text->set_tooltip_text(TTRC("Replace")); replace_text->set_accessibility_name(TTRC("Replace")); - replace_text->set_custom_minimum_size(Size2(100 * GDRESettings::get_singleton()->get_auto_display_scale(), 0)); + replace_text->set_custom_minimum_size(Size2(100 * GDRESettings::get_auto_display_scale(), 0)); replace_text->connect(SceneStringName(text_submitted), callable_mp(this, &GDREFindReplaceBar::_replace_text_submitted)); Control *replace_text_spacer = memnew(Control); diff --git a/gui/gdre_progress.cpp b/gui/gdre_progress.cpp index 50f5e0fdd..e690b8226 100644 --- a/gui/gdre_progress.cpp +++ b/gui/gdre_progress.cpp @@ -62,7 +62,7 @@ void GDREBackgroundProgress::_add_task(const String &p_task, const String &p_lab ec->set_v_size_flags(SIZE_EXPAND_FILL); t.progress->set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT); ec->add_child(t.progress); - ec->set_custom_minimum_size(Size2(80, 5) * GDRESettings::get_singleton()->get_auto_display_scale()); + ec->set_custom_minimum_size(Size2(80, 5) * GDRESettings::get_auto_display_scale()); t.hb->add_child(ec); add_child(t.hb); @@ -305,7 +305,7 @@ void GDREProgressDialog::_reparent_and_show() { } Size2 ms = main->get_combined_minimum_size(); - ms.width = MAX(500 * GDRESettings::get_singleton()->get_auto_display_scale(), ms.width); + ms.width = MAX(500 * GDRESettings::get_auto_display_scale(), ms.width); Ref style = main->get_theme_stylebox(SceneStringName(panel), SNAME("PopupMenu")); ms += style->get_minimum_size(); diff --git a/gui/mesh_previewer.cpp b/gui/mesh_previewer.cpp index dfc30d295..882111c56 100644 --- a/gui/mesh_previewer.cpp +++ b/gui/mesh_previewer.cpp @@ -169,7 +169,7 @@ MeshPreviewer::MeshPreviewer() { mesh_instance = memnew(MeshInstance3D); rotation->add_child(mesh_instance); - set_custom_minimum_size(Size2(1, 150) * GDRESettings::get_singleton()->get_auto_display_scale()); + set_custom_minimum_size(Size2(1, 150) * GDRESettings::get_auto_display_scale()); HBoxContainer *hb = memnew(HBoxContainer); add_child(hb); diff --git a/gui/scene_previewer.cpp b/gui/scene_previewer.cpp index d234813ed..878a05900 100644 --- a/gui/scene_previewer.cpp +++ b/gui/scene_previewer.cpp @@ -213,7 +213,7 @@ void ScenePreviewer3D::setup_3d() { rotation = memnew(Node3D); viewport->add_child(rotation); - set_custom_minimum_size(Size2(1, 150) * GDRESettings::get_singleton()->get_auto_display_scale()); + set_custom_minimum_size(Size2(1, 150) * GDRESettings::get_auto_display_scale()); HBoxContainer *hb = memnew(HBoxContainer); add_child(hb); diff --git a/utility/gdre_settings.cpp b/utility/gdre_settings.cpp index b2603d7db..d54515f53 100644 --- a/utility/gdre_settings.cpp +++ b/utility/gdre_settings.cpp @@ -1895,7 +1895,7 @@ bool GDRESettings::is_headless() const { return headless; } -float GDRESettings::get_auto_display_scale() const { +float GDRESettings::get_auto_display_scale() { #ifdef LINUXBSD_ENABLED if (DisplayServer::get_singleton()->get_name() == "Wayland") { float main_window_scale = DisplayServer::get_singleton()->screen_get_scale(DisplayServerEnums::SCREEN_OF_MAIN_WINDOW); @@ -3170,7 +3170,7 @@ void GDRESettings::_bind_methods() { ClassDB::bind_method(D_METHOD("get_disclaimer_text"), &GDRESettings::get_disclaimer_text); ClassDB::bind_static_method(get_class_static(), D_METHOD("get_home_dir"), &GDRESettings::get_home_dir); ClassDB::bind_method(D_METHOD("get_errors"), &GDRESettings::get_errors); - ClassDB::bind_method(D_METHOD("get_auto_display_scale"), &GDRESettings::get_auto_display_scale); + ClassDB::bind_static_method(get_class_static(), D_METHOD("get_auto_display_scale"), &GDRESettings::get_auto_display_scale); ClassDB::bind_method(D_METHOD("set_dotnet_assembly_path", "p_path"), &GDRESettings::set_dotnet_assembly_path); ClassDB::bind_method(D_METHOD("get_dotnet_assembly_path"), &GDRESettings::get_dotnet_assembly_path); ClassDB::bind_method(D_METHOD("get_dotnet_decompiler"), &GDRESettings::get_dotnet_decompiler); diff --git a/utility/gdre_settings.h b/utility/gdre_settings.h index 4e07ea685..612a1e011 100644 --- a/utility/gdre_settings.h +++ b/utility/gdre_settings.h @@ -348,7 +348,7 @@ class GDRESettings : public Object { bool pack_has_project_config() const; // A copy of `EditorSettings::get_auto_display_scale()`, copied here for non-editor builds // Gets the auto display scale for native GUI elements (gdre_progress, etc.) - float get_auto_display_scale() const; + static float get_auto_display_scale(); static String get_gdre_version(); String get_disclaimer_text() const; static String get_disclaimer_body(); From 2617584c2303615eb08c377b7522aeb359fb41ea Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Wed, 17 Jun 2026 23:16:56 -0700 Subject: [PATCH 05/10] Enable HiDPI support --- gui/gdre_progress.cpp | 4 ++++ gui/gdre_standalone.cpp | 9 ++++++++ gui/gdre_window.cpp | 42 ++++++++++++++++++++++++++++++++++++ gui/gdre_window.h | 6 ++++++ gui/gui_icons.cpp | 21 ++++++------------ gui/gui_icons.h | 8 +++---- register_types.cpp | 6 ++++++ standalone/gdre_decompile.gd | 2 +- standalone/gdre_recover.gd | 2 +- 9 files changed, 79 insertions(+), 21 deletions(-) diff --git a/gui/gdre_progress.cpp b/gui/gdre_progress.cpp index e690b8226..47368fa9b 100644 --- a/gui/gdre_progress.cpp +++ b/gui/gdre_progress.cpp @@ -30,6 +30,8 @@ #include "gui/gdre_progress.h" +#include "gui/gdre_window.h" + #include "core/object/callable_mp.h" #include "core/object/class_db.h" #include "core/os/os.h" @@ -146,6 +148,8 @@ void GDREProgressDialog::_update_ui() { void GDREProgressDialog::_notification(int p_what) { if (p_what == NOTIFICATION_PROCESS) { main_thread_update(); + } else if (p_what == NOTIFICATION_READY) { + GDREWindow::set_window_autoscaling(this, get_min_size()); } } diff --git a/gui/gdre_standalone.cpp b/gui/gdre_standalone.cpp index 502756157..1c5679027 100644 --- a/gui/gdre_standalone.cpp +++ b/gui/gdre_standalone.cpp @@ -8,7 +8,9 @@ #include "scene/gui/dialogs.h" #include "scene/gui/rich_text_label.h" #include "scene/main/node.h" +#include "scene/main/scene_tree.h" #include "utility/gdre_logger.h" +#include "utility/gdre_settings.h" #include "utility/gdre_version.gen.h" GodotREEditorStandalone *GodotREEditorStandalone::singleton = nullptr; @@ -155,6 +157,13 @@ void GodotREEditorStandalone::_notification(int p_notification) { if (get_parent_window()) { get_parent_window()->call_deferred("add_child", error_dialog); get_parent_window()->call_deferred("add_child", confirmation_dialog); + if (!Engine::get_singleton()->is_editor_hint()) { + Window *main_window = get_parent_window(); + Size2i min_size = Size2i(GLOBAL_GET("display/window/size/viewport_width"), GLOBAL_GET("display/window/size/viewport_height")); + GDREWindow::set_window_autoscaling(main_window, min_size); + main_window->set_size(min_size * GDRESettings::get_auto_display_scale()); + main_window->move_to_center(); + } } } if (p_notification == NOTIFICATION_PROCESS) { diff --git a/gui/gdre_window.cpp b/gui/gdre_window.cpp index 407be2be8..583941bb7 100644 --- a/gui/gdre_window.cpp +++ b/gui/gdre_window.cpp @@ -1,6 +1,10 @@ #include "gdre_window.h" #include "gui/gdre_progress.h" +#include "scene/main/node.h" +#include "scene/main/window.h" +#include "utility/gdre_settings.h" +#include "core/config/engine.h" #include "core/object/class_db.h" void GDREWindow::popup_box(Node *p_parent, Window *p_box, const String &p_message, const String &p_title, const Callable &p_confirm_callback, const Callable &p_cancel_callback, const String &p_ok_button_text, const String &p_cancel_button_text) { @@ -45,6 +49,38 @@ void GDREWindow::popup_box(Node *p_parent, Window *p_box, const String &p_messag p_box->popup_centered(); } +void GDREWindow::set_window_autoscaling(Window *p_window, Size2i p_min_size) { + ERR_FAIL_NULL(p_window); + if (Engine::get_singleton()->is_editor_hint()) { + return; + } + float current_scale = p_window->get_content_scale_factor(); + float auto_display_scale = GDRESettings::get_auto_display_scale(); + if (auto_display_scale != 1.0 && auto_display_scale != current_scale) { + p_window->set_content_scale_factor(auto_display_scale); + } + bool no_min = p_min_size == Size2i(); + float size_scale = auto_display_scale / current_scale; + Size2i new_min_size = Size2i(float(p_min_size.x) * size_scale, float(p_min_size.y) * size_scale); + + if (!no_min && p_window->get_min_size() != new_min_size) { + p_window->set_min_size(new_min_size); + } + + Size2i current_size = p_window->get_size(); + Size2i new_size = no_min ? Size2i(float(current_size.x) * size_scale, float(current_size.y) * size_scale) : new_min_size; + if (no_min || current_size < new_size) { + p_window->set_size(new_size); + } + p_window->set_oversampling_override(auto_display_scale); +} + +void GDREWindow::_notification(int p_what) { + if (p_what == NOTIFICATION_ENTER_TREE) { + GDREWindow::set_window_autoscaling(this, get_min_size()); + } +} + GDREWindow::GDREWindow() { if (GDREProgressDialog::get_singleton()) { GDREProgressDialog::get_singleton()->add_host_window(this); @@ -93,6 +129,12 @@ void GDREAcceptDialogBase::popup_error_box(const String &p_message, const String GDREWindow::popup_box(this, error_dialog, p_message, p_title, p_callback, p_callback); } +void GDREAcceptDialogBase::_notification(int p_what) { + if (p_what == NOTIFICATION_ENTER_TREE) { + GDREWindow::set_window_autoscaling(this, get_min_size()); + } +} + void GDREWindow::_bind_methods() { ClassDB::bind_static_method(get_class_static(), D_METHOD("popup_box", "p_parent", "p_box", "p_message", "p_title", "p_confirm_callback", "p_cancel_callback", "p_ok_button_text", "p_cancel_button_text"), &GDREWindow::popup_box, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL("OK"), DEFVAL("Cancel")); ClassDB::bind_method(D_METHOD("popup_confirm_box", "p_message", "p_title", "p_confirm_callback", "p_cancel_callback", "p_ok_button_text", "p_cancel_button_text"), &GDREWindow::popup_confirm_box, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL("OK"), DEFVAL("Cancel")); diff --git a/gui/gdre_window.h b/gui/gdre_window.h index cef944fa7..1c751ec2d 100644 --- a/gui/gdre_window.h +++ b/gui/gdre_window.h @@ -1,6 +1,7 @@ #pragma once #include "scene/gui/dialogs.h" +#include "scene/main/scene_tree.h" #include "scene/main/window.h" class GDREWindow : public Window { @@ -13,7 +14,10 @@ class GDREWindow : public Window { protected: static void _bind_methods(); + void _notification(int p_what); + public: + static void set_window_autoscaling(Window *p_window, Size2i p_min_size); static void popup_box(Node *p_parent, Window *p_box, const String &p_message, const String &p_title, const Callable &p_confirm_callback = {}, const Callable &p_cancel_callback = {}, const String &p_ok_button_text = "OK", const String &p_cancel_button_text = "Cancel"); void popup_confirm_box(const String &p_message, const String &p_title, const Callable &p_confirm_callback = Callable(), const Callable &p_cancel_callback = Callable(), const String &p_ok_button_text = "OK", const String &p_cancel_button_text = "Cancel"); @@ -31,6 +35,8 @@ class GDREAcceptDialogBase : public AcceptDialog { protected: static void _bind_methods(); + void _notification(int p_what); + public: void popup_confirm_box(const String &p_message, const String &p_title, const Callable &p_confirm_callback = Callable(), const Callable &p_cancel_callback = Callable(), const String &p_ok_button_text = "OK", const String &p_cancel_button_text = "Cancel"); void popup_error_box(const String &p_message, const String &p_title = "Error", const Callable &p_callback = Callable()); diff --git a/gui/gui_icons.cpp b/gui/gui_icons.cpp index 1afb5bbb7..570ddd7e0 100644 --- a/gui/gui_icons.cpp +++ b/gui/gui_icons.cpp @@ -1,6 +1,7 @@ #include "gui_icons.h" #include "gui/gdre_icons.gen.h" #include "scene/gui/control.h" +#include "scene/resources/dpi_texture.h" #include "scene/resources/image_texture.h" #include "scene/theme/theme_db.h" #ifdef MODULE_SVG_ENABLED @@ -8,25 +9,15 @@ #endif -// HashMap>> GDREGuiIcons::icons; +// HashMap>> GDREGuiIcons::icons; // bool GDREGuiIcons::initialized = false; // BinaryMutex GDREGuiIcons::init_lock; GDREGuiIcons *GDREGuiIcons::singleton = nullptr; namespace { -static inline Ref generate_icon(int p_index, float scale) { +static inline Ref generate_icon(int p_index, float scale) { ERR_FAIL_INDEX_V(p_index, gdre_icons_count, nullptr); - Ref img = memnew(Image); - -#ifdef MODULE_SVG_ENABLED - // Upsample icon generation only if the scale isn't an integer multiplier. - // Generating upsampled icons is slower, and the benefit is hardly visible - // with integer scales. - ImageLoaderSVG img_loader; - img_loader.create_image_from_string(img, gdre_icons_sources[p_index], scale, false, false); -#endif - - return ImageTexture::create_from_image(img); + return DPITexture::create_from_string(gdre_icons_sources[p_index], scale); } } //namespace @@ -39,11 +30,11 @@ int get_icon_index(const StringName &p_name) { return -1; } -Ref GDREGuiIcons::get_icon(const StringName &p_name, float scale) { +Ref GDREGuiIcons::get_icon(const StringName &p_name, float scale) { return singleton->_get_gdre_icon(p_name, scale); } -Ref GDREGuiIcons::_get_gdre_icon(const StringName &p_name, float scale) { +Ref GDREGuiIcons::_get_gdre_icon(const StringName &p_name, float scale) { if (!initialized) { init(); } diff --git a/gui/gui_icons.h b/gui/gui_icons.h index 171a9a27e..0f2ef1c67 100644 --- a/gui/gui_icons.h +++ b/gui/gui_icons.h @@ -1,21 +1,21 @@ #include "core/object/object.h" -#include "scene/resources/image_texture.h" +#include "scene/resources/dpi_texture.h" class Control; class GDREGuiIcons { static GDREGuiIcons *singleton; - HashMap>> icons; + HashMap>> icons; bool initialized = false; Mutex init_lock; void init_for_scale(float scale); void init(); - Ref _get_gdre_icon(const StringName &p_name, float scale = 1.0); + Ref _get_gdre_icon(const StringName &p_name, float scale = 1.0); public: - static Ref get_icon(const StringName &p_name, float scale = 1.0); + static Ref get_icon(const StringName &p_name, float scale = 1.0); static void add_icons_to_theme(Control *p_theme); static GDREGuiIcons *get_singleton(); diff --git a/register_types.cpp b/register_types.cpp index 15b2f8931..394e2e087 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -14,6 +14,7 @@ #include "gui/gdre_standalone.h" #include "gui/texture_layered_previewer.h" #include "modules/regex/regex.h" +#include "modules/register_module_types.h" #include "utility/app_version_getter.h" #include "utility/file_access_gdre.h" #include "utility/file_access_patched_gdre.h" @@ -456,6 +457,11 @@ void initialize_gdsdecomp_module(ModuleInitializationLevel p_level) { if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { return; } + if (!Engine::get_singleton()->is_editor_hint()) { + float scale = GDRESettings::get_auto_display_scale(); + ProjectSettings::get_singleton()->set_setting("display/window/stretch/scale", scale); + } + #ifdef TOOLS_ENABLED ClassDB::register_class(); ClassDB::register_class(); diff --git a/standalone/gdre_decompile.gd b/standalone/gdre_decompile.gd index 3e34eb2ad..115fb257d 100644 --- a/standalone/gdre_decompile.gd +++ b/standalone/gdre_decompile.gd @@ -230,7 +230,7 @@ func _on_show_resource_preview_toggled(toggled_on: bool) -> void: if toggled_on: %BytecodeSelector.fit_to_longest_item = false %GDRETextEditor.visible = true - %MainSplit.set_split_offset(-(self.size.x / 2.0)) + %MainSplit.set_split_offset(-(self.size.x / self.content_scale_factor / 2.0)) %PreviewButton.text = "Hide Preview" else: %BytecodeSelector.fit_to_longest_item = true diff --git a/standalone/gdre_recover.gd b/standalone/gdre_recover.gd index 575c7ba6a..0f4a17495 100644 --- a/standalone/gdre_recover.gd +++ b/standalone/gdre_recover.gd @@ -561,7 +561,7 @@ func _on_show_resource_preview_toggled(toggled_on: bool) -> void: RESOURCE_PREVIEW.visible = true # get the current size of the window # set the split offset to 50% of the window size - HSPLIT_CONTAINER.set_split_offset(self.size.x / 2) + HSPLIT_CONTAINER.set_split_offset((self.size.x / self.content_scale_factor) / 2) SHOW_PREVIEW_BUTTON.text = "Hide Resource Preview" _on_file_tree_item_selected() else: From 5559387ff8d2be11281f36ac25faa659599e8765 Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Wed, 17 Jun 2026 23:16:56 -0700 Subject: [PATCH 06/10] remove remnants of old HiDPI support attempt --- standalone/gdre_child_dialog.gd | 1 - standalone/gdre_export_report.gd | 8 ------ standalone/gdre_file_tree.gd | 2 -- standalone/gdre_main.gd | 47 -------------------------------- standalone/gdre_new_pck.gd | 2 -- standalone/gdre_patch_pck.gd | 7 ----- standalone/gdre_recover.gd | 7 ----- 7 files changed, 74 deletions(-) diff --git a/standalone/gdre_child_dialog.gd b/standalone/gdre_child_dialog.gd index f994eb948..69b0c5afa 100644 --- a/standalone/gdre_child_dialog.gd +++ b/standalone/gdre_child_dialog.gd @@ -3,7 +3,6 @@ extends GDREAcceptDialogBase var POPUP_PARENT_WINDOW: Window = null -var isHiDPI = false static var void_func: Callable = func(): return # MUST CALL set_root_window() first!!! diff --git a/standalone/gdre_export_report.gd b/standalone/gdre_export_report.gd index c2e58e45a..c1a559393 100644 --- a/standalone/gdre_export_report.gd +++ b/standalone/gdre_export_report.gd @@ -12,8 +12,6 @@ var editor_message_default_text: String = "" var log_file_default_text: String = "" var recovery_folder: String = "" -# var isHiDPI = DisplayServer.screen_get_dpi() >= 240 -var isHiDPI = false var root: TreeItem = null var userroot: TreeItem = null var num_files:int = 0 @@ -48,12 +46,6 @@ func _ready(): editor_message_default_text = EDITOR_MESSAGE_LABEL.text log_file_default_text = LOG_FILE_LABEL.text - if isHiDPI: - # get_viewport().size *= 2.0 - # get_viewport().content_scale_factor = 2.0 - #ThemeDB.fallback_base_scale = 2.0 - self.content_scale_factor = 2.0 - self.size *= 2.0 # This is a hack to get around not being able to open multiple scenes # unless they're attached to windows # The children are not already in the window for ease of GUI creation diff --git a/standalone/gdre_file_tree.gd b/standalone/gdre_file_tree.gd index d820e2f3e..558cca301 100644 --- a/standalone/gdre_file_tree.gd +++ b/standalone/gdre_file_tree.gd @@ -123,8 +123,6 @@ var LARGE_PCK = 5000 var prev_filter_string: String = "" var timer: SceneTreeTimer = null -# var isHiDPI = DisplayServer.screen_get_dpi() >= 240 -var isHiDPI = false var root: TreeItem = null var userroot: TreeItem = null var num_files:int = 0 diff --git a/standalone/gdre_main.gd b/standalone/gdre_main.gd index 0ae0bb227..0aff55d91 100644 --- a/standalone/gdre_main.gd +++ b/standalone/gdre_main.gd @@ -5,9 +5,6 @@ var config: ConfigFile = null var last_error = "" var CONFIG_PATH = "user://gdre_settings.cfg" -# var isHiDPI = DisplayServer.screen_get_dpi() >= 240 -var isHiDPI = false - @onready var RECOVERY_DIALOG: GDRERecoverDialog = %GdreRecover @onready var NEW_PCK_DIALOG: GDRENewPck = %GdreNewPck @onready var PATCH_PCK_DIALOG: GDREPatchPCK = %GdrePatchPck @@ -245,8 +242,6 @@ func setup_file_dialog(): _file_dialog.set_use_native_dialog(true) # This is currently broken in Godot, so we use the native dialogs #var prev_size = _file_dialog.size - if isHiDPI: - _file_dialog.size *= 2.0 #_file_dialog.min_size = _file_dialog.size #d_viewport.content_scale_factor = 2.0 _file_dialog.set_access(FileDialog.ACCESS_FILESYSTEM) @@ -547,38 +542,6 @@ func handle_quit(save_cfg = true): GDRESettings.unload_project() - #readd_items($MenuContainer/REToolsMenu -func _resize_menu_times(menu_container:HBoxContainer): - for menu_btn: MenuButton in menu_container.get_children(): - - var popup : PopupMenu = menu_btn.get_popup() - # broken - #popup.visible = true - #var size = popup.size * 2 - #popup.size = size - #popup.min_size = size - #popup.max_size = size * 2 - #popup.get_viewport().content_scale_factor = 2.0 - #popup.visible = false - # readd_items(menu_btn) - if isHiDPI: - var old_theme = popup.theme - #menu_btn.connect("theme_changed", self._on_menu_btn_theme_changed) - var new_theme = old_theme - if !new_theme: - new_theme = Theme.new() - var font_size = new_theme.get_font_size("", "") - #new_theme.set_font_size("", "", font_size * 2) - new_theme.set_default_font_size(font_size * 2) - popup.theme = new_theme - var item_count = menu_btn.get_popup().get_item_count() - for i in range(item_count): - var icon: Texture2D = popup.get_item_icon(i) - if icon: - var icon_size = icon.get_size() - popup.set_item_icon_max_width(i, icon_size.x * (2.0 if isHiDPI else 0.5)) - - func _notification(what: int) -> void: if what == NOTIFICATION_EXIT_TREE: handle_quit() @@ -633,16 +596,6 @@ func _ready(): $LegalNoticeWindow/OkButton.connect("pressed", $LegalNoticeWindow.hide) $LegalNoticeWindow.connect("close_requested", $LegalNoticeWindow.hide) %GdreRecover.connect("recovery_confirmed", self._on_recovery_confirmed) - # check if the current screen is hidpi - if isHiDPI: - # set the content scaling factor to 2x - ThemeDB.fallback_base_scale = 2.0 - get_viewport().content_scale_factor = 2.0 - get_viewport().size *= 2 - $SetEncryptionKeyWindow.content_scale_factor = 2.0 - $SetEncryptionKeyWindow.size *= 2 - $LegalNoticeWindow.content_scale_factor = 2.0 - $LegalNoticeWindow.size *=2 if show_disclaimer: open_about_window() diff --git a/standalone/gdre_new_pck.gd b/standalone/gdre_new_pck.gd index 59de763bd..c9e8333da 100644 --- a/standalone/gdre_new_pck.gd +++ b/standalone/gdre_new_pck.gd @@ -37,8 +37,6 @@ var DEFAULT_VER_MAJOR = ver_info["major"] var DEFAULT_VER_MINOR = ver_info["minor"] var DEFAULT_VER_PATCH = ver_info["patch"] -# var isHiDPI = DisplayServer.screen_get_dpi() >= 240 -var isHiDPI = false var root: TreeItem = null var userroot: TreeItem = null var num_files:int = 0 diff --git a/standalone/gdre_patch_pck.gd b/standalone/gdre_patch_pck.gd index fe6cca873..951d72a59 100644 --- a/standalone/gdre_patch_pck.gd +++ b/standalone/gdre_patch_pck.gd @@ -30,7 +30,6 @@ var DROP_FOLDERS_LIST_B: Tree = null var DROP_FOLDERS_LABEL_A: Label = null var DROP_FOLDERS_LABEL_B: Label = null var button_clicked_item: TreeItem = null -# var isHiDPI = DisplayServer.screen_get_dpi() >= 240 var root: TreeItem = null var userroot: TreeItem = null var num_files:int = 0 @@ -149,12 +148,6 @@ func _ready(): DROP_FOLDERS_LIST_B.set_column_title(0, "File") DROP_FOLDERS_LIST_B.set_column_title(1, "Mapping") - if isHiDPI: - # get_viewport().size *= 2.0 - # get_viewport().content_scale_factor = 2.0 - #ThemeDB.fallback_base_scale = 2.0 - self.content_scale_factor = 2.0 - self.size *= 2.0 # This is a hack to get around not being able to open multiple scenes # unless they're attached to windows # The children are not already in the window for ease of GUI creation diff --git a/standalone/gdre_recover.gd b/standalone/gdre_recover.gd index 0f4a17495..8e7a12389 100644 --- a/standalone/gdre_recover.gd +++ b/standalone/gdre_recover.gd @@ -13,7 +13,6 @@ var RESOURCE_PREVIEW: Control = null var HSPLIT_CONTAINER: HSplitContainer = null var SHOW_PREVIEW_BUTTON: Button = null -var isHiDPI = false #DisplayServer.screen_get_dpi() >= 240 var root: TreeItem = null var userroot: TreeItem = null var num_files:int = 0 @@ -414,12 +413,6 @@ func _ready(): RESOURCE_PREVIEW = %GdreResourcePreview HSPLIT_CONTAINER = %HSplitContainer SHOW_PREVIEW_BUTTON = %ShowResourcePreview - if isHiDPI: - # get_viewport().size *= 2.0 - # get_viewport().content_scale_factor = 2.0 - #ThemeDB.fallback_base_scale = 2.0 - RECOVER_WINDOW.content_scale_factor = 2.0 - RECOVER_WINDOW.size *= 2.0 clear() SHOW_PREVIEW_BUTTON.set_pressed_no_signal(true) From d17877389db5610f8a18c932a4ca845e487fe65b Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Wed, 17 Jun 2026 23:16:56 -0700 Subject: [PATCH 07/10] enable high res in export presets --- standalone/export_presets.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/standalone/export_presets.cfg b/standalone/export_presets.cfg index 914a0ea8e..d28cd6c17 100644 --- a/standalone/export_presets.cfg +++ b/standalone/export_presets.cfg @@ -158,7 +158,7 @@ application/copyright_localized={} application/min_macos_version_x86_64="10.15" application/min_macos_version_arm64="11.00" application/export_angle=0 -display/high_res=false +display/high_res=true shader_baker/enabled=false application/additional_plist_content="" xcode/platform_build="14C18" From 66b59ae7bbc1fc278a982b03262c9e92189cc96c Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Wed, 17 Jun 2026 23:31:07 -0700 Subject: [PATCH 08/10] add alpha vertex color to obj export --- exporters/obj_exporter.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/exporters/obj_exporter.cpp b/exporters/obj_exporter.cpp index f32d2e976..98080fdc1 100644 --- a/exporters/obj_exporter.cpp +++ b/exporters/obj_exporter.cpp @@ -272,6 +272,9 @@ Error ObjExporter::_write_meshes_to_obj(const Vector> &p_meshes, const String v_line = format_obj_line(force_single_precision, "v %.6f %.6f %.6f", v.x, v.y, v.z); if (t.has_color) { v_line += format_obj_line(force_single_precision, " %.6f %.6f %.6f", t.vc.r, t.vc.g, t.vc.b); + if (t.vc.a != 1.0f) { + v_line += format_obj_line(force_single_precision, " %.6f", t.vc.a); + } } f->store_line(v_line); if (t.has_uv) { From ee7f73f10ce5b75ff49699a1b187fd7f13215e95 Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Thu, 18 Jun 2026 00:39:54 -0700 Subject: [PATCH 09/10] fix crash during tests --- utility/gdre_settings.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/utility/gdre_settings.cpp b/utility/gdre_settings.cpp index d54515f53..19f05b270 100644 --- a/utility/gdre_settings.cpp +++ b/utility/gdre_settings.cpp @@ -1896,6 +1896,10 @@ bool GDRESettings::is_headless() const { } float GDRESettings::get_auto_display_scale() { + if (!DisplayServer::get_singleton()) { + WARN_PRINT("DisplayServer not available, returning 1.0"); + return 1.0; + } #ifdef LINUXBSD_ENABLED if (DisplayServer::get_singleton()->get_name() == "Wayland") { float main_window_scale = DisplayServer::get_singleton()->screen_get_scale(DisplayServerEnums::SCREEN_OF_MAIN_WINDOW); From 19f90a7383970287b6b1048536c6168cfbce1e4d Mon Sep 17 00:00:00 2001 From: nikitalita <69168929+nikitalita@users.noreply.github.com> Date: Thu, 18 Jun 2026 10:44:14 -0700 Subject: [PATCH 10/10] fix some child windows not using HiDPI --- gui/gdre_window.cpp | 47 ++++++++++++++++++++++++++ gui/gdre_window.h | 27 +++++++++++++++ register_types.cpp | 2 ++ standalone/gdre_compile.tscn | 4 +-- standalone/gdre_config_dialog.tscn | 6 ++-- standalone/gdre_decompile.tscn | 4 +-- standalone/gdre_main.tscn | 16 ++++----- standalone/gdre_new_pck.tscn | 6 ++-- standalone/gdre_patch_pck.tscn | 14 ++++---- standalone/gdre_patch_translation.tscn | 6 ++-- standalone/gdre_recover.tscn | 14 ++++---- 11 files changed, 111 insertions(+), 35 deletions(-) diff --git a/gui/gdre_window.cpp b/gui/gdre_window.cpp index 583941bb7..92b3c3b81 100644 --- a/gui/gdre_window.cpp +++ b/gui/gdre_window.cpp @@ -78,6 +78,8 @@ void GDREWindow::set_window_autoscaling(Window *p_window, Size2i p_min_size) { void GDREWindow::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { GDREWindow::set_window_autoscaling(this, get_min_size()); + GDREWindow::set_window_autoscaling(confirmation_dialog, confirmation_dialog->get_min_size()); + GDREWindow::set_window_autoscaling(error_dialog, error_dialog->get_min_size()); } } @@ -130,6 +132,46 @@ void GDREAcceptDialogBase::popup_error_box(const String &p_message, const String } void GDREAcceptDialogBase::_notification(int p_what) { + if (p_what == NOTIFICATION_ENTER_TREE) { + GDREWindow::set_window_autoscaling(this, get_min_size()); + GDREWindow::set_window_autoscaling(confirmation_dialog, confirmation_dialog->get_min_size()); + GDREWindow::set_window_autoscaling(error_dialog, error_dialog->get_min_size()); + } +} + +GDREConfirmationDialogBase::GDREConfirmationDialogBase() { + if (GDREProgressDialog::get_singleton()) { + GDREProgressDialog::get_singleton()->add_host_window(this); + } + confirmation_dialog = memnew(ConfirmationDialog); + error_dialog = memnew(AcceptDialog); + add_child(confirmation_dialog); + add_child(error_dialog); +} + +GDREConfirmationDialogBase::~GDREConfirmationDialogBase() { + if (GDREProgressDialog::get_singleton()) { + GDREProgressDialog::get_singleton()->remove_host_window(this); + } +} + +void GDREConfirmationDialogBase::_notification(int p_what) { + if (p_what == NOTIFICATION_ENTER_TREE) { + GDREWindow::set_window_autoscaling(this, get_min_size()); + GDREWindow::set_window_autoscaling(confirmation_dialog, confirmation_dialog->get_min_size()); + GDREWindow::set_window_autoscaling(error_dialog, error_dialog->get_min_size()); + } +} + +void GDREConfirmationDialogBase::popup_confirm_box(const String &p_message, const String &p_title, const Callable &p_confirm_callback, const Callable &p_cancel_callback, const String &p_ok_button_text, const String &p_cancel_button_text) { + GDREWindow::popup_box(this, confirmation_dialog, p_message, p_title, p_confirm_callback, p_cancel_callback, p_ok_button_text, p_cancel_button_text); +} + +void GDREConfirmationDialogBase::popup_error_box(const String &p_message, const String &p_title, const Callable &p_callback) { + GDREWindow::popup_box(this, error_dialog, p_message, p_title, p_callback); +} + +void GDREFileDialog::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { GDREWindow::set_window_autoscaling(this, get_min_size()); } @@ -145,3 +187,8 @@ void GDREAcceptDialogBase::_bind_methods() { ClassDB::bind_method(D_METHOD("popup_confirm_box", "p_message", "p_title", "p_confirm_callback", "p_cancel_callback", "p_ok_button_text", "p_cancel_button_text"), &GDREAcceptDialogBase::popup_confirm_box, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL("OK"), DEFVAL("Cancel")); ClassDB::bind_method(D_METHOD("popup_error_box", "p_message", "p_title", "p_callback"), &GDREAcceptDialogBase::popup_error_box, DEFVAL("Error"), DEFVAL(Callable())); } + +void GDREConfirmationDialogBase::_bind_methods() { + ClassDB::bind_method(D_METHOD("popup_confirm_box", "p_message", "p_title", "p_confirm_callback", "p_cancel_callback", "p_ok_button_text", "p_cancel_button_text"), &GDREConfirmationDialogBase::popup_confirm_box, DEFVAL(Callable()), DEFVAL(Callable()), DEFVAL("OK"), DEFVAL("Cancel")); + ClassDB::bind_method(D_METHOD("popup_error_box", "p_message", "p_title", "p_callback"), &GDREConfirmationDialogBase::popup_error_box, DEFVAL("Error"), DEFVAL(Callable())); +} diff --git a/gui/gdre_window.h b/gui/gdre_window.h index 1c751ec2d..3aae0719b 100644 --- a/gui/gdre_window.h +++ b/gui/gdre_window.h @@ -1,6 +1,7 @@ #pragma once #include "scene/gui/dialogs.h" +#include "scene/gui/file_dialog.h" #include "scene/main/scene_tree.h" #include "scene/main/window.h" @@ -44,3 +45,29 @@ class GDREAcceptDialogBase : public AcceptDialog { GDREAcceptDialogBase(); ~GDREAcceptDialogBase(); }; + +class GDREConfirmationDialogBase : public ConfirmationDialog { + GDCLASS(GDREConfirmationDialogBase, ConfirmationDialog); + + ConfirmationDialog *confirmation_dialog; + AcceptDialog *error_dialog; + +protected: + static void _bind_methods(); + + void _notification(int p_what); + +public: + void popup_confirm_box(const String &p_message, const String &p_title, const Callable &p_confirm_callback = Callable(), const Callable &p_cancel_callback = Callable(), const String &p_ok_button_text = "OK", const String &p_cancel_button_text = "Cancel"); + void popup_error_box(const String &p_message, const String &p_title = "Error", const Callable &p_callback = Callable()); + + GDREConfirmationDialogBase(); + ~GDREConfirmationDialogBase(); +}; + +class GDREFileDialog : public FileDialog { + GDCLASS(GDREFileDialog, FileDialog); + +protected: + void _notification(int p_what); +}; diff --git a/register_types.cpp b/register_types.cpp index 394e2e087..afcfaa9ab 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -472,6 +472,8 @@ void initialize_gdsdecomp_module(ModuleInitializationLevel p_level) { ClassDB::register_class(); ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class(); diff --git a/standalone/gdre_compile.tscn b/standalone/gdre_compile.tscn index 29fb0f493..bdc0a8935 100644 --- a/standalone/gdre_compile.tscn +++ b/standalone/gdre_compile.tscn @@ -100,7 +100,7 @@ icon = ExtResource("4_rcglc") icon_alignment = 1 expand_icon = true -[node name="AddFilesDialog" type="FileDialog" parent="." unique_id=1108855084] +[node name="AddFilesDialog" type="GDREFileDialog" parent="." unique_id=1108855084] unique_name_in_owner = true title = "Open File(s)" ok_button_text = "Open" @@ -110,7 +110,7 @@ filters = PackedStringArray("*.gd;GDScript text files") show_hidden_files = true use_native_dialog = true -[node name="DestinationFolderDialog" type="FileDialog" parent="." unique_id=1338373745] +[node name="DestinationFolderDialog" type="GDREFileDialog" parent="." unique_id=1338373745] unique_name_in_owner = true title = "Open a Directory" ok_button_text = "Select Current Folder" diff --git a/standalone/gdre_config_dialog.tscn b/standalone/gdre_config_dialog.tscn index de2da0840..c497e9cbb 100644 --- a/standalone/gdre_config_dialog.tscn +++ b/standalone/gdre_config_dialog.tscn @@ -35,7 +35,7 @@ grow_horizontal = 2 grow_vertical = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_rnan2") -[node name="ConfirmClose" type="ConfirmationDialog" parent="." unique_id=725756413] +[node name="ConfirmClose" type="GDREConfirmationDialogBase" parent="." unique_id=725756413] unique_name_in_owner = true oversampling_override = 1.0 size = Vector2i(339, 100) @@ -210,12 +210,12 @@ unique_name_in_owner = true layout_mode = 2 text = "OK" -[node name="FileDialog" type="FileDialog" parent="." unique_id=610035988] +[node name="FileDialog" type="GDREFileDialog" parent="." unique_id=610035988] unique_name_in_owner = true access = 2 use_native_dialog = true -[node name="ErrorDialog" type="AcceptDialog" parent="." unique_id=419260906] +[node name="ErrorDialog" type="GDREAcceptDialogBase" parent="." unique_id=419260906] unique_name_in_owner = true title = "Error" diff --git a/standalone/gdre_decompile.tscn b/standalone/gdre_decompile.tscn index 251103b38..37c6bfa45 100644 --- a/standalone/gdre_decompile.tscn +++ b/standalone/gdre_decompile.tscn @@ -130,7 +130,7 @@ editable = false script = ExtResource("4_p6tj5") metadata/_custom_type_script = "uid://d3gw3xp1peanv" -[node name="AddFilesDialog" type="FileDialog" parent="." unique_id=859410602] +[node name="AddFilesDialog" type="GDREFileDialog" parent="." unique_id=859410602] unique_name_in_owner = true title = "Open File(s)" ok_button_text = "Open" @@ -140,7 +140,7 @@ filters = PackedStringArray("*.gdc,*.gde;GDScript binary files") show_hidden_files = true use_native_dialog = true -[node name="DestinationFolderDialog" type="FileDialog" parent="." unique_id=1958416791] +[node name="DestinationFolderDialog" type="GDREFileDialog" parent="." unique_id=1958416791] unique_name_in_owner = true title = "Open a Directory" ok_button_text = "Select Current Folder" diff --git a/standalone/gdre_main.tscn b/standalone/gdre_main.tscn index 94fc95d81..f68ecf212 100644 --- a/standalone/gdre_main.tscn +++ b/standalone/gdre_main.tscn @@ -237,7 +237,7 @@ theme_override_font_sizes/font_size = 18 text = "$$$" flat = true -[node name="LegalNoticeWindow" type="Window" parent="." unique_id=1615274239] +[node name="LegalNoticeWindow" type="GDREWindow" parent="." unique_id=1615274239] title = "Important: Legal Notice" position = Vector2i(0, 36) size = Vector2i(650, 431) @@ -298,7 +298,7 @@ visible = false unique_name_in_owner = true visible = false -[node name="TextToBinFileDialog" type="FileDialog" parent="." unique_id=22111780] +[node name="TextToBinFileDialog" type="GDREFileDialog" parent="." unique_id=22111780] unique_name_in_owner = true auto_translate_mode = 1 title = "Open File(s)" @@ -309,7 +309,7 @@ filters = PackedStringArray("*.escn,*.tscn,*.tres,*.godot,engine.cfg;Text resour show_hidden_files = true use_native_dialog = true -[node name="BinToTextFileDialog" type="FileDialog" parent="." unique_id=157356456] +[node name="BinToTextFileDialog" type="GDREFileDialog" parent="." unique_id=157356456] unique_name_in_owner = true title = "Open File(s)" ok_button_text = "Open" @@ -318,7 +318,7 @@ access = 2 show_hidden_files = true use_native_dialog = true -[node name="TextureToPNGFileDialog" type="FileDialog" parent="." unique_id=392200930] +[node name="TextureToPNGFileDialog" type="GDREFileDialog" parent="." unique_id=392200930] unique_name_in_owner = true title = "Open File(s)" ok_button_text = "Open" @@ -328,7 +328,7 @@ filters = PackedStringArray("*.ctex,*.stex,*.tex;Stream texture files") show_hidden_files = true use_native_dialog = true -[node name="OggStreamToOGGFileDialog" type="FileDialog" parent="." unique_id=219429950] +[node name="OggStreamToOGGFileDialog" type="GDREFileDialog" parent="." unique_id=219429950] unique_name_in_owner = true title = "Open File(s)" ok_button_text = "Open" @@ -338,7 +338,7 @@ filters = PackedStringArray("*.oggstr,*.oggvorbisstr;OGG Sample files") show_hidden_files = true use_native_dialog = true -[node name="MP3StreamToMP3FileDialog" type="FileDialog" parent="." unique_id=984739678] +[node name="MP3StreamToMP3FileDialog" type="GDREFileDialog" parent="." unique_id=984739678] unique_name_in_owner = true auto_translate_mode = 1 title = "Open File(s)" @@ -353,7 +353,7 @@ use_native_dialog = true unique_name_in_owner = true visible = false -[node name="SampleToWAVFileDialog" type="FileDialog" parent="." unique_id=1244434354] +[node name="SampleToWAVFileDialog" type="GDREFileDialog" parent="." unique_id=1244434354] unique_name_in_owner = true title = "Open File(s)" ok_button_text = "Open" @@ -363,7 +363,7 @@ filters = PackedStringArray("*.sample;WAV Sample files") show_hidden_files = true use_native_dialog = true -[node name="EncryptionScriptFileDialog" type="FileDialog" parent="." unique_id=1281606175] +[node name="EncryptionScriptFileDialog" type="GDREFileDialog" parent="." unique_id=1281606175] unique_name_in_owner = true title = "Open a File" dialog_hide_on_ok = true diff --git a/standalone/gdre_new_pck.tscn b/standalone/gdre_new_pck.tscn index 8e6b460f6..d6f534eae 100644 --- a/standalone/gdre_new_pck.tscn +++ b/standalone/gdre_new_pck.tscn @@ -21,19 +21,19 @@ ok_button_text = "Save" dialog_hide_on_ok = false script = ExtResource("1_lfpko") -[node name="DirectoryDialog" type="FileDialog" parent="." unique_id=1289157323] +[node name="DirectoryDialog" type="GDREFileDialog" parent="." unique_id=1289157323] title = "Open a Directory" ok_button_text = "Select Current Folder" file_mode = 2 access = 2 use_native_dialog = true -[node name="SaveDialog" type="FileDialog" parent="." unique_id=1737674945] +[node name="SaveDialog" type="GDREFileDialog" parent="." unique_id=1737674945] title = "Save PCK..." access = 2 use_native_dialog = true -[node name="EmbedSourceDialog" type="FileDialog" parent="." unique_id=234329564] +[node name="EmbedSourceDialog" type="GDREFileDialog" parent="." unique_id=234329564] auto_translate_mode = 1 title = "Open a File" ok_button_text = "Open" diff --git a/standalone/gdre_patch_pck.tscn b/standalone/gdre_patch_pck.tscn index 620f5af3c..abd104d00 100644 --- a/standalone/gdre_patch_pck.tscn +++ b/standalone/gdre_patch_pck.tscn @@ -17,10 +17,10 @@ dialog_hide_on_ok = false script = ExtResource("1_p07vp") metadata/_custom_type_script = "uid://cbggqwojxui00" -[node name="ErrorDialog" type="AcceptDialog" parent="." unique_id=1566817302] +[node name="ErrorDialog" type="GDREAcceptDialogBase" parent="." unique_id=1566817302] unique_name_in_owner = true -[node name="SelectPckDialog" type="FileDialog" parent="." unique_id=1540086483] +[node name="SelectPckDialog" type="GDREFileDialog" parent="." unique_id=1540086483] unique_name_in_owner = true title = "Open a File" ok_button_text = "Open" @@ -30,7 +30,7 @@ access = 2 filters = PackedStringArray("*.pck") use_native_dialog = true -[node name="SelectPatchFilesDialog" type="FileDialog" parent="." unique_id=1878613928] +[node name="SelectPatchFilesDialog" type="GDREFileDialog" parent="." unique_id=1878613928] unique_name_in_owner = true title = "Open File(s)" ok_button_text = "Open" @@ -39,11 +39,11 @@ file_mode = 1 access = 2 use_native_dialog = true -[node name="SelectPatchMappingDialog" type="FileDialog" parent="." unique_id=93441926] +[node name="SelectPatchMappingDialog" type="GDREFileDialog" parent="." unique_id=93441926] unique_name_in_owner = true root_subfolder = "res://" -[node name="SavePckDialog" type="FileDialog" parent="." unique_id=572021896] +[node name="SavePckDialog" type="GDREFileDialog" parent="." unique_id=572021896] unique_name_in_owner = true access = 2 @@ -234,7 +234,7 @@ nameColumnName = "File" infoColumnName = "Mapping" metadata/_custom_type_script = "uid://cww2hw50p8q3i" -[node name="DropFoldersConfirmation" type="Window" parent="." unique_id=2034123196] +[node name="DropFoldersConfirmation" type="GDREWindow" parent="." unique_id=2034123196] unique_name_in_owner = true oversampling_override = 1.0 title = "Select Mapping" @@ -346,7 +346,7 @@ offset_bottom = 31.0 text = "Select \"Relative From...\" Mapping " -[node name="SelectPatchFolderMappingDialog" type="FileDialog" parent="." unique_id=491060185] +[node name="SelectPatchFolderMappingDialog" type="GDREFileDialog" parent="." unique_id=491060185] unique_name_in_owner = true auto_translate_mode = 1 title = "Open a Directory" diff --git a/standalone/gdre_patch_translation.tscn b/standalone/gdre_patch_translation.tscn index 299224cf6..62bd1d554 100644 --- a/standalone/gdre_patch_translation.tscn +++ b/standalone/gdre_patch_translation.tscn @@ -92,7 +92,7 @@ popup/item_1/id = 1 popup/item_2/text = "Patch PCK directly" popup/item_2/id = 2 -[node name="SelectProjectDialog" type="FileDialog" parent="." unique_id=1797558310] +[node name="SelectProjectDialog" type="GDREFileDialog" parent="." unique_id=1797558310] unique_name_in_owner = true title = "Open a File or Directory" file_mode = 3 @@ -101,7 +101,7 @@ access = 2 filters = PackedStringArray("\"*.exe,*.bin,*.32,*.64,*.x86_64,*.x86,*.arm64,*.universal,*.pck,*.apk,*.app;Supported files\"") use_native_dialog = true -[node name="SelectCSVDialog" type="FileDialog" parent="." unique_id=2034872773] +[node name="SelectCSVDialog" type="GDREFileDialog" parent="." unique_id=2034872773] unique_name_in_owner = true title = "Open a File" file_mode = 0 @@ -111,7 +111,7 @@ filters = PackedStringArray("*.csv;Translation source file") show_hidden_files = true use_native_dialog = true -[node name="SelectOutputDialog" type="FileDialog" parent="." unique_id=1387266648] +[node name="SelectOutputDialog" type="GDREFileDialog" parent="." unique_id=1387266648] unique_name_in_owner = true title = "Open a Directory" file_mode = 2 diff --git a/standalone/gdre_recover.tscn b/standalone/gdre_recover.tscn index 05d0c146d..2a09717ce 100644 --- a/standalone/gdre_recover.tscn +++ b/standalone/gdre_recover.tscn @@ -26,7 +26,7 @@ min_size = Vector2i(730, 500) theme = ExtResource("1_ljbdy") script = ExtResource("2_edjtc") -[node name="ExtractDirDialog" type="FileDialog" parent="." unique_id=1373500728] +[node name="ExtractDirDialog" type="GDREFileDialog" parent="." unique_id=1373500728] title = "Open a Directory" ok_button_text = "Select Current Folder" dialog_hide_on_ok = true @@ -34,9 +34,9 @@ file_mode = 2 access = 2 use_native_dialog = true -[node name="Preview" type="AcceptDialog" parent="." unique_id=1334256671] +[node name="Preview" type="GDREAcceptDialogBase" parent="." unique_id=1334256671] -[node name="DownloadConfirmDialog" type="ConfirmationDialog" parent="." unique_id=1154753379] +[node name="DownloadConfirmDialog" type="GDREConfirmationDialogBase" parent="." unique_id=1154753379] unique_name_in_owner = true size = Vector2i(426, 149) ok_button_text = "Yes" @@ -283,7 +283,7 @@ layout_mode = 2 toggle_mode = true text = "Show Resource Preview..." -[node name="ExportResDirDialog" type="FileDialog" parent="." unique_id=1340140407] +[node name="ExportResDirDialog" type="GDREFileDialog" parent="." unique_id=1340140407] unique_name_in_owner = true oversampling_override = 1.0 title = "Select Output Directory" @@ -298,7 +298,7 @@ option_0/values = PackedStringArray("Flat", "Relative Hierarchical", "Matching P option_1/name = "Export Scenes as" option_1/values = PackedStringArray("Auto", "TSCN", "GLB") -[node name="ExtractResDirDialog" type="FileDialog" parent="." unique_id=597060021] +[node name="ExtractResDirDialog" type="GDREFileDialog" parent="." unique_id=597060021] unique_name_in_owner = true oversampling_override = 1.0 title = "Select Output Directory" @@ -310,7 +310,7 @@ option_count = 1 option_0/name = "Directory Structure" option_0/values = PackedStringArray("Flat", "Relative Hierarchical", "Matching Project") -[node name="AssemblyPickerDialog" type="FileDialog" parent="." unique_id=1799836032] +[node name="AssemblyPickerDialog" type="GDREFileDialog" parent="." unique_id=1799836032] unique_name_in_owner = true title = "Open a File" file_mode = 0 @@ -322,7 +322,7 @@ unique_name_in_owner = true visible = false show_ephemeral_settings = true -[node name="AddPcksDialog" type="FileDialog" parent="." unique_id=1860483358] +[node name="AddPcksDialog" type="GDREFileDialog" parent="." unique_id=1860483358] unique_name_in_owner = true title = "Open File(s)" file_mode = 1