summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
Diffstat (limited to 'scene')
-rw-r--r--scene/gui/file_dialog.cpp3
-rw-r--r--scene/gui/popup_menu.cpp2
-rw-r--r--scene/main/viewport.cpp7
-rw-r--r--scene/main/viewport.h1
-rw-r--r--scene/register_scene_types.cpp68
-rw-r--r--scene/resources/dynamic_font.h1
-rw-r--r--scene/resources/dynamic_font_stb.h1
-rw-r--r--scene/resources/font.h1
-rw-r--r--scene/resources/scene_format_text.h3
-rw-r--r--scene/resources/shader.h2
-rw-r--r--scene/resources/texture.h2
11 files changed, 56 insertions, 35 deletions
diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp
index 1e9f4df4a3..a869f7cfcd 100644
--- a/scene/gui/file_dialog.cpp
+++ b/scene/gui/file_dialog.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "file_dialog.h"
+
#include "core/os/keyboard.h"
#include "core/print_string.h"
#include "scene/gui/label.h"
@@ -596,7 +597,7 @@ void FileDialog::set_current_file(const String &p_file) {
int lp = p_file.find_last(".");
if (lp != -1) {
file->select(0, lp);
- if (file->is_inside_tree())
+ if (file->is_inside_tree() && !get_tree()->is_node_being_edited(file))
file->grab_focus();
}
}
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index f621522102..82d6e6480e 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -453,7 +453,6 @@ void PopupMenu::_notification(int p_what) {
Color icon_color(1, 1, 1, items[i].disabled ? 0.5 : 1);
- item_ofs.x += items[i].h_ofs;
if (!items[i].icon.is_null()) {
icon_size = items[i].icon->get_size();
@@ -470,6 +469,7 @@ void PopupMenu::_notification(int p_what) {
String text = items[i].shortcut.is_valid() ? String(tr(items[i].shortcut->get_name())) : items[i].xl_text;
+ item_ofs.x += items[i].h_ofs;
if (items[i].separator) {
int sep_h = separator->get_center_size().height + separator->get_minimum_size().height;
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 5b1c2d8020..b220df6ce1 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -1727,6 +1727,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
gui.mouse_focus = _gui_find_control(pos);
gui.mouse_focus_mask = 1 << (mb->get_button_index() - 1);
+ gui.last_mouse_focus = gui.mouse_focus;
if (!gui.mouse_focus) {
return;
@@ -2114,14 +2115,14 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
set_input_as_handled();
return;
}
- } else if (gui.mouse_focus) {
+ } else if (touch_event->get_index() == 0 && gui.last_mouse_focus) {
- if (gui.mouse_focus->can_process()) {
+ if (gui.last_mouse_focus->can_process()) {
touch_event = touch_event->xformed_by(Transform2D()); //make a copy
touch_event->set_position(gui.focus_inv_xform.xform(pos));
- _gui_call_input(gui.mouse_focus, touch_event);
+ _gui_call_input(gui.last_mouse_focus, touch_event);
}
set_input_as_handled();
return;
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index 278350b1c9..6b6ca3b7db 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -271,6 +271,7 @@ private:
bool key_event_accepted;
Control *mouse_focus;
+ Control *last_mouse_focus;
Control *mouse_click_grabber;
int mouse_focus_mask;
Control *key_focus;
diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp
index d7750c91ef..ae6211a3df 100644
--- a/scene/register_scene_types.cpp
+++ b/scene/register_scene_types.cpp
@@ -210,18 +210,18 @@
#include "scene/resources/physics_material.h"
#endif
-static ResourceFormatSaverText *resource_saver_text = NULL;
-static ResourceFormatLoaderText *resource_loader_text = NULL;
+static Ref<ResourceFormatSaverText> resource_saver_text;
+static Ref<ResourceFormatLoaderText> resource_loader_text;
-static ResourceFormatLoaderDynamicFont *resource_loader_dynamic_font = NULL;
+static Ref<ResourceFormatLoaderDynamicFont> resource_loader_dynamic_font;
-static ResourceFormatLoaderStreamTexture *resource_loader_stream_texture = NULL;
-static ResourceFormatLoaderTextureLayered *resource_loader_texture_layered = NULL;
+static Ref<ResourceFormatLoaderStreamTexture> resource_loader_stream_texture;
+static Ref<ResourceFormatLoaderTextureLayered> resource_loader_texture_layered;
-static ResourceFormatLoaderBMFont *resource_loader_bmfont = NULL;
+static Ref<ResourceFormatLoaderBMFont> resource_loader_bmfont;
-static ResourceFormatSaverShader *resource_saver_shader = NULL;
-static ResourceFormatLoaderShader *resource_loader_shader = NULL;
+static Ref<ResourceFormatSaverShader> resource_saver_shader;
+static Ref<ResourceFormatLoaderShader> resource_loader_shader;
void register_scene_types() {
@@ -231,28 +231,28 @@ void register_scene_types() {
Node::init_node_hrcr();
- resource_loader_dynamic_font = memnew(ResourceFormatLoaderDynamicFont);
+ resource_loader_dynamic_font.instance();
ResourceLoader::add_resource_format_loader(resource_loader_dynamic_font);
- resource_loader_stream_texture = memnew(ResourceFormatLoaderStreamTexture);
+ resource_loader_stream_texture.instance();
ResourceLoader::add_resource_format_loader(resource_loader_stream_texture);
- resource_loader_texture_layered = memnew(ResourceFormatLoaderTextureLayered);
+ resource_loader_texture_layered.instance();
ResourceLoader::add_resource_format_loader(resource_loader_texture_layered);
- resource_saver_text = memnew(ResourceFormatSaverText);
+ resource_saver_text.instance();
ResourceSaver::add_resource_format_saver(resource_saver_text, true);
- resource_loader_text = memnew(ResourceFormatLoaderText);
+ resource_loader_text.instance();
ResourceLoader::add_resource_format_loader(resource_loader_text, true);
- resource_saver_shader = memnew(ResourceFormatSaverShader);
+ resource_saver_shader.instance();
ResourceSaver::add_resource_format_saver(resource_saver_shader, true);
- resource_loader_shader = memnew(ResourceFormatLoaderShader);
+ resource_loader_shader.instance();
ResourceLoader::add_resource_format_loader(resource_loader_shader, true);
- resource_loader_bmfont = memnew(ResourceFormatLoaderBMFont);
+ resource_loader_bmfont.instance();
ResourceLoader::add_resource_format_loader(resource_loader_bmfont, true);
OS::get_singleton()->yield(); //may take time to init
@@ -735,27 +735,37 @@ void unregister_scene_types() {
clear_default_theme();
- memdelete(resource_loader_dynamic_font);
- memdelete(resource_loader_stream_texture);
- memdelete(resource_loader_texture_layered);
+ ResourceLoader::remove_resource_format_loader(resource_loader_dynamic_font);
+ resource_loader_dynamic_font.unref();
+
+ ResourceLoader::remove_resource_format_loader(resource_loader_texture_layered);
+ resource_loader_texture_layered.unref();
+
+ ResourceLoader::remove_resource_format_loader(resource_loader_stream_texture);
+ resource_loader_stream_texture.unref();
DynamicFont::finish_dynamic_fonts();
- if (resource_saver_text) {
- memdelete(resource_saver_text);
+ if (resource_saver_text.is_valid()) {
+ ResourceSaver::remove_resource_format_saver(resource_saver_text);
+ resource_saver_text.unref();
}
- if (resource_loader_text) {
- memdelete(resource_loader_text);
+ if (resource_loader_text.is_valid()) {
+ ResourceLoader::remove_resource_format_loader(resource_loader_text);
+ resource_loader_text.unref();
}
- if (resource_saver_shader) {
- memdelete(resource_saver_shader);
+ if (resource_saver_shader.is_valid()) {
+ ResourceSaver::remove_resource_format_saver(resource_saver_shader);
+ resource_saver_shader.unref();
}
- if (resource_loader_shader) {
- memdelete(resource_loader_shader);
+ if (resource_loader_shader.is_valid()) {
+ ResourceLoader::remove_resource_format_loader(resource_loader_shader);
+ resource_loader_shader.unref();
}
- if (resource_loader_bmfont) {
- memdelete(resource_loader_bmfont);
+ if (resource_loader_bmfont.is_valid()) {
+ ResourceLoader::remove_resource_format_loader(resource_loader_bmfont);
+ resource_loader_bmfont.unref();
}
SpatialMaterial::finish_shaders();
diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h
index 96437e8982..9c41c948bd 100644
--- a/scene/resources/dynamic_font.h
+++ b/scene/resources/dynamic_font.h
@@ -303,6 +303,7 @@ VARIANT_ENUM_CAST(DynamicFont::SpacingType);
/////////////
class ResourceFormatLoaderDynamicFont : public ResourceFormatLoader {
+ GDCLASS(ResourceFormatLoaderDynamicFont, ResourceFormatLoader)
public:
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
diff --git a/scene/resources/dynamic_font_stb.h b/scene/resources/dynamic_font_stb.h
index e1ef72ea4f..c83cc1b01f 100644
--- a/scene/resources/dynamic_font_stb.h
+++ b/scene/resources/dynamic_font_stb.h
@@ -180,6 +180,7 @@ public:
/////////////
class ResourceFormatLoaderDynamicFont : public ResourceFormatLoader {
+ GDCLASS(ResourceFormatLoaderDynamicFont, ResourceFormatLoader)
public:
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
diff --git a/scene/resources/font.h b/scene/resources/font.h
index 39e66a822d..3c5e650758 100644
--- a/scene/resources/font.h
+++ b/scene/resources/font.h
@@ -201,6 +201,7 @@ public:
};
class ResourceFormatLoaderBMFont : public ResourceFormatLoader {
+ GDCLASS(ResourceFormatLoaderBMFont, ResourceFormatLoader)
public:
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
diff --git a/scene/resources/scene_format_text.h b/scene/resources/scene_format_text.h
index 8d1af2bbb2..e5ee6ae760 100644
--- a/scene/resources/scene_format_text.h
+++ b/scene/resources/scene_format_text.h
@@ -128,7 +128,7 @@ public:
};
class ResourceFormatLoaderText : public ResourceFormatLoader {
-
+ GDCLASS(ResourceFormatLoaderText, ResourceFormatLoader)
public:
static ResourceFormatLoaderText *singleton;
virtual Ref<ResourceInteractiveLoader> load_interactive(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
@@ -170,6 +170,7 @@ public:
};
class ResourceFormatSaverText : public ResourceFormatSaver {
+ GDCLASS(ResourceFormatSaverText, ResourceFormatSaver)
public:
static ResourceFormatSaverText *singleton;
virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags = 0);
diff --git a/scene/resources/shader.h b/scene/resources/shader.h
index c2c205237f..6804832fb9 100644
--- a/scene/resources/shader.h
+++ b/scene/resources/shader.h
@@ -100,6 +100,7 @@ public:
VARIANT_ENUM_CAST(Shader::Mode);
class ResourceFormatLoaderShader : public ResourceFormatLoader {
+ GDCLASS(ResourceFormatLoaderShader, ResourceFormatLoader)
public:
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
@@ -108,6 +109,7 @@ public:
};
class ResourceFormatSaverShader : public ResourceFormatSaver {
+ GDCLASS(ResourceFormatSaverShader, ResourceFormatSaver)
public:
virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags = 0);
virtual void get_recognized_extensions(const RES &p_resource, List<String> *p_extensions) const;
diff --git a/scene/resources/texture.h b/scene/resources/texture.h
index e9b69e9cb1..845a075015 100644
--- a/scene/resources/texture.h
+++ b/scene/resources/texture.h
@@ -236,6 +236,7 @@ public:
};
class ResourceFormatLoaderStreamTexture : public ResourceFormatLoader {
+ GDCLASS(ResourceFormatLoaderStreamTexture, ResourceFormatLoader)
public:
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
@@ -489,6 +490,7 @@ public:
};
class ResourceFormatLoaderTextureLayered : public ResourceFormatLoader {
+ GDCLASS(ResourceFormatLoaderTextureLayered, ResourceFormatLoader)
public:
enum Compression {
COMPRESSION_LOSSLESS,