1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-07 12:30:27 +00:00

Texture region now updates when changing an Atlas

- Removed atlas_changed signal for AtlasTexture
- Changes are now handled by _notify_change
- Removed unneccesary signal connections
- Texture preview now updates in real-time

Fixed TextureRegionEditor constantly regenerating
This commit is contained in:
Robert Hernandez
2017-03-29 19:30:24 -04:00
parent 198bd9db02
commit f0f407e76e
7 changed files with 37 additions and 31 deletions

View File

@@ -617,38 +617,24 @@ void TextureRegionEditor::_bind_methods() {
}
void TextureRegionEditor::edit(Object *p_obj) {
if (node_sprite && node_sprite->is_connected("texture_changed", this, "_edit_region"))
node_sprite->disconnect("texture_changed", this, "_edit_region");
if (node_patch9 && node_patch9->is_connected("texture_changed", this, "_edit_region"))
node_patch9->disconnect("texture_changed", this, "_edit_region");
if (obj_styleBox.is_valid() && obj_styleBox->is_connected("texture_changed", this, "_edit_region"))
obj_styleBox->disconnect("texture_changed", this, "_edit_region");
if (atlas_tex.is_valid() && atlas_tex->is_connected("atlas_changed", this, "_edit_region"))
atlas_tex->disconnect("atlas_changed", this, "_edit_region");
if (node_sprite)
node_sprite->remove_change_receptor(this);
if (node_patch9)
node_patch9->remove_change_receptor(this);
if (obj_styleBox.is_valid())
obj_styleBox->remove_change_receptor(this);
if (atlas_tex.is_valid())
atlas_tex->remove_change_receptor(this);
if (p_obj) {
node_sprite = p_obj->cast_to<Sprite>();
node_patch9 = p_obj->cast_to<NinePatchRect>();
if (p_obj->cast_to<StyleBoxTexture>())
obj_styleBox = Ref<StyleBoxTexture>(p_obj->cast_to<StyleBoxTexture>());
if (p_obj->cast_to<AtlasTexture>()) {
if (p_obj->cast_to<AtlasTexture>())
atlas_tex = Ref<AtlasTexture>(p_obj->cast_to<AtlasTexture>());
atlas_tex->connect("atlas_changed", this, "_edit_region");
} else {
p_obj->connect("texture_changed", this, "_edit_region");
}
p_obj->add_change_receptor(this);
p_obj->connect("tree_exited", this, "_node_removed", varray(p_obj), CONNECT_ONESHOT);
_edit_region();
} else {
if (node_sprite)
node_sprite->disconnect("tree_exited", this, "_node_removed");
else if (node_patch9)
node_patch9->disconnect("tree_exited", this, "_node_removed");
else if (obj_styleBox.is_valid())
obj_styleBox->disconnect("tree_exited", this, "_node_removed");
else if (atlas_tex.is_valid())
atlas_tex->disconnect("tree_exited", this, "_node_removed");
node_sprite = NULL;
node_patch9 = NULL;
obj_styleBox = Ref<StyleBoxTexture>(NULL);
@@ -658,9 +644,11 @@ void TextureRegionEditor::edit(Object *p_obj) {
}
void TextureRegionEditor::_changed_callback(Object *p_changed, const char *p_prop) {
if ((String)p_prop == "region_rect") {
if (!is_visible())
return;
if (p_prop == StringName("atlas") || p_prop == StringName("texture"))
_edit_region();
}
}
void TextureRegionEditor::_edit_region() {