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 21namespace OHOS::Ace::TransitionModel { 22 23ArkUITransitionEffectOption* CreateEffectOption() 24{ 25 ArkUITransitionEffectOption* effectOption = new ArkUITransitionEffectOption; 26 effectOption->appear = nullptr; 27 effectOption->disappear = nullptr; 28 effectOption->combine = nullptr; 29 return effectOption; 30} 31 32ArkUITransitionEffectOption* 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