summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-06-20 09:21:15 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-06-20 09:21:15 +0200
commit94a4da9de60170e8b634fb7cc793cd4be43b9496 (patch)
tree0a5f696bbe2247ff938229261472a30f675ada0a
parent0653f7a5b05861288d6ffe519de2a2cf5ee21d8e (diff)
parent4492f7ff970e766dccf85e4a59c9a984ebfb759b (diff)
downloadredot-engine-94a4da9de60170e8b634fb7cc793cd4be43b9496.tar.gz
Merge pull request #78236 from AThousandShips/nine_tex_fix
Make `NinePatchRect` listen to texture changes
-rw-r--r--scene/gui/nine_patch_rect.cpp16
-rw-r--r--scene/gui/nine_patch_rect.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/scene/gui/nine_patch_rect.cpp b/scene/gui/nine_patch_rect.cpp
index d0618c7c2f..68e2db7cfd 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<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);
diff --git a/scene/gui/nine_patch_rect.h b/scene/gui/nine_patch_rect.h
index 134b23c3d6..ae9fab1773 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;