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_ROSEN_RENDER_TRANSFORM_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_ROSEN_RENDER_TRANSFORM_H 18 19 #include "core/components/transform/render_transform.h" 20 #include "core/pipeline/base/rosen_render_context.h" 21 22 namespace OHOS::Ace { 23 24 class RosenRenderTransform final : public RenderTransform { 25 DECLARE_ACE_TYPE(RosenRenderTransform, RenderTransform); 26 27 public: 28 RosenRenderTransform() = default; 29 ~RosenRenderTransform() override = default; 30 31 void Update(const RefPtr<Component>& component) override; 32 static void SyncTransformToRsNode(const std::shared_ptr<RSNode>& rsNode, const Matrix4& transformMatrix); 33 void SyncOriginToRsNode(const std::shared_ptr<RSNode>& rsNode); 34 HasGeometryProperties()35 bool HasGeometryProperties() const override 36 { 37 return true; 38 } 39 void SyncGeometryProperties() override; 40 41 void OnAttachContext() override; 42 bool HasEffectiveTransform() const override; 43 44 Point GetTransformPoint(const Point& point) override; 45 Rect GetTransformRect(const Rect& rect) override; 46 47 void UpdateTransformLayer() override; 48 49 void Mirror(const Offset& center, const Offset& global) override; 50 51 void PerformLayout() override; 52 SetPendingAppearingTransition()53 void SetPendingAppearingTransition() override 54 { 55 pendingAppearingTransition_ = true; 56 } 57 SetPendingUpdateTransformLayer()58 void SetPendingUpdateTransformLayer() override 59 { 60 pendingUpdateTransformLayer_ = true; 61 } 62 63 protected: 64 void OnRSTransition(TransitionType type) override; 65 66 private: 67 Matrix4 GetEffectiveTransform(const Offset& offset); 68 bool CheckNeedPaint() const; 69 double ConvertDimensionToScaleBySize(const Dimension& dimension, double size); 70 71 Matrix4 previousTransformMatrix_; 72 73 bool pendingAppearingTransition_ = false; 74 bool pendingUpdateTransformLayer_ = false; 75 bool firstUpdateTransform_ = true; 76 }; 77 78 } // namespace OHOS::Ace 79 80 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_FLUTTER_RENDER_TRANSFORM_H 81