1 /* 2 * Copyright (c) 2021 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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_IMAGE_ANIMATOR_IMAGE_ANIMATOR_DECLARATION_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_IMAGE_ANIMATOR_IMAGE_ANIMATOR_DECLARATION_H 18 19 #include "core/components/common/properties/border.h" 20 #include "core/components/declaration/common/declaration.h" 21 #include "frameworks/bridge/common/dom/dom_type.h" 22 #include "frameworks/core/animation/animator.h" 23 24 namespace OHOS::Ace { 25 26 struct ImageProperties { 27 std::string src; 28 Dimension width; 29 Dimension height; 30 Dimension top; 31 Dimension left; 32 int32_t duration = 0; 33 }; 34 35 struct ImageAnimatorAttribute : Attribute { 36 FillMode fillMode = FillMode::FORWARDS; 37 Animator::Status status = Animator::Status::IDLE; 38 int32_t iteration = -1; 39 int32_t duration = 0; 40 int32_t preDecode = 0; 41 bool isReverse = false; 42 bool isFixedSize = true; 43 std::vector<ImageProperties> images; 44 }; 45 46 class ImageAnimatorDeclaration : public Declaration { 47 DECLARE_ACE_TYPE(ImageAnimatorDeclaration, Declaration); 48 49 public: 50 ImageAnimatorDeclaration() = default; 51 ~ImageAnimatorDeclaration() override = default; 52 SetFillMode(FillMode fillMode)53 void SetFillMode(FillMode fillMode) 54 { 55 auto& attribute = MaybeResetAttribute<ImageAnimatorAttribute>(AttributeTag::SPECIALIZED_ATTR); 56 attribute.fillMode = fillMode; 57 } 58 SetStatus(Animator::Status status)59 void SetStatus(Animator::Status status) 60 { 61 auto& attribute = MaybeResetAttribute<ImageAnimatorAttribute>(AttributeTag::SPECIALIZED_ATTR); 62 attribute.status = status; 63 } 64 SetIteration(int32_t iteration)65 void SetIteration(int32_t iteration) 66 { 67 auto& attribute = MaybeResetAttribute<ImageAnimatorAttribute>(AttributeTag::SPECIALIZED_ATTR); 68 attribute.iteration = iteration; 69 } 70 SetDuration(int32_t duration)71 void SetDuration(int32_t duration) 72 { 73 auto& attribute = MaybeResetAttribute<ImageAnimatorAttribute>(AttributeTag::SPECIALIZED_ATTR); 74 attribute.duration = duration; 75 } 76 SetIsReverse(bool isReverse)77 void SetIsReverse(bool isReverse) 78 { 79 auto& attribute = MaybeResetAttribute<ImageAnimatorAttribute>(AttributeTag::SPECIALIZED_ATTR); 80 attribute.isReverse = isReverse; 81 } 82 SetIsFixedSize(bool isFixedSize)83 void SetIsFixedSize(bool isFixedSize) 84 { 85 auto& attribute = MaybeResetAttribute<ImageAnimatorAttribute>(AttributeTag::SPECIALIZED_ATTR); 86 attribute.isFixedSize = isFixedSize; 87 } 88 SetBorder(const Border & border)89 void SetBorder(const Border& border) 90 { 91 border_ = border; 92 } 93 SetImageProperties(const std::vector<ImageProperties> & images)94 void SetImageProperties(const std::vector<ImageProperties>& images) 95 { 96 auto& attribute = MaybeResetAttribute<ImageAnimatorAttribute>(AttributeTag::SPECIALIZED_ATTR); 97 attribute.images = images; 98 } 99 SetPreDecode(int32_t preDecode)100 void SetPreDecode(int32_t preDecode) 101 { 102 auto& attribute = MaybeResetAttribute<ImageAnimatorAttribute>(AttributeTag::SPECIALIZED_ATTR); 103 attribute.preDecode = preDecode; 104 } 105 GetFillMode()106 FillMode GetFillMode() const 107 { 108 auto& attribute = static_cast<ImageAnimatorAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 109 return attribute.fillMode; 110 } 111 GetStatus()112 Animator::Status GetStatus() const 113 { 114 auto& attribute = static_cast<ImageAnimatorAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 115 return attribute.status; 116 } 117 GetIteration()118 int32_t GetIteration() const 119 { 120 auto& attribute = static_cast<ImageAnimatorAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 121 return attribute.iteration; 122 } 123 GetDuration()124 int32_t GetDuration() const 125 { 126 auto& attribute = static_cast<ImageAnimatorAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 127 return attribute.duration; 128 } 129 GetPreDecode()130 int32_t GetPreDecode() const 131 { 132 auto& attribute = static_cast<ImageAnimatorAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 133 return attribute.preDecode; 134 } 135 GetIsReverse()136 bool GetIsReverse() const 137 { 138 auto& attribute = static_cast<ImageAnimatorAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 139 return attribute.isReverse; 140 } 141 GetIsFixedSize()142 bool GetIsFixedSize() const 143 { 144 auto& attribute = static_cast<ImageAnimatorAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 145 return attribute.isFixedSize; 146 } 147 GetBorder()148 const Border& GetBorder() const 149 { 150 return border_; 151 } 152 GetImageProperties()153 const std::vector<ImageProperties>& GetImageProperties() const 154 { 155 auto& attribute = static_cast<ImageAnimatorAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 156 return attribute.images; 157 } 158 159 protected: 160 void InitSpecialized() override; 161 162 private: 163 Border border_; 164 }; 165 166 } // namespace OHOS::Ace 167 168 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_IMAGE_ANIMATOR_IMAGE_ANIMATOR_DECLARATION_H 169