diff --git a/scene/gui/nine_patch_rect.cpp b/scene/gui/nine_patch_rect.cpp index d0618c7c2fa..68e2db7cfda 100644 --- a/scene/gui/nine_patch_rect.cpp +++ b/scene/gui/nine_patch_rect.cpp @@ -30,6 +30,7 @@ #include "nine_patch_rect.h" +#include "core/core_string_names.h" #include "scene/scene_string_names.h" #include "servers/rendering_server.h" @@ -89,11 +90,26 @@ void NinePatchRect::_bind_methods() { BIND_ENUM_CONSTANT(AXIS_STRETCH_MODE_TILE_FIT); } +void NinePatchRect::_texture_changed() { + queue_redraw(); + update_minimum_size(); +} + void NinePatchRect::set_texture(const Ref &p_tex) { if (texture == p_tex) { return; } + + if (texture.is_valid()) { + texture->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &NinePatchRect::_texture_changed)); + } + texture = p_tex; + + if (texture.is_valid()) { + texture->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &NinePatchRect::_texture_changed)); + } + queue_redraw(); update_minimum_size(); emit_signal(SceneStringNames::get_singleton()->texture_changed); diff --git a/scene/gui/nine_patch_rect.h b/scene/gui/nine_patch_rect.h index 134b23c3d68..ae9fab17739 100644 --- a/scene/gui/nine_patch_rect.h +++ b/scene/gui/nine_patch_rect.h @@ -51,6 +51,8 @@ public: AxisStretchMode axis_h = AXIS_STRETCH_MODE_STRETCH; AxisStretchMode axis_v = AXIS_STRETCH_MODE_STRETCH; + void _texture_changed(); + protected: void _notification(int p_what); virtual Size2 get_minimum_size() const override;