[lua] Fix functions to set/get user data with cmd::SetUserData + DocEvent

This commit is contained in:
David Capello 2020-10-13 11:53:30 -03:00
parent 13addb4336
commit 84dbb5557e
5 changed files with 40 additions and 9 deletions

View File

@ -54,28 +54,38 @@ int UserData_get_color(lua_State* L) {
template<typename T>
int UserData_set_text(lua_State* L) {
auto obj = get_docobj<T>(L, 1);
Sprite* sprite = get_docobj<Sprite>(L, 1);
auto spr = obj->sprite();
const char* text = lua_tostring(L, 2);
auto wud = get_WithUserData<T>(obj);
UserData ud = wud->userData();
ud.setText(text);
Tx tx;
tx(new cmd::SetUserData(wud, ud, static_cast<Doc*>(sprite->document())));
tx.commit();
if (spr) {
Tx tx;
tx(new cmd::SetUserData(wud, ud, static_cast<Doc*>(spr->document())));
tx.commit();
}
else {
wud->setUserData(ud);
}
return 0;
}
template<typename T>
int UserData_set_color(lua_State* L) {
auto obj = get_docobj<T>(L, 1);
Sprite* sprite = get_docobj<Sprite>(L, 1);
auto spr = obj->sprite();
doc::color_t docColor = convert_args_into_pixel_color(L, 2, doc::IMAGE_RGB);
auto wud = get_WithUserData<T>(obj);
UserData ud = wud->userData();
ud.setColor(docColor);
Tx tx;
tx(new cmd::SetUserData(wud, ud, static_cast<Doc*>(sprite->document())));
tx.commit();
if (spr) {
Tx tx;
tx(new cmd::SetUserData(wud, ud, static_cast<Doc*>(spr->document())));
tx.commit();
}
else {
wud->setUserData(ud);
}
return 0;
}

View File

@ -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<Slice*>(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;

View File

@ -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(); }

View File

@ -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;

View File

@ -18,6 +18,7 @@
#include <string>
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; }