summaryrefslogtreecommitdiff
path: root/scene/resources/texture.cpp
diff options
context:
space:
mode:
authorMicky <micheledevita2@gmail.com>2022-09-27 18:53:14 +0200
committerMicky <micheledevita2@gmail.com>2022-10-04 17:09:37 +0200
commit1518d813beaa918abe9b60eee8b44e75ba150efb (patch)
tree5a56cae8038ddd6388663c2fa7993f542a33da87 /scene/resources/texture.cpp
parent0056acf46fc88757cae9d9f6fe9805f0eec1cd09 (diff)
Support nesting AtlasTextures inside other AtlasTextures
Connects AtlasTexture to its `atlas`'s "changed" signal, allowing it to detect property changes to `atlas` and update accordingly, when the project is running and in the editor, as well.
Diffstat (limited to 'scene/resources/texture.cpp')
-rw-r--r--scene/resources/texture.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp
index 15678c9281..5a03929f98 100644
--- a/scene/resources/texture.cpp
+++ b/scene/resources/texture.cpp
@@ -1489,7 +1489,15 @@ void AtlasTexture::set_atlas(const Ref<Texture2D> &p_atlas) {
if (atlas == p_atlas) {
return;
}
+ // Support recursive AtlasTextures.
+ if (Ref<AtlasTexture>(atlas).is_valid()) {
+ atlas->disconnect(CoreStringNames::get_singleton()->changed, callable_mp((Resource *)this, &AtlasTexture::emit_changed));
+ }
atlas = p_atlas;
+ if (Ref<AtlasTexture>(atlas).is_valid()) {
+ atlas->connect(CoreStringNames::get_singleton()->changed, callable_mp((Resource *)this, &AtlasTexture::emit_changed));
+ }
+
emit_changed();
}