diff options
author | Juan Linietsky <reduzio@gmail.com> | 2018-03-10 13:33:32 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-10 13:33:32 -0300 |
commit | eceba5aa6a36521c878cf976845123e820d27161 (patch) | |
tree | a59fb710d69b989a6391affb80054f92a74e1621 /scene | |
parent | aeb1c67b5b55c769256a8ffc2f9d9095d6fc74da (diff) | |
parent | a23c0877f1bb26edb75aa344f1049a7b7a91f079 (diff) |
Merge pull request #17417 from ShyRed/texturechangedupdate
Update Sprite when its Texture changes
Diffstat (limited to 'scene')
-rw-r--r-- | scene/2d/sprite.cpp | 22 | ||||
-rw-r--r-- | scene/2d/sprite.h | 3 |
2 files changed, 25 insertions, 0 deletions
diff --git a/scene/2d/sprite.cpp b/scene/2d/sprite.cpp index e3fa1fdcb7..67f016ae79 100644 --- a/scene/2d/sprite.cpp +++ b/scene/2d/sprite.cpp @@ -121,7 +121,15 @@ void Sprite::set_texture(const Ref<Texture> &p_texture) { if (p_texture == texture) return; + + if (texture.is_valid()) + texture->remove_change_receptor(this); + texture = p_texture; + + if (texture.is_valid()) + texture->add_change_receptor(this); + update(); emit_signal("texture_changed"); item_rect_changed(); @@ -362,6 +370,15 @@ void Sprite::_validate_property(PropertyInfo &property) const { } } +void Sprite::_changed_callback(Object *p_changed, const char *p_prop) { + + // Changes to the texture need to trigger an update to make + // the editor redraw the sprite with the updated texture. + if (texture.is_valid() && texture.ptr() == p_changed) { + update(); + } +} + void Sprite::_bind_methods() { ClassDB::bind_method(D_METHOD("set_texture", "texture"), &Sprite::set_texture); @@ -436,3 +453,8 @@ Sprite::Sprite() { vframes = 1; hframes = 1; } + +Sprite::~Sprite() { + if (texture.is_valid()) + texture->remove_change_receptor(this); +} diff --git a/scene/2d/sprite.h b/scene/2d/sprite.h index dd3719099f..abd04515ec 100644 --- a/scene/2d/sprite.h +++ b/scene/2d/sprite.h @@ -64,6 +64,8 @@ protected: virtual void _validate_property(PropertyInfo &property) const; + virtual void _changed_callback(Object *p_changed, const char *p_prop); + public: virtual Dictionary _edit_get_state() const; virtual void _edit_set_state(const Dictionary &p_state); @@ -113,6 +115,7 @@ public: Rect2 get_rect() const; Sprite(); + ~Sprite(); }; #endif // SPRITE_H |