diff --git a/src/app/cmd_transaction.cpp b/src/app/cmd_transaction.cpp index 14c41da44..d062736d0 100644 --- a/src/app/cmd_transaction.cpp +++ b/src/app/cmd_transaction.cpp @@ -1,4 +1,5 @@ // Aseprite +// Copyright (C) 2019 Igara Studio S.A. // Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of @@ -38,7 +39,7 @@ void CmdTransaction::setNewDocRange(const DocRange& range) #endif } -void CmdTransaction::commit() +void CmdTransaction::updateSpritePositionAfter() { m_spritePositionAfter = calcSpritePosition(); diff --git a/src/app/cmd_transaction.h b/src/app/cmd_transaction.h index 747479089..27f6e225e 100644 --- a/src/app/cmd_transaction.h +++ b/src/app/cmd_transaction.h @@ -1,4 +1,5 @@ // Aseprite +// Copyright (C) 2019 Igara Studio S.A. // Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of @@ -25,7 +26,7 @@ namespace app { bool changeSavedState, int* savedCounter); void setNewDocRange(const DocRange& range); - void commit(); + void updateSpritePositionAfter(); SpritePosition spritePositionBeforeExecute() const { return m_spritePositionBefore; } SpritePosition spritePositionAfterExecute() const { return m_spritePositionAfter; } diff --git a/src/app/transaction.cpp b/src/app/transaction.cpp index b24682ad1..4142cd7dd 100644 --- a/src/app/transaction.cpp +++ b/src/app/transaction.cpp @@ -87,7 +87,7 @@ void Transaction::commit() ASSERT(m_cmds); TX_TRACE("TX: Commit <%s>\n", m_cmds->label().c_str()); - m_cmds->commit(); + m_cmds->updateSpritePositionAfter(); m_undo->add(m_cmds); m_cmds = nullptr; diff --git a/src/app/ui/timeline/timeline.cpp b/src/app/ui/timeline/timeline.cpp index 3d85b6a1e..bb15e9841 100644 --- a/src/app/ui/timeline/timeline.cpp +++ b/src/app/ui/timeline/timeline.cpp @@ -13,6 +13,7 @@ #include "app/app.h" #include "app/app_menus.h" +#include "app/cmd_transaction.h" #include "app/color_utils.h" #include "app/commands/command.h" #include "app/commands/commands.h" @@ -3725,6 +3726,12 @@ void Timeline::dropRange(DropOp op) !m_sprite->frameTags().empty()) { invalidateRect(getFrameHeadersBounds().offset(origin())); } + + // Update the sprite position after the command was executed + // TODO improve this workaround + Cmd* cmd = m_document->undoHistory()->lastExecutedCmd(); + if (auto cmdTx = dynamic_cast(cmd)) + cmdTx->updateSpritePositionAfter(); } catch (const std::exception& ex) { Console::showException(ex);