From a7d4c23af9ab7995623b1a912bb4800247b77008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Capello?= Date: Fri, 9 Feb 2024 17:31:25 -0300 Subject: [PATCH] Fix exporting one tag without "play subtags/repeats" and changing its anidir (fix #4297) --- src/app/ui/layer_frame_comboboxes.cpp | 12 ++++++++++++ src/doc/frames_sequence.cpp | 2 +- src/doc/frames_sequence_tests.cpp | 27 +++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/app/ui/layer_frame_comboboxes.cpp b/src/app/ui/layer_frame_comboboxes.cpp index 19e0d2a0d..a2851fa85 100644 --- a/src/app/ui/layer_frame_comboboxes.cpp +++ b/src/app/ui/layer_frame_comboboxes.cpp @@ -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; diff --git a/src/doc/frames_sequence.cpp b/src/doc/frames_sequence.cpp index 55cc47840..5248ab604 100644 --- a/src/doc/frames_sequence.cpp +++ b/src/doc/frames_sequence.cpp @@ -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); diff --git a/src/doc/frames_sequence_tests.cpp b/src/doc/frames_sequence_tests.cpp index 8451faa9f..f3b4c8d29 100644 --- a/src/doc/frames_sequence_tests.cpp +++ b/src/doc/frames_sequence_tests.cpp @@ -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;