diff --git a/src/app/script/userdata.h b/src/app/script/userdata.h index ae3459410..65af696b0 100644 --- a/src/app/script/userdata.h +++ b/src/app/script/userdata.h @@ -54,28 +54,38 @@ int UserData_get_color(lua_State* L) { template int UserData_set_text(lua_State* L) { auto obj = get_docobj(L, 1); - Sprite* sprite = get_docobj(L, 1); + auto spr = obj->sprite(); const char* text = lua_tostring(L, 2); auto wud = get_WithUserData(obj); UserData ud = wud->userData(); ud.setText(text); - Tx tx; - tx(new cmd::SetUserData(wud, ud, static_cast(sprite->document()))); - tx.commit(); + if (spr) { + Tx tx; + tx(new cmd::SetUserData(wud, ud, static_cast(spr->document()))); + tx.commit(); + } + else { + wud->setUserData(ud); + } return 0; } template int UserData_set_color(lua_State* L) { auto obj = get_docobj(L, 1); - Sprite* sprite = get_docobj(L, 1); + auto spr = obj->sprite(); doc::color_t docColor = convert_args_into_pixel_color(L, 2, doc::IMAGE_RGB); auto wud = get_WithUserData(obj); UserData ud = wud->userData(); ud.setColor(docColor); - Tx tx; - tx(new cmd::SetUserData(wud, ud, static_cast(sprite->document()))); - tx.commit(); + if (spr) { + Tx tx; + tx(new cmd::SetUserData(wud, ud, static_cast(spr->document()))); + tx.commit(); + } + else { + wud->setUserData(ud); + } return 0; } diff --git a/src/doc/slice.cpp b/src/doc/slice.cpp index 1fa10d62c..f20c2f2c5 100644 --- a/src/doc/slice.cpp +++ b/src/doc/slice.cpp @@ -1,4 +1,5 @@ // Aseprite Document Library +// Copyright (c) 2020 Igara Studio S.A. // Copyright (c) 2017 David Capello // // This file is released under the terms of the MIT license. @@ -75,6 +76,14 @@ Slice::iterator Slice::getIteratorByFrame(const frame_t frame) const return const_cast(this)->m_keys.getIterator(frame); } +Sprite* Slice::sprite() const +{ + if (m_owner) + return m_owner->sprite(); + else + return nullptr; +} + void Slice::setOwner(Slices* owner) { m_owner = owner; diff --git a/src/doc/slice.h b/src/doc/slice.h index 1c7fb73e8..e337d8df2 100644 --- a/src/doc/slice.h +++ b/src/doc/slice.h @@ -1,5 +1,5 @@ // Aseprite Document Library -// Copyright (C) 2019 Igara Studio S.A. +// Copyright (C) 2019-2020 Igara Studio S.A. // Copyright (C) 2017 David Capello // // This file is released under the terms of the MIT license. @@ -19,6 +19,7 @@ namespace doc { class Slices; + class Sprite; class SliceKey { public: @@ -72,6 +73,7 @@ namespace doc { std::size_t size() const { return m_keys.size(); } bool empty() const { return m_keys.empty(); } + Sprite* sprite() const; Slices* owner() const { return m_owner; } frame_t fromFrame() const { return m_keys.fromFrame(); } frame_t toFrame() const { return m_keys.toFrame(); } diff --git a/src/doc/tag.cpp b/src/doc/tag.cpp index 6cb03f869..cd3c69a82 100644 --- a/src/doc/tag.cpp +++ b/src/doc/tag.cpp @@ -43,6 +43,14 @@ Tag::~Tag() ASSERT(!m_owner); } +Sprite* Tag::sprite() const +{ + if (m_owner) + return m_owner->sprite(); + else + return nullptr; +} + void Tag::setOwner(Tags* owner) { m_owner = owner; diff --git a/src/doc/tag.h b/src/doc/tag.h index 4fd116ce0..1fac5ba6d 100644 --- a/src/doc/tag.h +++ b/src/doc/tag.h @@ -18,6 +18,7 @@ #include namespace doc { + class Sprite; class Tags; class Tag : public WithUserData { @@ -26,6 +27,7 @@ namespace doc { Tag(const Tag& other); ~Tag(); + Sprite* sprite() const; Tags* owner() const { return m_owner; } frame_t fromFrame() const { return m_from; } frame_t toFrame() const { return m_to; }