Parcourir la source

Merge pull request #78236 from AThousandShips/nine_tex_fix

Make `NinePatchRect` listen to texture changes
Rémi Verschelde il y a 2 ans
Parent
commit
94a4da9de6
2 fichiers modifiés avec 18 ajouts et 0 suppressions
  1. 16 0
      scene/gui/nine_patch_rect.cpp
  2. 2 0
      scene/gui/nine_patch_rect.h

+ 16 - 0
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);

+ 2 - 0
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;