Merge pull request #8209 from robertdhernandez/Texture-Region-Editor-Sync

Texture region now updates when changing an Atlas region rect
This commit is contained in:
Rémi Verschelde 2017-08-01 00:15:37 +02:00 committed by GitHub
commit 85088275c5
7 changed files with 37 additions and 31 deletions

View file

@ -102,14 +102,24 @@ void TextureEditor::_notification(int p_what) {
}
}
void TextureEditor::_changed_callback(Object *p_changed, const char *p_prop) {
if (!is_visible())
return;
update();
}
void TextureEditor::edit(Ref<Texture> p_texture) {
if (!texture.is_null())
texture->remove_change_receptor(this);
texture = p_texture;
if (!texture.is_null())
if (!texture.is_null()) {
texture->add_change_receptor(this);
update();
else {
} else {
hide();
}
}

View file

@ -43,6 +43,7 @@ class TextureEditor : public Control {
protected:
void _notification(int p_what);
void _gui_input(Ref<InputEvent> p_event);
void _changed_callback(Object *p_changed, const char *p_prop);
static void _bind_methods();
public:

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() {

View file

@ -109,6 +109,7 @@ void Sprite::set_texture(const Ref<Texture> &p_texture) {
update();
emit_signal("texture_changed");
item_rect_changed();
_change_notify("texture");
}
void Sprite::set_normal_map(const Ref<Texture> &p_texture) {

View file

@ -99,6 +99,7 @@ void NinePatchRect::set_texture(const Ref<Texture> &p_tex) {
*/
minimum_size_changed();
emit_signal("texture_changed");
_change_notify("texture");
}
Ref<Texture> NinePatchRect::get_texture() const {

View file

@ -107,6 +107,7 @@ void StyleBoxTexture::set_texture(RES p_texture) {
region_rect = Rect2(Point2(), texture->get_size());
emit_signal("texture_changed");
emit_changed();
_change_notify("texture");
}
RES StyleBoxTexture::get_texture() const {

View file

@ -830,7 +830,7 @@ void AtlasTexture::set_atlas(const Ref<Texture> &p_atlas) {
return;
atlas = p_atlas;
emit_changed();
emit_signal("atlas_changed");
_change_notify("atlas");
}
Ref<Texture> AtlasTexture::get_atlas() const {
@ -839,8 +839,11 @@ Ref<Texture> AtlasTexture::get_atlas() const {
void AtlasTexture::set_region(const Rect2 &p_region) {
if (region == p_region)
return;
region = p_region;
emit_changed();
_change_notify("region");
}
Rect2 AtlasTexture::get_region() const {
@ -850,8 +853,11 @@ Rect2 AtlasTexture::get_region() const {
void AtlasTexture::set_margin(const Rect2 &p_margin) {
if (margin == p_margin)
return;
margin = p_margin;
emit_changed();
_change_notify("margin");
}
Rect2 AtlasTexture::get_margin() const {
@ -870,8 +876,6 @@ void AtlasTexture::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_margin", "margin"), &AtlasTexture::set_margin);
ClassDB::bind_method(D_METHOD("get_margin"), &AtlasTexture::get_margin);
ADD_SIGNAL(MethodInfo("atlas_changed"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "atlas", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_atlas", "get_atlas");
ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region"), "set_region", "get_region");
ADD_PROPERTY(PropertyInfo(Variant::RECT2, "margin"), "set_margin", "get_margin");