1 /*
2 * Copyright (c) 2024 the ThorVG project. All rights reserved.
3
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10
11 * The above copyright notice and this permission notice shall be included in all
12 * copies or substantial portions of the Software.
13
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 * SOFTWARE.
21 */
22
23 #include "../../lv_conf_internal.h"
24 #if LV_USE_THORVG_INTERNAL
25
26 #include "tvgCommon.h"
27 #include "thorvg_lottie.h"
28 #include "tvgLottieLoader.h"
29 #include "tvgAnimation.h"
30
31
32 /************************************************************************/
33 /* Internal Class Implementation */
34 /************************************************************************/
35
36 /************************************************************************/
37 /* External Class Implementation */
38 /************************************************************************/
39
~LottieAnimation()40 LottieAnimation::~LottieAnimation()
41 {
42 }
43
44
override(const char * slot)45 Result LottieAnimation::override(const char* slot) noexcept
46 {
47 if (!pImpl->picture->pImpl->loader) return Result::InsufficientCondition;
48
49 if (static_cast<LottieLoader*>(pImpl->picture->pImpl->loader)->override(slot)) return Result::Success;
50
51 return Result::InvalidArguments;
52 }
53
54
segment(const char * marker)55 Result LottieAnimation::segment(const char* marker) noexcept
56 {
57 auto loader = pImpl->picture->pImpl->loader;
58 if (!loader) return Result::InsufficientCondition;
59
60 if (!marker) {
61 static_cast<FrameModule*>(loader)->segment(0.0f, 1.0f);
62 return Result::Success;
63 }
64
65 float begin, end;
66 if (!static_cast<LottieLoader*>(loader)->segment(marker, begin, end)) return Result::InvalidArguments;
67
68 return static_cast<Animation*>(this)->segment(begin, end);
69 }
70
71
markersCnt()72 uint32_t LottieAnimation::markersCnt() noexcept
73 {
74 auto loader = pImpl->picture->pImpl->loader;
75 if (!loader) return 0;
76 return static_cast<LottieLoader*>(loader)->markersCnt();
77 }
78
79
marker(uint32_t idx)80 const char* LottieAnimation::marker(uint32_t idx) noexcept
81 {
82 auto loader = pImpl->picture->pImpl->loader;
83 if (!loader) return nullptr;
84 return static_cast<LottieLoader*>(loader)->markers(idx);
85 }
86
87
gen()88 unique_ptr<LottieAnimation> LottieAnimation::gen() noexcept
89 {
90 return unique_ptr<LottieAnimation>(new LottieAnimation);
91 }
92
93 #endif /* LV_USE_THORVG_INTERNAL */
94
95