From c9bc807ce46361e6cf0953ecc30a599646e2947b Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sun, 9 Jun 2019 22:33:50 +0200 Subject: [PATCH] Dim the project manager window while it's quitting This makes it clearer that the project manager window is busy while it's quitting (which can take a while on slower PCs). This also makes it feel more responsive to user input. --- editor/project_manager.cpp | 19 +++++++++++++++++++ editor/project_manager.h | 1 + 2 files changed, 20 insertions(+) diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 7b521aba13f..3fd497ed7b7 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -961,9 +961,25 @@ void ProjectManager::_notification(int p_what) { set_process_unhandled_input(is_visible_in_tree()); } break; + case NOTIFICATION_WM_QUIT_REQUEST: { + + _dim_window(); + } break; } } +void ProjectManager::_dim_window() { + + // This method must be called before calling `get_tree()->quit()`. + // Otherwise, its effect won't be visible + + // Dim the project manager window while it's quitting to make it clearer that it's busy. + // No transition is applied, as the effect needs to be visible immediately + float c = 1.0f - float(EDITOR_GET("interface/editor/dim_amount")); + Color dim_color = Color(c, c, c); + gui_base->set_modulate(dim_color); +} + void ProjectManager::_panel_draw(Node *p_hb) { HBoxContainer *hb = Object::cast_to(p_hb); @@ -1514,6 +1530,7 @@ void ProjectManager::_open_selected_projects() { ERR_FAIL_COND(err); } + _dim_window(); get_tree()->quit(); } @@ -1780,11 +1797,13 @@ void ProjectManager::_restart_confirm() { Error err = OS::get_singleton()->execute(exec, args, false, &pid); ERR_FAIL_COND(err); + _dim_window(); get_tree()->quit(); } void ProjectManager::_exit_dialog() { + _dim_window(); get_tree()->quit(); } diff --git a/editor/project_manager.h b/editor/project_manager.h index fa878e75a6b..a7cc6549f5c 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -110,6 +110,7 @@ class ProjectManager : public Control { void _install_project(const String &p_zip_path, const String &p_title); + void _dim_window(); void _panel_draw(Node *p_hb); void _panel_input(const Ref &p_ev, Node *p_hb); void _unhandled_input(const Ref &p_ev);