• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #include "node_transition.h"
17 
18 
19 #include "base/utils/utils.h"
20 
21 namespace OHOS::Ace::TransitionModel {
22 
CreateEffectOption()23 ArkUITransitionEffectOption* CreateEffectOption()
24 {
25     ArkUITransitionEffectOption* effectOption = new ArkUITransitionEffectOption;
26     effectOption->appear = nullptr;
27     effectOption->disappear = nullptr;
28     effectOption->combine = nullptr;
29     return effectOption;
30 }
31 
ConvertToEffectOption(ArkUI_TransitionEffect * effectOption)32 ArkUITransitionEffectOption* ConvertToEffectOption(ArkUI_TransitionEffect* effectOption)
33 {
34     CHECK_NULL_RETURN(effectOption, nullptr);
35     auto* toEffectOption = CreateEffectOption();
36     toEffectOption->type = effectOption->type;
37     switch (effectOption->type) {
38         case ARKUI_TRANSITION_EFFECT_OPACITY: {
39             toEffectOption->opacity = effectOption->opacity;
40             break;
41         }
42         case ARKUI_TRANSITION_EFFECT_TRANSLATE: {
43             if (!effectOption->translate) {
44                 delete toEffectOption;
45                 toEffectOption = nullptr;
46                 return nullptr;
47             }
48             toEffectOption->translate.x = effectOption->translate->x;
49             toEffectOption->translate.y = effectOption->translate->y;
50             toEffectOption->translate.z = effectOption->translate->z;
51             break;
52         }
53         case ARKUI_TRANSITION_EFFECT_SCALE: {
54             if (!effectOption->scale) {
55                 delete toEffectOption;
56                 toEffectOption = nullptr;
57                 return nullptr;
58             }
59             toEffectOption->scale.x = effectOption->scale->x;
60             toEffectOption->scale.y = effectOption->scale->y;
61             toEffectOption->scale.z = effectOption->scale->z;
62             toEffectOption->scale.centerX = effectOption->scale->centerX;
63             toEffectOption->scale.centerY = effectOption->scale->centerY;
64             break;
65         }
66         case ARKUI_TRANSITION_EFFECT_ROTATE: {
67             if (!effectOption->rotate) {
68                 delete toEffectOption;
69                 toEffectOption = nullptr;
70                 return nullptr;
71             }
72             toEffectOption->rotate.x = effectOption->rotate->x;
73             toEffectOption->rotate.y = effectOption->rotate->y;
74             toEffectOption->rotate.z = effectOption->rotate->z;
75             toEffectOption->rotate.angle = effectOption->rotate->angle;
76             toEffectOption->rotate.centerX = effectOption->rotate->centerX;
77             toEffectOption->rotate.centerY = effectOption->rotate->centerY;
78             toEffectOption->rotate.centerZ = effectOption->rotate->centerZ;
79             toEffectOption->rotate.perspective = effectOption->rotate->perspective;
80             break;
81         }
82         case ARKUI_TRANSITION_EFFECT_MOVE: {
83             toEffectOption->move = effectOption->move;
84             break;
85         }
86         case ARKUI_TRANSITION_EFFECT_ASYMMETRIC: {
87             if (effectOption->appear) {
88                 auto* appear = ConvertToEffectOption(effectOption->appear);
89                 toEffectOption->appear = appear;
90             }
91             if (effectOption->disappear) {
92                 auto* disappear = ConvertToEffectOption(effectOption->disappear);
93                 toEffectOption->disappear = disappear;
94             }
95             break;
96         }
97     }
98 
99     if (effectOption->animation) {
100         toEffectOption->hasAnimation = true;
101         toEffectOption->animation.duration = effectOption->animation->duration;
102         toEffectOption->animation.tempo = effectOption->animation->tempo;
103         toEffectOption->animation.curve = effectOption->animation->curve;
104         if (effectOption->animation->iCurve) {
105             toEffectOption->animation.iCurve = effectOption->animation->iCurve->curve;
106             toEffectOption->animation.curveType = effectOption->animation->iCurve->type;
107         } else {
108             toEffectOption->animation.iCurve = nullptr;
109         }
110         toEffectOption->animation.delay = effectOption->animation->delay;
111         toEffectOption->animation.iterations = effectOption->animation->iterations;
112         toEffectOption->animation.playMode = effectOption->animation->playMode;
113         if (effectOption->animation->expectedFrameRateRange) {
114             toEffectOption->animation.expectedFrameRateRange =
115                 reinterpret_cast<ArkUIExpectedFrameRateRange*>(effectOption->animation->expectedFrameRateRange);
116         } else {
117             toEffectOption->animation.expectedFrameRateRange = nullptr;
118         }
119     } else {
120         toEffectOption->hasAnimation = false;
121     }
122 
123     if (effectOption->combine) {
124         toEffectOption->combine = ConvertToEffectOption(effectOption->combine);
125     }
126     effectOption->toEffectOption = toEffectOption;
127     return toEffectOption;
128 }
129 } // namespace OHOS::Ace::TransitionModel
130