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_ANIMATION_ANIMATABLE_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATABLE_H 18 19 #include <map> 20 21 #include "base/memory/ace_type.h" 22 #include "core/animation/curve.h" 23 #include "core/animation/curves.h" 24 25 namespace OHOS::Ace { 26 27 enum class AnimatableType { 28 PROPERTY_WIDTH, 29 PROPERTY_HEIGHT, 30 PROPERTY_BG_COLOR, 31 PROPERTY_OPACITY, 32 PROPERTY_MARGIN_LEFT, // margin 33 PROPERTY_MARGIN_TOP, 34 PROPERTY_MARGIN_RIGHT, 35 PROPERTY_MARGIN_BOTTOM, 36 PROPERTY_PADDING_LEFT, // padding 37 PROPERTY_PADDING_TOP, 38 PROPERTY_PADDING_RIGHT, 39 PROPERTY_PADDING_BOTTOM, 40 PROPERTY_BACKGROUND_POSITION, 41 PROPERTY_BACKGROUND_SIZE, 42 PROPERTY_BORDER_LEFT_WIDTH, // border 43 PROPERTY_BORDER_TOP_WIDTH, 44 PROPERTY_BORDER_RIGHT_WIDTH, 45 PROPERTY_BORDER_BOTTOM_WIDTH, 46 PROPERTY_BORDER_LEFT_COLOR, 47 PROPERTY_BORDER_TOP_COLOR, 48 PROPERTY_BORDER_RIGHT_COLOR, 49 PROPERTY_BORDER_BOTTOM_COLOR, 50 PROPERTY_BORDER_TOP_LEFT_RADIUS, 51 PROPERTY_BORDER_TOP_RIGHT_RADIUS, 52 PROPERTY_BORDER_BOTTOM_LEFT_RADIUS, 53 PROPERTY_BORDER_BOTTOM_RIGHT_RADIUS, 54 PROPERTY_BORDER_LEFT_STYLE, 55 PROPERTY_BORDER_RIGHT_STYLE, 56 PROPERTY_BORDER_TOP_STYLE, 57 PROPERTY_BORDER_BOTTOM_STYLE, 58 PROPERTY_FILTER_BLUR, // filter 59 PROPERTY_BACKDROP_FILTER_BLUR, // backdrop filter 60 PROPERTY_WINDOW_FILTER_BLUR, // window blur 61 PROPERTY_BOX_SHADOW, // shadow 62 PROPERTY_POSITION_LEFT, // position 63 PROPERTY_POSITION_TOP, 64 PROPERTY_POSITION_RIGHT, 65 PROPERTY_POSITION_BOTTOM, 66 }; 67 68 class Animatable : public AceType { 69 DECLARE_ACE_TYPE(Animatable, AceType); 70 71 public: SetTimePoint(float timePoint)72 void SetTimePoint(float timePoint) 73 { 74 timePoint_ = std::clamp(timePoint, 0.0f, 1.0f); 75 } 76 GetTimePoint()77 float GetTimePoint() const 78 { 79 return timePoint_; 80 } 81 SetCurve(const RefPtr<Curve> & curve)82 void SetCurve(const RefPtr<Curve>& curve) 83 { 84 if (curve) { 85 curve_ = curve; 86 } 87 } 88 GetCurve()89 const RefPtr<Curve>& GetCurve() const 90 { 91 return curve_; 92 } 93 94 protected: 95 float timePoint_ = 0.0f; // between 0.0 to 1.0 96 RefPtr<Curve> curve_ = Curves::LINEAR; 97 }; 98 99 } // namespace OHOS::Ace 100 101 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATABLE_H 102