mirror of
https://github.com/aseprite/aseprite.git
synced 2024-09-15 15:14:16 +00:00
Simplify onion skinning ignoring subtags
This commit is contained in:
parent
6c2d2f6f79
commit
fafaf85b29
@ -56,13 +56,14 @@ static Tag* make_tag(const char* name, frame_t from, frame_t to, AniDir aniDir,
|
||||
}
|
||||
|
||||
static void expect_frames(Playback& play,
|
||||
const std::vector<frame_t>& expected)
|
||||
const std::vector<frame_t>& expected,
|
||||
frame_t frameDelta = frame_t(+1))
|
||||
{
|
||||
std::vector<frame_t> result;
|
||||
result.push_back(play.frame());
|
||||
for (int i=1; i<expected.size(); ++i) {
|
||||
PLAY_TRACE("[", i, "]");
|
||||
result.push_back(play.nextFrame());
|
||||
result.push_back(play.nextFrame(frameDelta));
|
||||
}
|
||||
|
||||
for (int i=0; i<expected.size(); ++i) {
|
||||
@ -131,6 +132,14 @@ TEST(Playback, LoopSpriteStartFromFrame2)
|
||||
EXPECT_FALSE(play.isStopped());
|
||||
}
|
||||
|
||||
TEST(Playback, LoopSpriteReverse)
|
||||
{
|
||||
auto sprite = make_sprite(4);
|
||||
Playback play(sprite.get(), 2, Playback::Mode::PlayInLoop);
|
||||
expect_frames(play, {2,1,0,3,2,1,0,3}, -1);
|
||||
EXPECT_FALSE(play.isStopped());
|
||||
}
|
||||
|
||||
TEST(Playback, WithTagRepetitions)
|
||||
{
|
||||
Tag* a = make_tag("A", 1, 2, AniDir::FORWARD, 2);
|
||||
@ -147,6 +156,10 @@ TEST(Playback, WithTagRepetitions)
|
||||
|
||||
TEST(Playback, LoopTagInfinite)
|
||||
{
|
||||
// A
|
||||
// -->
|
||||
// 0 1 2 4
|
||||
|
||||
Tag* a = make_tag("A", 1, 2, AniDir::FORWARD, 0);
|
||||
auto sprite = make_sprite(4, { a });
|
||||
Playback play(sprite.get(), 0, Playback::Mode::PlayInLoop, a);
|
||||
@ -154,9 +167,23 @@ TEST(Playback, LoopTagInfinite)
|
||||
EXPECT_FALSE(play.isStopped());
|
||||
}
|
||||
|
||||
TEST(Playback, LoopTagInfiniteAndFinite)
|
||||
TEST(Playback, LoopInfiniteReverse)
|
||||
{
|
||||
// A
|
||||
// A
|
||||
// -->
|
||||
// 0 1 2 4
|
||||
|
||||
Tag* a = make_tag("A", 1, 2, AniDir::FORWARD, 0);
|
||||
auto sprite = make_sprite(4, { a });
|
||||
Playback play(sprite.get(), TagsList(), // Ignore tags
|
||||
0, Playback::Mode::PlayInLoop, nullptr);
|
||||
expect_frames(play, {0,3,2,1,0,3,2,1,0}, -1);
|
||||
EXPECT_FALSE(play.isStopped());
|
||||
}
|
||||
|
||||
TEST(Playback, LoopTagFinite)
|
||||
{
|
||||
// A
|
||||
// -->
|
||||
// 0 1 2 3
|
||||
|
||||
|
@ -854,10 +854,12 @@ void Render::renderOnionskin(
|
||||
Tag* loop = m_onionskin.loopTag();
|
||||
Layer* onionLayer = (m_onionskin.layer() ? m_onionskin.layer():
|
||||
m_sprite->root());
|
||||
Playback play(m_sprite, frame,
|
||||
loop ? Playback::PlayInLoop:
|
||||
Playback::PlayOnce,
|
||||
loop);
|
||||
Playback play(
|
||||
m_sprite,
|
||||
TagsList(), // TODO add an onionskin option to iterate subtags
|
||||
frame,
|
||||
Playback::PlayInLoop,
|
||||
loop);
|
||||
play.nextFrame(-m_onionskin.prevFrames());
|
||||
|
||||
for (frame_t frameOut = frame - m_onionskin.prevFrames();
|
||||
|
Loading…
Reference in New Issue
Block a user