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