Make `NinePatchRect` listen to texture changes

This commit is contained in:
Ninni Pipping 2023-06-14 10:33:04 +02:00
parent 217a20a8a0
commit 4492f7ff97
2 changed files with 18 additions and 0 deletions

View File

@ -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<Texture2D> &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);

View File

@ -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;