Fix exporting one tag without "play subtags/repeats" and changing its anidir (fix #4297)

This commit is contained in:
Martín Capello 2024-02-09 17:31:25 -03:00
parent 45e74c7338
commit a7d4c23af9
3 changed files with 40 additions and 1 deletions

View File

@ -195,6 +195,18 @@ doc::Tag* calculate_frames_sequence(const Site& site,
SelectedFrames selFrames;
tag = calculate_selected_frames(site, framesValue, selFrames);
framesSeq = FramesSequence(selFrames);
switch (aniDir) {
case AniDir::REVERSE:
framesSeq = framesSeq.makeReverse();
break;
case AniDir::PING_PONG:
framesSeq = framesSeq.makePingPong();
break;
case AniDir::PING_PONG_REVERSE:
framesSeq = framesSeq.makeReverse();
framesSeq = framesSeq.makePingPong();
break;
}
}
else {
frame_t start = 0;

View File

@ -171,7 +171,7 @@ FramesSequence FramesSequence::makePingPong() const
if (i == 0) reversedRange.toFrame+=step;
if (j == 0) reversedRange.fromFrame-=step;
if (reversedRange.fromFrame != reversedRange.toFrame)
if (reversedRange != range)
newFrames.m_ranges.insert(
newFrames.m_ranges.begin() + n,
reversedRange);

View File

@ -196,6 +196,33 @@ TEST(FramesSequence, MakeReverse)
EXPECT_EQ(1, res[13]);
}
TEST(FramesSequence, MakePingPong)
{
FramesSequence f;
f.insert(1, 3);
EXPECT_EQ(3, f.size());
EXPECT_EQ(1, f.ranges());
f = f.makePingPong();
EXPECT_EQ(4, f.size());
EXPECT_EQ(2, f.ranges());
FramesSequence f2;
f2.insert(1, 2);
EXPECT_EQ(2, f2.size());
EXPECT_EQ(1, f2.ranges());
f2 = f2.makePingPong();
EXPECT_EQ(2, f2.size());
EXPECT_EQ(1, f2.ranges());
FramesSequence f3;
f3.insert(1, 1);
EXPECT_EQ(1, f3.size());
EXPECT_EQ(1, f3.ranges());
f3 = f3.makePingPong();
EXPECT_EQ(1, f3.size());
EXPECT_EQ(1, f3.ranges());
}
TEST(FramesSequence, MakePingPongAndFilter)
{
FramesSequence f;