1 /* 2 * Copyright (c) 2021-2022 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_TRANSFORM_TRANSFORM_COMPONENT_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_TRANSFORM_COMPONENT_H 18 19 #include "base/geometry/dimension_offset.h" 20 #include "base/geometry/matrix4.h" 21 #include "base/geometry/transform_util.h" 22 #include "core/animation/animatable_transform_operation.h" 23 #include "core/components/common/properties/alignment.h" 24 #include "core/components/transform/render_transform.h" 25 #include "core/pipeline/base/component_group.h" 26 #include "core/pipeline/base/sole_child_component.h" 27 28 namespace OHOS::Ace { 29 30 inline constexpr int32_t INDEX_TWO = 2; 31 inline constexpr int32_t INDEX_THREE = 3; 32 inline constexpr float PERSPECTIVE = 0.0005f; 33 inline constexpr Dimension HALF_PERCENT = 0.5_pct; 34 35 enum class TransformStateAttribute { 36 ROTATE, 37 ROTATEX, 38 ROTATEY, 39 SCALE, 40 SCALEX, 41 SCALEY, 42 TRANSLATE, 43 TRANSLATEX, 44 TRANSLATEY, 45 }; 46 47 class ACE_EXPORT TransformComponent : public SoleChildComponent { 48 DECLARE_ACE_TYPE(TransformComponent, SoleChildComponent) 49 50 public: 51 RefPtr<Element> CreateElement() override; 52 RefPtr<RenderNode> CreateRenderNode() override; 53 // translate 54 void Translate(const Dimension& x, const Dimension& y, const AnimationOption& animationOption = AnimationOption()); 55 void Translate(const Dimension& x, const Dimension& y, const Dimension& z, 56 const AnimationOption& animationOption = AnimationOption()); 57 void TranslateX(const Dimension& x, const AnimationOption& animationOption = AnimationOption()); 58 void TranslateY(const Dimension& y, const AnimationOption& animationOption = AnimationOption()); 59 void TranslateZ(const Dimension& z, const AnimationOption& animationOption = AnimationOption()); 60 // scale 61 void Scale(float value, const AnimationOption& animationOption = AnimationOption()); 62 void Scale(float x, float y, const AnimationOption& animationOption = AnimationOption()); 63 void Scale(float x, float y, float z, const AnimationOption& animationOption = AnimationOption()); 64 void ScaleX(float x, const AnimationOption& animationOption = AnimationOption()); 65 void ScaleY(float y, const AnimationOption& animationOption = AnimationOption()); 66 void ScaleZ(float z, const AnimationOption& animationOption = AnimationOption()); 67 // rotate 68 void Rotate(float dx, float dy, float dz, float angle, const AnimationOption& animationOption = AnimationOption()); 69 void RotateX(float angle, const AnimationOption& animationOption = AnimationOption()); 70 void RotateY(float angle, const AnimationOption& animationOption = AnimationOption()); 71 void RotateZ(float angle, const AnimationOption& animationOption = AnimationOption()); 72 // skew 73 void Skew(float xAngle, float yAngle, const AnimationOption& animationOption = AnimationOption()); 74 void SkewX(float angle, const AnimationOption& = AnimationOption()); 75 void SkewY(float angle, const AnimationOption& = AnimationOption()); 76 // perspective 77 void Perspective(const Dimension& value, const AnimationOption& = AnimationOption()); 78 // matrix2d 79 void Matrix(float a, float b, float c, float d, float dx, float dy, const AnimationOption& = AnimationOption()); 80 // matrix3d in the column-major order. 81 void Matrix3d(float a1, float b1, float c1, float d1, float a2, float b2, float c2, float d2, float a3, float b3, 82 float c3, float d3, float a4, float b4, float c4, float d4, const AnimationOption& = AnimationOption()); 83 void Matrix3d(Matrix4 m, const AnimationOption& = AnimationOption()); 84 GetOriginDimension()85 const DimensionOffset& GetOriginDimension() const 86 { 87 return originDimension_; 88 } 89 SetOriginDimension(const DimensionOffset & origin)90 void SetOriginDimension(const DimensionOffset& origin) 91 { 92 originDimension_ = origin; 93 } 94 GetTransformEffects()95 const AnimatableTransformOperations& GetTransformEffects() const 96 { 97 return transformEffects; 98 } 99 GetTransform()100 const Matrix4& GetTransform() const 101 { 102 return transform_; 103 } 104 SetTransform(const Matrix4 & transform)105 void SetTransform(const Matrix4& transform) 106 { 107 transform_ = transform; 108 } 109 ResetTransform()110 void ResetTransform() 111 { 112 transform_ = Matrix4::CreateIdentity(); 113 transformEffects.Clear(); 114 } 115 SetClickSpringEffectType(ClickSpringEffectType type)116 void SetClickSpringEffectType(ClickSpringEffectType type) 117 { 118 clickSpringEffectType_ = type; 119 } 120 GetClickSpringEffectType()121 ClickSpringEffectType GetClickSpringEffectType() const 122 { 123 return clickSpringEffectType_; 124 } 125 SetTransitionEffect(TransitionEffect transitionEffect)126 void SetTransitionEffect(TransitionEffect transitionEffect) 127 { 128 transitionEffect_ = transitionEffect; 129 } 130 GetTransitionEffect()131 TransitionEffect GetTransitionEffect() const 132 { 133 return transitionEffect_; 134 } 135 SetShadow(const Shadow & shadow)136 void SetShadow(const Shadow& shadow) 137 { 138 shadow_ = shadow; 139 } 140 GetShadow()141 const Shadow& GetShadow() const 142 { 143 return shadow_; 144 } 145 GetTransformEffectsAppearing()146 const std::vector<TransformOperation>& GetTransformEffectsAppearing() const 147 { 148 return transformEffectsAppearing_; 149 } 150 GetTransformEffectsDisappearing()151 const std::vector<TransformOperation>& GetTransformEffectsDisappearing() const 152 { 153 return transformEffectsDisappearing_; 154 } 155 HasDisappearTransition()156 bool HasDisappearTransition() const 157 { 158 return hasDisappearTransition_; 159 } 160 HasAppearTransition()161 bool HasAppearTransition() const 162 { 163 return hasAppearTransition_; 164 } 165 166 void SetScaleTransition(TransitionType type, float x, float y, float z); 167 void SetTranslateTransition(TransitionType type, const Dimension& x, const Dimension& y, const Dimension& z); 168 void SetRotateTransition(TransitionType type, double x, double y, double z, double angle); 169 GetStateAttributes()170 RefPtr<StateAttributes<TransformStateAttribute>> GetStateAttributes() 171 { 172 if (stateAttributeList_ == nullptr) { 173 stateAttributeList_ = MakeRefPtr<StateAttributes<TransformStateAttribute>>(); 174 } 175 return stateAttributeList_; 176 } 177 HasStateAttributes()178 bool HasStateAttributes() 179 { 180 return stateAttributeList_ != nullptr; 181 } 182 183 184 private: 185 Matrix4 transform_; 186 AnimatableTransformOperations transformEffects; 187 DimensionOffset originDimension_ = DimensionOffset(HALF_PERCENT, HALF_PERCENT); 188 std::vector<TransformOperation> transformEffectsAppearing_; 189 std::vector<TransformOperation> transformEffectsDisappearing_; 190 bool hasDisappearTransition_ = false; 191 bool hasAppearTransition_ = false; 192 ClickSpringEffectType clickSpringEffectType_ = ClickSpringEffectType::NONE; 193 TransitionEffect transitionEffect_ = TransitionEffect::NONE; 194 Shadow shadow_; 195 RefPtr<StateAttributes<TransformStateAttribute>> stateAttributeList_ = nullptr; 196 }; 197 198 } // namespace OHOS::Ace 199 200 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_TRANSFORM_COMPONENT_H 201