|
@@ -44,6 +44,7 @@
|
|
#include "editor/editor_settings.h"
|
|
#include "editor/editor_settings.h"
|
|
#include "editor/editor_string_names.h"
|
|
#include "editor/editor_string_names.h"
|
|
#include "editor/gui/editor_file_dialog.h"
|
|
#include "editor/gui/editor_file_dialog.h"
|
|
|
|
+#include "editor/gui/editor_title_bar.h"
|
|
#include "editor/plugins/asset_library_editor_plugin.h"
|
|
#include "editor/plugins/asset_library_editor_plugin.h"
|
|
#include "editor/project_manager/project_dialog.h"
|
|
#include "editor/project_manager/project_dialog.h"
|
|
#include "editor/project_manager/project_list.h"
|
|
#include "editor/project_manager/project_list.h"
|
|
@@ -80,6 +81,12 @@ void ProjectManager::_notification(int p_what) {
|
|
case NOTIFICATION_ENTER_TREE: {
|
|
case NOTIFICATION_ENTER_TREE: {
|
|
Engine::get_singleton()->set_editor_hint(false);
|
|
Engine::get_singleton()->set_editor_hint(false);
|
|
|
|
|
|
|
|
+ Window *main_window = get_window();
|
|
|
|
+ if (main_window) {
|
|
|
|
+ // Handle macOS fullscreen and extend-to-title changes.
|
|
|
|
+ main_window->connect("titlebar_changed", callable_mp(this, &ProjectManager::_titlebar_resized));
|
|
|
|
+ }
|
|
|
|
+
|
|
// Theme has already been created in the constructor, so we can skip that step.
|
|
// Theme has already been created in the constructor, so we can skip that step.
|
|
_update_theme(true);
|
|
_update_theme(true);
|
|
} break;
|
|
} break;
|
|
@@ -91,6 +98,7 @@ void ProjectManager::_notification(int p_what) {
|
|
|
|
|
|
_select_main_view(MAIN_VIEW_PROJECTS);
|
|
_select_main_view(MAIN_VIEW_PROJECTS);
|
|
_update_list_placeholder();
|
|
_update_list_placeholder();
|
|
|
|
+ _titlebar_resized();
|
|
} break;
|
|
} break;
|
|
|
|
|
|
case NOTIFICATION_VISIBILITY_CHANGED: {
|
|
case NOTIFICATION_VISIBILITY_CHANGED: {
|
|
@@ -1007,6 +1015,24 @@ void ProjectManager::_files_dropped(PackedStringArray p_files) {
|
|
project_list->find_projects_multiple(folders);
|
|
project_list->find_projects_multiple(folders);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void ProjectManager::_titlebar_resized() {
|
|
|
|
+ DisplayServer::get_singleton()->window_set_window_buttons_offset(Vector2i(title_bar->get_global_position().y + title_bar->get_size().y / 2, title_bar->get_global_position().y + title_bar->get_size().y / 2), DisplayServer::MAIN_WINDOW_ID);
|
|
|
|
+ const Vector3i &margin = DisplayServer::get_singleton()->window_get_safe_title_margins(DisplayServer::MAIN_WINDOW_ID);
|
|
|
|
+ if (left_menu_spacer) {
|
|
|
|
+ int w = (root_container->is_layout_rtl()) ? margin.y : margin.x;
|
|
|
|
+ left_menu_spacer->set_custom_minimum_size(Size2(w, 0));
|
|
|
|
+ right_spacer->set_custom_minimum_size(Size2(w, 0));
|
|
|
|
+ }
|
|
|
|
+ if (right_menu_spacer) {
|
|
|
|
+ int w = (root_container->is_layout_rtl()) ? margin.x : margin.y;
|
|
|
|
+ right_menu_spacer->set_custom_minimum_size(Size2(w, 0));
|
|
|
|
+ left_spacer->set_custom_minimum_size(Size2(w, 0));
|
|
|
|
+ }
|
|
|
|
+ if (title_bar) {
|
|
|
|
+ title_bar->set_custom_minimum_size(Size2(0, margin.z - title_bar->get_global_position().y));
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
// Object methods.
|
|
// Object methods.
|
|
|
|
|
|
ProjectManager::ProjectManager() {
|
|
ProjectManager::ProjectManager() {
|
|
@@ -1102,10 +1128,19 @@ ProjectManager::ProjectManager() {
|
|
root_container->add_child(main_vbox);
|
|
root_container->add_child(main_vbox);
|
|
|
|
|
|
// Title bar.
|
|
// Title bar.
|
|
|
|
+ bool can_expand = bool(EDITOR_GET("interface/editor/expand_to_title")) && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_EXTEND_TO_TITLE);
|
|
|
|
+
|
|
{
|
|
{
|
|
- title_bar = memnew(HBoxContainer);
|
|
|
|
|
|
+ title_bar = memnew(EditorTitleBar);
|
|
main_vbox->add_child(title_bar);
|
|
main_vbox->add_child(title_bar);
|
|
|
|
|
|
|
|
+ if (can_expand) {
|
|
|
|
+ // Add spacer to avoid other controls under window minimize/maximize/close buttons (left side).
|
|
|
|
+ left_menu_spacer = memnew(Control);
|
|
|
|
+ left_menu_spacer->set_mouse_filter(Control::MOUSE_FILTER_PASS);
|
|
|
|
+ title_bar->add_child(left_menu_spacer);
|
|
|
|
+ }
|
|
|
|
+
|
|
HBoxContainer *left_hbox = memnew(HBoxContainer);
|
|
HBoxContainer *left_hbox = memnew(HBoxContainer);
|
|
left_hbox->set_alignment(BoxContainer::ALIGNMENT_BEGIN);
|
|
left_hbox->set_alignment(BoxContainer::ALIGNMENT_BEGIN);
|
|
left_hbox->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
|
left_hbox->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
|
@@ -1117,12 +1152,26 @@ ProjectManager::ProjectManager() {
|
|
left_hbox->add_child(title_bar_logo);
|
|
left_hbox->add_child(title_bar_logo);
|
|
title_bar_logo->connect("pressed", callable_mp(this, &ProjectManager::_show_about));
|
|
title_bar_logo->connect("pressed", callable_mp(this, &ProjectManager::_show_about));
|
|
|
|
|
|
|
|
+ if (can_expand) {
|
|
|
|
+ // Spacer to center main toggles.
|
|
|
|
+ left_spacer = memnew(Control);
|
|
|
|
+ left_spacer->set_mouse_filter(Control::MOUSE_FILTER_PASS);
|
|
|
|
+ title_bar->add_child(left_spacer);
|
|
|
|
+ }
|
|
|
|
+
|
|
main_view_toggles = memnew(HBoxContainer);
|
|
main_view_toggles = memnew(HBoxContainer);
|
|
main_view_toggles->set_alignment(BoxContainer::ALIGNMENT_CENTER);
|
|
main_view_toggles->set_alignment(BoxContainer::ALIGNMENT_CENTER);
|
|
main_view_toggles->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
|
main_view_toggles->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
|
main_view_toggles->set_stretch_ratio(2.0);
|
|
main_view_toggles->set_stretch_ratio(2.0);
|
|
title_bar->add_child(main_view_toggles);
|
|
title_bar->add_child(main_view_toggles);
|
|
|
|
|
|
|
|
+ if (can_expand) {
|
|
|
|
+ // Spacer to center main toggles.
|
|
|
|
+ right_spacer = memnew(Control);
|
|
|
|
+ right_spacer->set_mouse_filter(Control::MOUSE_FILTER_PASS);
|
|
|
|
+ title_bar->add_child(right_spacer);
|
|
|
|
+ }
|
|
|
|
+
|
|
main_view_toggles_group.instantiate();
|
|
main_view_toggles_group.instantiate();
|
|
|
|
|
|
HBoxContainer *right_hbox = memnew(HBoxContainer);
|
|
HBoxContainer *right_hbox = memnew(HBoxContainer);
|
|
@@ -1136,6 +1185,13 @@ ProjectManager::ProjectManager() {
|
|
quick_settings_button->set_text(TTR("Settings"));
|
|
quick_settings_button->set_text(TTR("Settings"));
|
|
right_hbox->add_child(quick_settings_button);
|
|
right_hbox->add_child(quick_settings_button);
|
|
quick_settings_button->connect("pressed", callable_mp(this, &ProjectManager::_show_quick_settings));
|
|
quick_settings_button->connect("pressed", callable_mp(this, &ProjectManager::_show_quick_settings));
|
|
|
|
+
|
|
|
|
+ if (can_expand) {
|
|
|
|
+ // Add spacer to avoid other controls under the window minimize/maximize/close buttons (right side).
|
|
|
|
+ right_menu_spacer = memnew(Control);
|
|
|
|
+ right_menu_spacer->set_mouse_filter(Control::MOUSE_FILTER_PASS);
|
|
|
|
+ title_bar->add_child(right_menu_spacer);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
main_view_container = memnew(PanelContainer);
|
|
main_view_container = memnew(PanelContainer);
|
|
@@ -1537,6 +1593,14 @@ ProjectManager::ProjectManager() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // Extend menu bar to window title.
|
|
|
|
+ if (can_expand) {
|
|
|
|
+ DisplayServer::get_singleton()->process_events();
|
|
|
|
+ DisplayServer::get_singleton()->window_set_flag(DisplayServer::WINDOW_FLAG_EXTEND_TO_TITLE, true, DisplayServer::MAIN_WINDOW_ID);
|
|
|
|
+ title_bar->set_can_move_window(true);
|
|
|
|
+ title_bar->connect("item_rect_changed", callable_mp(this, &ProjectManager::_titlebar_resized));
|
|
|
|
+ }
|
|
|
|
+
|
|
_update_size_limits();
|
|
_update_size_limits();
|
|
}
|
|
}
|
|
|
|
|