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