Update Sprite when Texture changes
Make Sprite monitor its Texture for changes and trigger an update when the sprite changes.
(cherry picked from commit a23c0877f1
)
This commit is contained in:
parent
5eef26b64e
commit
c39e32ae60
|
@ -111,7 +111,15 @@ void Sprite::set_texture(const Ref<Texture> &p_texture) {
|
||||||
|
|
||||||
if (p_texture == texture)
|
if (p_texture == texture)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (texture.is_valid())
|
||||||
|
texture->remove_change_receptor(this);
|
||||||
|
|
||||||
texture = p_texture;
|
texture = p_texture;
|
||||||
|
|
||||||
|
if (texture.is_valid())
|
||||||
|
texture->add_change_receptor(this);
|
||||||
|
|
||||||
update();
|
update();
|
||||||
emit_signal("texture_changed");
|
emit_signal("texture_changed");
|
||||||
item_rect_changed();
|
item_rect_changed();
|
||||||
|
@ -346,6 +354,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() {
|
void Sprite::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_texture", "texture"), &Sprite::set_texture);
|
ClassDB::bind_method(D_METHOD("set_texture", "texture"), &Sprite::set_texture);
|
||||||
|
@ -418,3 +435,8 @@ Sprite::Sprite() {
|
||||||
vframes = 1;
|
vframes = 1;
|
||||||
hframes = 1;
|
hframes = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Sprite::~Sprite() {
|
||||||
|
if (texture.is_valid())
|
||||||
|
texture->remove_change_receptor(this);
|
||||||
|
}
|
||||||
|
|
|
@ -64,6 +64,8 @@ protected:
|
||||||
|
|
||||||
virtual void _validate_property(PropertyInfo &property) const;
|
virtual void _validate_property(PropertyInfo &property) const;
|
||||||
|
|
||||||
|
virtual void _changed_callback(Object *p_changed, const char *p_prop);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual void _edit_set_pivot(const Point2 &p_pivot);
|
virtual void _edit_set_pivot(const Point2 &p_pivot);
|
||||||
virtual Point2 _edit_get_pivot() const;
|
virtual Point2 _edit_get_pivot() const;
|
||||||
|
@ -108,6 +110,7 @@ public:
|
||||||
int get_hframes() const;
|
int get_hframes() const;
|
||||||
|
|
||||||
Sprite();
|
Sprite();
|
||||||
|
~Sprite();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SPRITE_H
|
#endif // SPRITE_H
|
||||||
|
|
Loading…
Reference in New Issue