1 /* 2 * Copyright (c) 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_NG_RENDER_ADAPTER_MODIFIER_ADAPTER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_RENDER_ADAPTER_MODIFIER_ADAPTER_H 18 19 #include <functional> 20 #include <memory> 21 #include <vector> 22 23 #include "include/core/SkCanvas.h" 24 #include "modifier/rs_property.h" 25 #include "render_service_client/core/modifier/rs_extended_modifier.h" 26 #include "render_service_client/core/modifier/rs_modifier.h" 27 #include "render_service_client/core/ui/rs_node.h" 28 29 #include "base/memory/ace_type.h" 30 #include "base/memory/referenced.h" 31 #include "base/utils/utils.h" 32 #include "core/components_ng/base/modifier.h" 33 #include "core/components_ng/render/drawing.h" 34 35 namespace OHOS::Ace::NG { 36 37 using RSModifier = Rosen::RSModifier; 38 using RSNode = Rosen::RSNode; 39 using RSAnimationTimingProtocol = Rosen::RSAnimationTimingProtocol; 40 using RSAnimationTimingCurve = Rosen::RSAnimationTimingCurve; 41 template<typename T> 42 using RSAnimatableProperty = Rosen::RSAnimatableProperty<T>; 43 template<typename T> 44 using RSProperty = Rosen::RSProperty<T>; 45 template<typename T> 46 using RSAnimatableArithmetic = Rosen::RSAnimatableArithmetic<T>; 47 using RSContentStyleModifier = Rosen::RSContentStyleModifier; 48 using RSOverlayStyleModifier = Rosen::RSOverlayStyleModifier; 49 using RSNodeModifier = Rosen::RSNodeModifier; 50 using RSDrawingContext = Rosen::RSDrawingContext; 51 using RSPropertyBase = Rosen::RSPropertyBase; 52 53 class ContentModifierAdapter : public RSContentStyleModifier { 54 public: 55 ContentModifierAdapter() = default; ContentModifierAdapter(const RefPtr<Modifier> & modifier)56 explicit ContentModifierAdapter(const RefPtr<Modifier>& modifier) 57 : modifier_(AceType::DynamicCast<ContentModifier>(modifier)) 58 {} 59 ~ContentModifierAdapter() override = default; 60 61 void Draw(RSDrawingContext& context) const override; 62 63 void AttachProperties(); 64 65 private: 66 WeakPtr<ContentModifier> modifier_; 67 std::vector<std::shared_ptr<RSPropertyBase>> attachedProperties_; 68 69 ACE_DISALLOW_COPY_AND_MOVE(ContentModifierAdapter); 70 }; 71 72 std::shared_ptr<RSModifier> ConvertContentModifier(const RefPtr<Modifier>& modifier); 73 std::shared_ptr<RSModifier> ConvertOverlayModifier(const RefPtr<Modifier>& modifier); 74 75 class OverlayModifierAdapter : public RSOverlayStyleModifier { 76 public: 77 OverlayModifierAdapter() = default; OverlayModifierAdapter(const RefPtr<Modifier> & modifier)78 explicit OverlayModifierAdapter(const RefPtr<Modifier>& modifier) 79 : modifier_(AceType::DynamicCast<OverlayModifier>(modifier)) 80 {} 81 ~OverlayModifierAdapter() override = default; 82 83 void Draw(RSDrawingContext& context) const override; 84 85 void AttachProperties(); 86 87 private: 88 WeakPtr<OverlayModifier> modifier_; 89 std::vector<std::shared_ptr<RSPropertyBase>> attachedProperties_; 90 91 ACE_DISALLOW_COPY_AND_MOVE(OverlayModifierAdapter); 92 }; 93 94 class RSNodeModifierImpl : public RSNodeModifier, public ModifierImpl { 95 public: 96 RSNodeModifierImpl() = default; 97 virtual ~RSNodeModifierImpl() = default; 98 Modify(RSNode & target)99 void Modify(RSNode& target) const override {} 100 101 void AddProperty(const RefPtr<PropertyBase>& property); 102 103 private: 104 std::shared_ptr<RSPropertyBase> attachedProperty_; 105 106 ACE_DISALLOW_COPY_AND_MOVE(RSNodeModifierImpl); 107 }; 108 109 } // namespace OHOS::Ace::NG 110 111 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_RENDER_ADAPTER_MODIFIER_ADAPTER_H 112