1/*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#include <meta/base/namespace.h>
16#include <meta/interface/animation/builtin_animations.h>
17#include <meta/interface/intf_object.h>
18#include <meta/interface/intf_object_registry.h>
19
20#include "animation/animation_controller.h"
21#include "animation/interpolator.h"
22#include "animation/keyframe_animation.h"
23#include "animation/modifiers/loop.h"
24#include "animation/modifiers/reverse.h"
25#include "animation/modifiers/speed.h"
26#include "animation/parallel_animation.h"
27#include "animation/property_animation.h"
28#include "animation/sequential_animation.h"
29#include "animation/track_animation.h"
30#include "curves/bezier_curve.h"
31#include "curves/easing_curve.h"
32
33META_BEGIN_NAMESPACE()
34
35namespace Internal {
36
37#define DECL_NO(A, B) { ObjectTypeInfo::UID }, ClassId::A, (B)
38#define DECL_AN(A, B) { ObjectTypeInfo::UID }, ClassId::A, (B)
39
40static constexpr ObjectTypeInfo OBJECTS[] = {
41    AnimationController::OBJECT_INFO,
42    KeyframeAnimation::OBJECT_INFO,
43    PropertyAnimation::OBJECT_INFO,
44    TrackAnimation::OBJECT_INFO,
45    ParallelAnimation::OBJECT_INFO,
46    SequentialAnimation::OBJECT_INFO,
47    AnimationModifiers::Loop::OBJECT_INFO,
48    AnimationModifiers::Reverse::OBJECT_INFO,
49    AnimationModifiers::SpeedImpl::OBJECT_INFO,
50
51    Curves::Easing::LinearEasingCurve::OBJECT_INFO,
52    Curves::Easing::InQuadEasingCurve::OBJECT_INFO,
53    Curves::Easing::OutQuadEasingCurve::OBJECT_INFO,
54    Curves::Easing::InOutQuadEasingCurve::OBJECT_INFO,
55    Curves::Easing::InCubicEasingCurve::OBJECT_INFO,
56    Curves::Easing::OutCubicEasingCurve::OBJECT_INFO,
57    Curves::Easing::InOutCubicEasingCurve::OBJECT_INFO,
58    Curves::Easing::InSineEasingCurve::OBJECT_INFO,
59    Curves::Easing::OutSineEasingCurve::OBJECT_INFO,
60    Curves::Easing::InOutSineEasingCurve::OBJECT_INFO,
61    Curves::Easing::InQuartEasingCurve::OBJECT_INFO,
62    Curves::Easing::OutQuartEasingCurve::OBJECT_INFO,
63    Curves::Easing::InOutQuartEasingCurve::OBJECT_INFO,
64    Curves::Easing::InQuintEasingCurve::OBJECT_INFO,
65    Curves::Easing::OutQuintEasingCurve::OBJECT_INFO,
66    Curves::Easing::InOutQuintEasingCurve::OBJECT_INFO,
67    Curves::Easing::InExpoEasingCurve::OBJECT_INFO,
68    Curves::Easing::OutExpoEasingCurve::OBJECT_INFO,
69    Curves::Easing::InOutExpoEasingCurve::OBJECT_INFO,
70    Curves::Easing::InCircEasingCurve::OBJECT_INFO,
71    Curves::Easing::OutCircEasingCurve::OBJECT_INFO,
72    Curves::Easing::InOutCircEasingCurve::OBJECT_INFO,
73    Curves::Easing::InBackEasingCurve::OBJECT_INFO,
74    Curves::Easing::OutBackEasingCurve::OBJECT_INFO,
75    Curves::Easing::InOutBackEasingCurve::OBJECT_INFO,
76    Curves::Easing::InElasticEasingCurve::OBJECT_INFO,
77    Curves::Easing::OutElasticEasingCurve::OBJECT_INFO,
78    Curves::Easing::InOutElasticEasingCurve::OBJECT_INFO,
79    Curves::Easing::InBounceEasingCurve::OBJECT_INFO,
80    Curves::Easing::OutBounceEasingCurve::OBJECT_INFO,
81    Curves::Easing::InOutBounceEasingCurve::OBJECT_INFO,
82    Curves::Easing::StepStartEasingCurve::OBJECT_INFO,
83    Curves::Easing::StepEndEasingCurve::OBJECT_INFO,
84    Curves::Easing::CubicBezierEasingCurve::OBJECT_INFO,
85};
86
87void RegisterBuiltInAnimations(IObjectRegistry& registry)
88{
89    for (auto& t : OBJECTS) {
90        registry.RegisterObjectType(t.GetFactory());
91    }
92
93    RegisterDefaultInterpolators(registry);
94}
95void UnRegisterBuiltInAnimations(IObjectRegistry& registry)
96{
97    for (auto& t : OBJECTS) {
98        registry.UnregisterObjectType(t.GetFactory());
99    }
100
101    UnRegisterDefaultInterpolators(registry);
102}
103} // namespace Internal
104META_END_NAMESPACE()
105