summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.cpp6
-rw-r--r--editor/editor_file_dialog.cpp56
-rw-r--r--editor/editor_file_dialog.h3
-rw-r--r--editor/project_manager.cpp19
-rw-r--r--editor/project_manager.h1
5 files changed, 55 insertions, 30 deletions
diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp
index 561a3cae2d..01b85458c2 100644
--- a/drivers/gles3/rasterizer_storage_gles3.cpp
+++ b/drivers/gles3/rasterizer_storage_gles3.cpp
@@ -3501,7 +3501,7 @@ void RasterizerStorageGLES3::mesh_add_surface(RID p_mesh, uint32_t p_format, VS:
if (p_vertex_count < (1 << 16)) {
//read 16 bit indices
const uint16_t *src_idx = (const uint16_t *)ir.ptr();
- for (int i = 0; i < index_count; i += 6) {
+ for (int i = 0; i + 5 < index_count; i += 6) {
wr[i + 0] = src_idx[i / 2];
wr[i + 1] = src_idx[i / 2 + 1];
@@ -3515,7 +3515,7 @@ void RasterizerStorageGLES3::mesh_add_surface(RID p_mesh, uint32_t p_format, VS:
//read 16 bit indices
const uint32_t *src_idx = (const uint32_t *)ir.ptr();
- for (int i = 0; i < index_count; i += 6) {
+ for (int i = 0; i + 5 < index_count; i += 6) {
wr[i + 0] = src_idx[i / 2];
wr[i + 1] = src_idx[i / 2 + 1];
@@ -3531,7 +3531,7 @@ void RasterizerStorageGLES3::mesh_add_surface(RID p_mesh, uint32_t p_format, VS:
index_count = p_vertex_count * 2;
wf_indices.resize(index_count);
PoolVector<uint32_t>::Write wr = wf_indices.write();
- for (int i = 0; i < index_count; i += 6) {
+ for (int i = 0; i + 5 < index_count; i += 6) {
wr[i + 0] = i / 2;
wr[i + 1] = i / 2 + 1;
diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp
index 1a293adb4b..8025fc9795 100644
--- a/editor/editor_file_dialog.cpp
+++ b/editor/editor_file_dialog.cpp
@@ -63,6 +63,7 @@ void EditorFileDialog::_notification(int p_what) {
dir_up->set_icon(get_icon("ArrowUp", "EditorIcons"));
refresh->set_icon(get_icon("Reload", "EditorIcons"));
favorite->set_icon(get_icon("Favorites", "EditorIcons"));
+ show_hidden->set_icon(get_icon("GuiVisibilityVisible", "EditorIcons"));
fav_up->set_icon(get_icon("MoveUp", "EditorIcons"));
fav_down->set_icon(get_icon("MoveDown", "EditorIcons"));
@@ -86,9 +87,9 @@ void EditorFileDialog::_notification(int p_what) {
} else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- bool show_hidden = EditorSettings::get_singleton()->get("filesystem/file_dialog/show_hidden_files");
- if (show_hidden_files != show_hidden)
- set_show_hidden_files(show_hidden);
+ bool is_showing_hidden = EditorSettings::get_singleton()->get("filesystem/file_dialog/show_hidden_files");
+ if (show_hidden_files != is_showing_hidden)
+ set_show_hidden_files(is_showing_hidden);
set_display_mode((DisplayMode)EditorSettings::get_singleton()->get("filesystem/file_dialog/display_mode").operator int());
// update icons
@@ -140,7 +141,7 @@ void EditorFileDialog::_unhandled_input(const Ref<InputEvent> &p_event) {
handled = true;
}
if (ED_IS_SHORTCUT("file_dialog/toggle_favorite", p_event)) {
- _favorite_toggled(favorite->is_pressed());
+ _favorite_pressed();
handled = true;
}
if (ED_IS_SHORTCUT("file_dialog/toggle_mode", p_event)) {
@@ -231,6 +232,7 @@ void EditorFileDialog::_file_entered(const String &p_file) {
}
void EditorFileDialog::_save_confirm_pressed() {
+
String f = dir_access->get_current_dir().plus_file(file->get_text());
_save_to_recent();
hide();
@@ -717,20 +719,19 @@ void EditorFileDialog::update_file_list() {
List<String> files;
List<String> dirs;
- bool isdir;
- bool ishidden;
- bool show_hidden = show_hidden_files;
+ bool is_dir;
+ bool is_hidden;
String item;
- while ((item = dir_access->get_next(&isdir)) != "") {
+ while ((item = dir_access->get_next(&is_dir)) != "") {
if (item == "." || item == "..")
continue;
- ishidden = dir_access->current_is_hidden();
+ is_hidden = dir_access->current_is_hidden();
- if (show_hidden || !ishidden) {
- if (!isdir)
+ if (show_hidden_files || !is_hidden) {
+ if (!is_dir)
files.push_back(item);
else
dirs.push_back(item);
@@ -1130,6 +1131,7 @@ void EditorFileDialog::_update_drives() {
}
void EditorFileDialog::_favorite_selected(int p_idx) {
+
dir_access->change_dir(favorites->get_item_metadata(p_idx));
file->set_text("");
update_dir();
@@ -1210,7 +1212,7 @@ void EditorFileDialog::_update_favorites() {
favorites->add_item(name, folder_icon);
} else {
- continue; // We don't handle favorite files here
+ continue; // We don't handle favorite files here.
}
favorites->set_item_metadata(favorites->get_item_count() - 1, favorited[i]);
@@ -1218,11 +1220,12 @@ void EditorFileDialog::_update_favorites() {
if (setthis) {
favorite->set_pressed(true);
favorites->set_current(favorites->get_item_count() - 1);
+ recent->unselect_all();
}
}
}
-void EditorFileDialog::_favorite_toggled(bool p_toggle) {
+void EditorFileDialog::_favorite_pressed() {
bool res = access == ACCESS_RESOURCES;
String cd = get_current_dir();
@@ -1253,12 +1256,6 @@ void EditorFileDialog::_favorite_toggled(bool p_toggle) {
_update_favorites();
}
-void EditorFileDialog::_favorite_pressed() {
-
- favorite->set_pressed(!favorite->is_pressed());
- _favorite_toggled(favorite->is_pressed());
-}
-
void EditorFileDialog::_recent_selected(int p_idx) {
Vector<String> recentd = EditorSettings::get_singleton()->get_recent_dirs();
@@ -1381,7 +1378,6 @@ void EditorFileDialog::_bind_methods() {
ClassDB::bind_method(D_METHOD("_go_forward"), &EditorFileDialog::_go_forward);
ClassDB::bind_method(D_METHOD("_go_up"), &EditorFileDialog::_go_up);
- ClassDB::bind_method(D_METHOD("_favorite_toggled"), &EditorFileDialog::_favorite_toggled);
ClassDB::bind_method(D_METHOD("_favorite_pressed"), &EditorFileDialog::_favorite_pressed);
ClassDB::bind_method(D_METHOD("_favorite_selected"), &EditorFileDialog::_favorite_selected);
ClassDB::bind_method(D_METHOD("_favorite_move_up"), &EditorFileDialog::_favorite_move_up);
@@ -1418,6 +1414,7 @@ void EditorFileDialog::_bind_methods() {
void EditorFileDialog::set_show_hidden_files(bool p_show) {
show_hidden_files = p_show;
+ show_hidden->set_pressed(p_show);
invalidate();
}
@@ -1523,17 +1520,23 @@ EditorFileDialog::EditorFileDialog() {
pathhb->add_child(refresh);
favorite = memnew(ToolButton);
- favorite->set_flat(true);
favorite->set_toggle_mode(true);
favorite->set_tooltip(TTR("(Un)favorite current folder."));
favorite->connect("pressed", this, "_favorite_pressed");
pathhb->add_child(favorite);
- Ref<ButtonGroup> view_mode_group;
- view_mode_group.instance();
+ show_hidden = memnew(ToolButton);
+ show_hidden->set_toggle_mode(true);
+ show_hidden->set_pressed(is_showing_hidden_files());
+ show_hidden->set_tooltip(TTR("Toggle visibility of hidden files."));
+ show_hidden->connect("toggled", this, "set_show_hidden_files");
+ pathhb->add_child(show_hidden);
pathhb->add_child(memnew(VSeparator));
+ Ref<ButtonGroup> view_mode_group;
+ view_mode_group.instance();
+
mode_thumbnails = memnew(ToolButton);
mode_thumbnails->connect("pressed", this, "set_display_mode", varray(DISPLAY_THUMBNAILS));
mode_thumbnails->set_toggle_mode(true);
@@ -1593,6 +1596,7 @@ EditorFileDialog::EditorFileDialog() {
rec_vb->set_custom_minimum_size(Size2(150, 100) * EDSCALE);
rec_vb->set_v_size_flags(SIZE_EXPAND_FILL);
recent = memnew(ItemList);
+ recent->set_allow_reselect(true);
rec_vb->add_margin_child(TTR("Recent:"), recent, true);
recent->connect("item_selected", this, "_recent_selected");
@@ -1609,7 +1613,7 @@ EditorFileDialog::EditorFileDialog() {
list_vb->add_child(memnew(Label(TTR("Directories & Files:"))));
preview_hb->add_child(list_vb);
- // Item (files and folders) list with context menu
+ // Item (files and folders) list with context menu.
item_list = memnew(ItemList);
item_list->set_v_size_flags(SIZE_EXPAND_FILL);
@@ -1622,7 +1626,7 @@ EditorFileDialog::EditorFileDialog() {
item_menu->connect("id_pressed", this, "_item_menu_id_pressed");
add_child(item_menu);
- // Other stuff
+ // Other stuff.
preview_vb = memnew(VBoxContainer);
preview_hb->add_child(preview_vb);
@@ -1641,7 +1645,7 @@ EditorFileDialog::EditorFileDialog() {
filter = memnew(OptionButton);
filter->set_stretch_ratio(3);
filter->set_h_size_flags(SIZE_EXPAND_FILL);
- filter->set_clip_text(true); // too many extensions overflow it
+ filter->set_clip_text(true); // Too many extensions overflow it.
filename_hbc->add_child(filter);
filename_hbc->set_h_size_flags(SIZE_EXPAND_FILL);
item_vb->add_child(filename_hbc);
diff --git a/editor/editor_file_dialog.h b/editor/editor_file_dialog.h
index 529aaa71de..6578be8563 100644
--- a/editor/editor_file_dialog.h
+++ b/editor/editor_file_dialog.h
@@ -116,11 +116,13 @@ private:
DirAccess *dir_access;
ConfirmationDialog *confirm_save;
DependencyRemoveDialog *remove_dialog;
+
ToolButton *mode_thumbnails;
ToolButton *mode_list;
ToolButton *refresh;
ToolButton *favorite;
+ ToolButton *show_hidden;
ToolButton *fav_up;
ToolButton *fav_down;
@@ -150,7 +152,6 @@ private:
void update_filters();
void _update_favorites();
- void _favorite_toggled(bool p_toggle);
void _favorite_pressed();
void _favorite_selected(int p_idx);
void _favorite_move_up();
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index 7b521aba13..3fd497ed7b 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<HBoxContainer>(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 fa878e75a6..a7cc6549f5 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<InputEvent> &p_ev, Node *p_hb);
void _unhandled_input(const Ref<InputEvent> &p_ev);