• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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_PAINTS_ADAPTER_ROSEN_RENDER_CONTEXT_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PAINTS_ADAPTER_ROSEN_RENDER_CONTEXT_H
18 
19 #include <cstdint>
20 #include <memory>
21 #include <optional>
22 #include <utility>
23 
24 #include "include/core/SkCanvas.h"
25 #include "include/core/SkPictureRecorder.h"
26 #include "include/core/SkRefCnt.h"
27 #include "render_service_client/core/animation/rs_particle_params.h"
28 #include "render_service_client/core/ui/rs_node.h"
29 #include "render_service_client/core/ui/rs_texture_export.h"
30 
31 #include "base/geometry/dimension_offset.h"
32 #include "base/geometry/ng/offset_t.h"
33 #include "base/geometry/ng/rect_t.h"
34 #include "base/utils/noncopyable.h"
35 #include "core/components/common/layout/position_param.h"
36 #include "core/components/common/properties/color.h"
37 #include "core/components_ng/event/event_hub.h"
38 #include "core/components_ng/image_provider/image_loading_context.h"
39 #include "core/components_ng/property/measure_property.h"
40 #include "core/components_ng/property/progress_mask_property.h"
41 #include "core/components_ng/render/adapter/focus_animation_modifier.h"
42 #include "core/components_ng/render/adapter/graphic_modifier.h"
43 #include "core/components_ng/render/adapter/moon_progress_modifier.h"
44 #include "core/components_ng/render/adapter/rosen_modifier_property.h"
45 #include "core/components_ng/render/adapter/rosen_transition_effect.h"
46 #include "core/components_ng/render/render_context.h"
47 
48 namespace OHOS::Ace::NG {
49 class BackgroundModifier;
50 class BorderImageModifier;
51 class DebugBoundaryModifier;
52 class MouseSelectModifier;
53 class FocusStateModifier;
54 class PageTransitionEffect;
55 class OverlayTextModifier;
56 class GradientStyleModifier;
57 class PipelineContext;
58 class RosenRenderContext : public RenderContext {
59     DECLARE_ACE_TYPE(RosenRenderContext, NG::RenderContext)
60 public:
61     RosenRenderContext() = default;
62     ~RosenRenderContext() override;
63 
64     void SetSurfaceChangedCallBack(const std::function<void(float, float, float, float)>& callback) override;
65 
66     void RemoveSurfaceChangedCallBack() override;
67 
68     void MarkNewFrameAvailable(void* nativeWindow) override;
69     void AddAttachCallBack(const std::function<void(int64_t, bool)>& attachCallback) override;
70     void AddUpdateCallBack(const std::function<void(std::vector<float>&)>& updateCallback) override;
71     void AddInitTypeCallBack(const std::function<void(int32_t&)>& initTypeCallback) override;
72 
73     void InitContext(bool isRoot, const std::optional<ContextParam>& param) override;
74 
75     void InitContext(bool isRoot, const std::optional<ContextParam>& param, bool isLayoutNode) override;
76 
77     void SyncGeometryFrame(const RectF& paintRect);
78 
79     void SyncGeometryProperties(GeometryNode* geometryNode, bool isRound = true, uint8_t flag = 0) override;
80 
81     void SyncGeometryProperties(const RectF& paintRect) override;
82 
83     void SetBorderRadius(const BorderRadiusProperty& value) override;
84 
85     void SetBorderStyle(const BorderStyleProperty& value) override;
86 
87     void SetBorderColor(const BorderColorProperty& value) override;
88 
89     void SetBorderWidth(const BorderWidthProperty& value) override;
90 
91     void SetDashGap(const BorderWidthProperty& value) override;
92 
93     void SetDashWidth(const BorderWidthProperty& value) override;
94 
95     void SetOuterBorderRadius(const BorderRadiusProperty& value) override;
96 
97     void SetOuterBorderStyle(const BorderStyleProperty& value) override;
98 
99     void SetOuterBorderColor(const BorderColorProperty& value) override;
100 
101     void SetOuterBorderWidth(const BorderWidthProperty& value) override;
102 
103     void SetExtraOffset(const std::optional<OffsetF>& offset) override;
104 
105     void SetSandBox(const std::optional<OffsetF>& parentPosition, bool force = false) override;
106 
HasSandBox()107     bool HasSandBox() const override
108     {
109         return sandBoxCount_ > 0;
110     }
111 
GetAnimationsCount()112     size_t GetAnimationsCount() const override
113     {
114         if (rsNode_) {
115             return rsNode_->GetAnimationsCount();
116         }
117         return 0;
118     }
119 
120     void SetFrameWithoutAnimation(const RectF& paintRect) override;
121 
122     void RebuildFrame(FrameNode* self, const std::list<RefPtr<FrameNode>>& children) override;
123 
124     void AddFrameChildren(FrameNode* self, const std::list<RefPtr<FrameNode>>& children) override;
125 
126     void RemoveFrameChildren(FrameNode* self, const std::list<RefPtr<FrameNode>>& children) override;
127 
128     void MoveFrame(FrameNode* self, const RefPtr<FrameNode>& child, int32_t index) override;
129 
130     void OnModifyDone() override;
131 
132     void ResetBlendBgColor() override;
133 
134     void BlendBgColor(const Color& color) override;
135 
136     void ResetBlendBorderColor() override;
137 
138     void BlendBorderColor(const Color& color) override;
139 
140     // Paint focus state by component's setting. It will paint along the paintRect
141     void PaintFocusState(const RoundRect& paintRect, const Color& paintColor, const Dimension& paintWidth,
142         bool isAccessibilityFocus = false, bool isFocusBoxGlow = false) override;
143     // Paint focus state by component's setting. It will paint along the frameRect(padding: focusPaddingVp)
144     void PaintFocusState(const RoundRect& paintRect, const Dimension& focusPaddingVp, const Color& paintColor,
145         const Dimension& paintWidth, const PaintFocusExtraInfo& paintFocusExtraInfo) override;
146     // Paint focus state by default. It will paint along the component rect(padding: focusPaddingVp)
147     void PaintFocusState(const Dimension& focusPaddingVp, const Color& paintColor, const Dimension& paintWidth,
148         bool isFocusBoxGlow = false) override;
149 
150     void ClearFocusState() override;
151 
152     const std::shared_ptr<Rosen::RSNode>& GetRSNode();
153 
154     void SetRSNode(const std::shared_ptr<Rosen::RSNode>& rsNode);
155 
GetNodeId()156     uint64_t GetNodeId() const override
157     {
158         CHECK_NULL_RETURN(rsNode_, 0);
159         return static_cast<uint64_t>(rsNode_->GetId());
160     }
161 
162     void StartRecording() override;
163 
164     void StopRecordingIfNeeded() override;
165 
SetDrawContentAtLast(bool useDrawContentLastOrder)166     void SetDrawContentAtLast(bool useDrawContentLastOrder) override
167     {
168         CHECK_NULL_VOID(rsNode_);
169         rsNode_->SetPaintOrder(useDrawContentLastOrder);
170     }
171 
SetClipToFrame(bool useClip)172     void SetClipToFrame(bool useClip) override
173     {
174         CHECK_NULL_VOID(rsNode_);
175         rsNode_->SetClipToFrame(useClip);
176     }
177 
SetClipToBounds(bool useClip)178     void SetClipToBounds(bool useClip) override
179     {
180         CHECK_NULL_VOID(rsNode_);
181         rsNode_->SetClipToBounds(useClip);
182     }
183 
SetVisible(bool visible)184     void SetVisible(bool visible) override
185     {
186         CHECK_NULL_VOID(rsNode_);
187         rsNode_->SetVisible(visible);
188     }
189 
190     template<typename ModifierName, typename T>
191     void SetAnimatableProperty(std::shared_ptr<ModifierName>& modifier, const T& value);
192 
193     void FlushContentDrawFunction(CanvasDrawFunction&& contentDraw) override;
194 
195     void FlushForegroundDrawFunction(CanvasDrawFunction&& foregroundDraw) override;
196 
197     void FlushOverlayDrawFunction(CanvasDrawFunction&& overlayDraw) override;
198 
199     void AnimateHoverEffectScale(bool isHovered) override;
200     void AnimateHoverEffectBoard(bool isHovered) override;
201     void UpdateBackBlurRadius(const Dimension& radius) override;
202     void UpdateBackBlurStyle(
203         const std::optional<BlurStyleOption>& bgBlurStyle, const SysOptions& sysOptions = SysOptions()) override;
204     void UpdateBackgroundEffect(
205         const std::optional<EffectOption>& effectOption, const SysOptions& sysOptions = SysOptions()) override;
206     void UpdateMotionBlur(const MotionBlurOption& motionBlurOption) override;
207     void UpdateBackBlur(
208         const Dimension& radius, const BlurOption& blurOption, const SysOptions& sysOptions = SysOptions()) override;
209     void UpdateNodeBackBlur(const Dimension& radius, const BlurOption& blurOption) override;
210     void UpdateFrontBlur(
211         const Dimension& radius, const BlurOption& blurOption, const SysOptions& sysOptions = SysOptions()) override;
212     void UpdateFrontBlurRadius(const Dimension& radius) override;
213     void UpdateFrontBlurStyle(
214         const std::optional<BlurStyleOption>& fgBlurStyle, const SysOptions& sysOptions = SysOptions()) override;
215     void UpdateForegroundEffectDisableSystemAdaptation(const SysOptions& sysOptions = SysOptions()) override;
216     void OnForegroundEffectUpdate(float radius) override;
217     void ResetBackBlurStyle() override;
218     void OnSphericalEffectUpdate(double radio) override;
219     void OnPixelStretchEffectUpdate(const PixStretchEffectOption& option) override;
220     void OnLightUpEffectUpdate(double radio) override;
221     void OnParticleOptionArrayUpdate(const std::list<ParticleOption>& optionList) override;
222     void OnClickEffectLevelUpdate(const ClickEffectInfo& info) override;
223 
224     void UpdateVisualEffect(const OHOS::Rosen::VisualEffect* visualEffect) override;
225     void UpdateBackgroundFilter(const OHOS::Rosen::Filter* backgroundFilter) override;
226     void UpdateForegroundFilter(const OHOS::Rosen::Filter* foregroundFilter) override;
227     void UpdateCompositingFilter(const OHOS::Rosen::Filter* compositingFilter) override;
228     void UpdateBrightnessBlender(const OHOS::Rosen::BrightnessBlender* brightnessBlender) override;
229 
230     Rosen::SHADOW_COLOR_STRATEGY ToShadowColorStrategy(ShadowColorStrategy shadowColorStrategy);
231     void OnBackShadowUpdate(const Shadow& shadow) override;
232     void OnBackBlendModeUpdate(BlendMode blendMode) override;
233     void OnBackBlendApplyTypeUpdate(BlendApplyType applyType) override;
234     void UpdateBorderWidthF(const BorderWidthPropertyF& value) override;
235 
236     void OnTransformMatrixUpdate(const Matrix4& matrix) override;
237 
238     void UpdateTransition(const TransitionOptions& options) override;
239     void CleanTransition() override;
240     void UpdateChainedTransition(const RefPtr<NG::ChainedTransitionEffect>& effect) override;
HasAppearingTransition()241     bool HasAppearingTransition() const
242     {
243         return propTransitionAppearing_ != nullptr;
244     }
HasDisappearingTransition()245     bool HasDisappearingTransition() const
246     {
247         return propTransitionDisappearing_ != nullptr;
248     }
249     void OnNodeAppear(bool recursive) override;
250     void OnNodeDisappear(bool recursive) override;
251     void SetTransitionOutCallback(std::function<void()>&& callback) override;
252     void SetTransitionInCallback(std::function<void()>&& callback) override;
253     void SetTransitionUserCallback(TransitionFinishCallback&& callback) override;
254     void ClipWithRect(const RectF& rectF) override;
255     void ClipWithRRect(const RectF& rectF, const RadiusF& radiusF) override;
256     void ClipWithRoundRect(const RoundRect& roundRect) override;
257     void ClipWithOval(const RectF& rectF) override;
258     void ClipWithCircle(const Circle& circle) override;
259     void RemoveClipWithRRect() override;
260     void UpdateWindowFocusState(bool isFocused) override;
261     void UpdateWindowActiveState(bool isActive) override;
262     void SetContentClip(const std::variant<RectF, RefPtr<ShapeRect>>& rect) override;
263 
264     void SetSharedTranslate(float xTranslate, float yTranslate) override;
265     void ResetSharedTranslate() override;
266 
267     static std::vector<std::shared_ptr<Rosen::RSNode>> GetChildrenRSNodes(
268         const std::list<RefPtr<FrameNode>>& frameChildren, std::unordered_map<Rosen::NodeId, bool>& nodeIdMap);
269 
270     // if translate params use percent dimension, frameSize should be given correctly
271     static std::shared_ptr<Rosen::RSTransitionEffect> GetRSTransitionWithoutType(
272         const std::unique_ptr<TransitionOptions>& options, const SizeF& frameSize = SizeF());
273 
274     static float ConvertDimensionToScaleBySize(const Dimension& dimension, float size);
275 
276     static SizeF GetPercentReference(const RefPtr<FrameNode>& frameNode);
277 
278     void FlushContentModifier(const RefPtr<Modifier>& modifier) override;
279     void FlushKitContentModifier(const RefPtr<Kit::Modifier>& modifier) override;
280     void FlushOverlayModifier(const RefPtr<Modifier>& modifier) override;
281     void FlushForegroundModifier(const RefPtr<Modifier>& modifier) override;
282 
283     void AddChild(const RefPtr<RenderContext>& renderContext, int index) override;
284     void RemoveChild(const RefPtr<RenderContext>& renderContext) override;
285     void ClearChildren() override;
286     void SetBounds(float positionX, float positionY, float width, float height) override;
287     void SetSecurityLayer(bool isSecure) override;
288     void SetHDRBrightness(float hdrBrightness) override;
289     void SetTransparentLayer(bool isTransparentLayer) override;
290     void SetScreenId(uint64_t screenId) override;
291     void OnTransformTranslateUpdate(const TranslateOptions& value) override;
292     Vector3F MarshallTranslate(const TranslateOptions& translate);
293     bool DoTextureExport(uint64_t surfaceId) override;
294     bool StopTextureExport() override;
295     void SetSurfaceRotation(bool isLock) override;
296     void SetRenderFit(RenderFit renderFit) override;
297     PipelineContext* GetPipelineContext() const;
298 
299     RectF GetPaintRectWithTransform() override;
300 
301     std::pair<RectF, bool> GetPaintRectWithTranslate() override;
302 
303     RectF GetPaintRectWithoutTransform() override;
304 
305     // get position property
306     RectF GetPropertyOfPosition() override;
307 
308     // append translate value and return origin value.
309     void UpdateTranslateInXY(const OffsetF& offset) override;
310     OffsetF GetShowingTranslateProperty() override;
311 
312     void CancelTranslateXYAnimation() override;
313 
314     OffsetF GetTranslateXYProperty() override;
315 
316     Matrix4 GetLocalTransformMatrix() override;
317 
318     void GetPointWithRevert(PointF& point) override;
319 
320     void GetPointTransform(PointF& point) override;
321 
322     void GetPointTransformRotate(PointF& point) override;
323 
324     Matrix4 GetMatrixWithTransformRotate() override;
325 
326     void GetPointWithTransform(PointF& point) override;
327 
328     void ClearDrawCommands() override;
329 
330     void RemoveContentModifier(const RefPtr<ContentModifier>& modifier) override;
331 
332     void OpacityAnimation(const AnimationOption& option, double begin, double end) override;
333     void ScaleAnimation(const AnimationOption& option, double begin, double end) override;
334 
335     void PaintAccessibilityFocus() override;
336 
337     void UpdateAccessibilityRoundRect() override;
338 
339     void ClearAccessibilityFocus() override;
340 
341     void OnAccessibilityFocusUpdate(
342         bool isAccessibilityFocus, const int64_t accessibilityIdForVirtualNode = INVALID_PARENT_ID) override;
343     void OnAccessibilityFocusRectUpdate(RectT<int32_t> accessibilityFocusRect) override;
344 
345     void OnMouseSelectUpdate(bool isSelected, const Color& fillColor, const Color& strokeColor) override;
346     void UpdateMouseSelectWithRect(const RectF& rect, const Color& fillColor, const Color& strokeColor) override;
347 
348     void OnPositionUpdate(const OffsetT<Dimension>& value) override;
349     void OnPositionEdgesUpdate(const EdgesParam& value) override;
350     void RecalculatePosition() override;
351     void OnZIndexUpdate(int32_t value) override;
352     void DumpInfo() override;
353     void DumpInfo(std::unique_ptr<JsonValue>& json) override;
354     void DumpSimplifyInfo(std::unique_ptr<JsonValue>& json) override;
355     void DumpSimplifyStagingProperties(std::unique_ptr<JsonValue>& json);
356     void DumpAdvanceInfo() override;
357     void DumpAdvanceInfo(std::unique_ptr<JsonValue>& json) override;
358     void SetAdvanceInfo(std::unique_ptr<JsonValue>& json);
359     void BuildStagingInfo(std::unique_ptr<JsonValue>& json);
360     void BuildPositionInfo(std::unique_ptr<JsonValue>& json);
361     void BuildShadowInfo(std::unique_ptr<JsonValue>& json);
362     void SetClipBoundsWithCommands(const std::string& commands) override;
SetNeedDebugBoundary(bool flag)363     void SetNeedDebugBoundary(bool flag) override
364     {
365         needDebugBoundary_ = flag;
366     }
367 
NeedDebugBoundary()368     bool NeedDebugBoundary() const override
369     {
370         return needDebugBoundary_;
371     }
372 
373     void OnBackgroundAlignUpdate(const Alignment& align) override;
374     void OnBackgroundPixelMapUpdate(const RefPtr<PixelMap>& value) override;
375     void CreateBackgroundPixelMap(const RefPtr<FrameNode>& customNode) override;
376 
377     void OnBackgroundColorUpdate(const Color& value) override;
378     void OnOpacityUpdate(double opacity) override;
379     void OnDynamicRangeModeUpdate(DynamicRangeMode dynamicRangeMode) override;
380     void SetAlphaOffscreen(bool isOffScreen) override;
381     void MarkContentChanged(bool isChanged) override;
382     void MarkDrivenRender(bool flag) override;
383     void MarkDrivenRenderItemIndex(int32_t index) override;
384     void MarkDrivenRenderFramePaintState(bool flag) override;
385     RefPtr<PixelMap> GetThumbnailPixelMap(bool needScale = false, bool isOffline = true) override;
386     void UpdateThumbnailPixelMapScale(float& scaleX, float& scaleY) override;
387     bool CreateThumbnailPixelMapAsyncTask(
388         bool needScale, std::function<void(const RefPtr<PixelMap>)> &&callback) override;
389     bool GetBitmap(RSBitmap& bitmap, std::shared_ptr<RSDrawCmdList> drawCmdList = nullptr);
390     bool GetPixelMap(const std::shared_ptr<Media::PixelMap>& pixelMap,
391         std::shared_ptr<RSDrawCmdList> drawCmdList = nullptr, Rosen::Drawing::Rect* rect = nullptr);
392     void SetActualForegroundColor(const Color& value) override;
393     void AttachNodeAnimatableProperty(RefPtr<NodeAnimatablePropertyBase> property) override;
394     void DetachNodeAnimatableProperty(const RefPtr<NodeAnimatablePropertyBase>& property) override;
395 
396     void RegisterSharedTransition(const RefPtr<RenderContext>& other, const bool isInSameWindow) override;
397     void UnregisterSharedTransition(const RefPtr<RenderContext>& other) override;
398 
399     void SetUsingContentRectForRenderFrame(bool value, bool adjustRSFrameByContentRect = false) override;
400     void SetFrameGravity(OHOS::Rosen::Gravity gravity) override;
401     void SetUIFirstSwitch(OHOS::Rosen::RSUIFirstSwitch uiFirstSwitch);
402 
403     int32_t CalcExpectedFrameRate(const std::string& scene, float speed) override;
404 
405     void SetBackgroundShader(const std::shared_ptr<Rosen::RSShader>& shader);
406 
407     // used in arkts_native_render_node_modifier set property directly to rsNode
408     void SetRotation(float rotationX, float rotationY, float rotationZ) override;
409     void SetShadowColor(uint32_t color) override;
410     void SetShadowOffset(float offsetX, float offsetY) override;
411     void SetShadowAlpha(float alpha) override;
412     void SetShadowElevation(float elevation) override;
413     void SetShadowRadius(float radius) override;
414     void SetRenderFrameOffset(const OffsetF& offset) override;
415     void SetScale(float scaleX, float scaleY) override;
416     void SetBackgroundColor(uint32_t colorValue) override;
417     void SetRenderPivot(float pivotX, float pivotY) override;
418     void SetFrame(float positionX, float positionY, float width, float height) override;
419     void SetOpacity(float opacity) override;
420     void SetTranslate(float translateX, float translateY, float translateZ) override;
421     void SetHostNode(const WeakPtr<FrameNode>& host) override;
422 
423     void SetRectMask(const RectF& rect, const ShapeMaskProperty& property) override;
424     void SetCircleMask(const Circle& circle, const ShapeMaskProperty& property) override;
425     void SetRoundRectMask(const RoundRect& roundRect, const ShapeMaskProperty& property) override;
426     void SetOvalMask(const RectF& rect, const ShapeMaskProperty& property) override;
427     void SetCommandPathMask(const std::string& commands, const ShapeMaskProperty& property) override;
428     void ResetSurface(int width, int height) override;
429     void SetMarkNodeGroup(bool isNodeGroup) override;
430     int32_t GetRotateDegree() override;
431     void PaintDebugBoundary(bool flag) override;
432     void UpdateRenderGroup(bool isRenderGroup, bool isForced, bool includeProperty) override;
433     void SavePaintRect(bool isRound = true, uint16_t flag = 0) override;
434     void SyncPartialRsProperties() override;
435     void UpdatePaintRect(const RectF& paintRect) override;
436     Matrix4 GetRevertMatrix() override;
437     void SuggestOpIncNode(bool isOpincNode, bool isNeedCalculate) override;
438     void SetOpacityMultiplier(float opacity) override;
IsDisappearing()439     bool IsDisappearing() const override
440     {
441         return isDisappearing_;
442     }
443     void UpdateWindowBlur() override;
444     void MarkUiFirstNode(bool isUiFirstNode) override;
445 
446     void SetDrawNode() override;
447     bool AddNodeToRsTree() override;
448     static std::shared_ptr<Rosen::RSNode> GetRsNodeByFrame(const RefPtr<FrameNode>& frameNode);
449     RefPtr<FrameNode> GetFrameNodeById(int32_t frameNodeId);
450     bool CanNodeBeDeleted(const RefPtr<FrameNode>& node) const;
451     void GetLiveChildren(const RefPtr<FrameNode>& node, std::list<RefPtr<FrameNode>>& childNodes);
452     void AddRsNodeForCapture();
453     static bool initDrawNodeChangeCallback_;
454 
455     void FreezeCanvasNode(bool freezeFlag = false);
456     void RemoveCanvasNode();
457     void CheckAnimationParametersValid(int32_t& animationParam);
458     bool SetCanvasNodeOpacityAnimation(int32_t duration, int32_t delay, bool isDragEnd = false);
459     void LinkCanvasNodeToRootNode(const RefPtr<FrameNode>& rootNode);
460     std::shared_ptr<Rosen::RSCanvasNode> GetCanvasNode();
461 
AddKeyFrameAnimateEndCallback(const std::function<void ()> & callback)462     void AddKeyFrameAnimateEndCallback(const std::function<void()>& callback)
463     {
464         callbackAnimateEnd_ =  callback;
465     }
466 
AddKeyFrameCachedAnimateActionCallback(const std::function<void ()> & callback)467     void AddKeyFrameCachedAnimateActionCallback(const std::function<void()>& callback)
468     {
469         callbackCachedAnimateAction_ = callback;
470     }
471 
472 protected:
473     void OnBackgroundImageUpdate(const ImageSourceInfo& src) override;
474     void OnBackgroundImageRepeatUpdate(const ImageRepeat& imageRepeat) override;
475     void OnBackgroundImageSyncModeUpdate(bool imageRepeat) override;
476 
477     void OnBackgroundImageSizeUpdate(const BackgroundImageSize& bgImgSize) override;
478     void OnBackgroundImagePositionUpdate(const BackgroundImagePosition& bgImgPosition) override;
479     void OnBackgroundImageResizableSliceUpdate(const ImageResizableSlice& slice) override;
480 
481     void OnForegroundColorUpdate(const Color& value) override;
482     void OnForegroundColorStrategyUpdate(const ForegroundColorStrategy& value) override;
483 
484     void OnBorderImageUpdate(const RefPtr<BorderImage>& borderImage) override;
485     void OnBorderImageSourceUpdate(const ImageSourceInfo& borderImageSourceInfo) override;
OnHasBorderImageSliceUpdate(bool tag)486     void OnHasBorderImageSliceUpdate(bool tag) override {}
OnHasBorderImageWidthUpdate(bool tag)487     void OnHasBorderImageWidthUpdate(bool tag) override {}
OnHasBorderImageOutsetUpdate(bool tag)488     void OnHasBorderImageOutsetUpdate(bool tag) override {}
OnHasBorderImageRepeatUpdate(bool tag)489     void OnHasBorderImageRepeatUpdate(bool tag) override {}
490     void OnBorderImageGradientUpdate(const Gradient& gradient) override;
491 
492     void OnBorderRadiusUpdate(const BorderRadiusProperty& value) override;
493     void OnBorderColorUpdate(const BorderColorProperty& value) override;
494     void OnBorderStyleUpdate(const BorderStyleProperty& value) override;
495     void OnDashGapUpdate(const BorderWidthProperty& value) override;
496     void OnDashWidthUpdate(const BorderWidthProperty& value) override;
497 
498     void OnOuterBorderRadiusUpdate(const BorderRadiusProperty& value) override;
499     void OnOuterBorderColorUpdate(const BorderColorProperty& value) override;
500     void OnOuterBorderStyleUpdate(const BorderStyleProperty& value) override;
501     void OnOuterBorderWidthUpdate(const BorderWidthProperty& value) override;
502 
503     void OnTransformScaleUpdate(const VectorF& value) override;
504     void OnTransformCenterUpdate(const DimensionOffset& value) override;
505     void OnTransformRotateUpdate(const Vector5F& value) override;
506 
507     void OnOffsetUpdate(const OffsetT<Dimension>& value) override;
508     void OnOffsetEdgesUpdate(const EdgesParam& value) override;
509     void OnAnchorUpdate(const OffsetT<Dimension>& value) override;
510 
511     void OnClipShapeUpdate(const RefPtr<BasicShape>& basicShape) override;
512     void OnClipEdgeUpdate(bool isClip) override;
513     void OnClipMaskUpdate(const RefPtr<BasicShape>& basicShape) override;
514 
515     void OnProgressMaskUpdate(const RefPtr<ProgressMaskProperty>& progress) override;
516 
517     void OnLinearGradientUpdate(const NG::Gradient& value) override;
518     void OnSweepGradientUpdate(const NG::Gradient& value) override;
519     void OnRadialGradientUpdate(const NG::Gradient& value) override;
520 
521     void OnFrontBrightnessUpdate(const Dimension& brightness) override;
522     void OnFrontGrayScaleUpdate(const Dimension& grayScale) override;
523     void OnFrontContrastUpdate(const Dimension& contrast) override;
524     void OnFrontSaturateUpdate(const Dimension& saturate) override;
525     void OnFrontSepiaUpdate(const Dimension& sepia) override;
526     void OnFrontInvertUpdate(const InvertVariant& invert) override;
527     void OnSystemBarEffectUpdate(bool systemBarEffect) override;
528     void OnFrontHueRotateUpdate(float hueRotate) override;
529     void OnFrontColorBlendUpdate(const Color& colorBlend) override;
530     void OnLinearGradientBlurUpdate(const NG::LinearGradientBlurPara& blurPara) override;
531     void OnMagnifierUpdate(const MagnifierParams& magnifierParams) override;
532     void OnDynamicLightUpRateUpdate(const float rate) override;
533     void OnDynamicDimDegreeUpdate(const float degree) override;
534     void OnDynamicLightUpDegreeUpdate(const float degree) override;
535     void OnBgDynamicBrightnessOptionUpdate(const std::optional<BrightnessOption>& brightnessOption) override;
536     void OnFgDynamicBrightnessOptionUpdate(const std::optional<BrightnessOption>& brightnessOption) override;
537 
538     void OnOverlayTextUpdate(const OverlayOptions& overlay) override;
539     void OnMotionPathUpdate(const MotionPathOption& motionPath) override;
540 
541     void OnLightPositionUpdate(const TranslateOptions& position) override;
542     void OnLightIntensityUpdate(const float lightIntensity) override;
543     void OnLightColorUpdate(const Color& lightColor) override;
544     void OnLightIlluminatedUpdate(const uint32_t lightIlluminated) override;
545     void OnIlluminatedBorderWidthUpdate(const Dimension& illuminatedBorderWidth) override;
546     void OnBloomUpdate(const float bloomIntensity) override;
547 
548     void OnUseEffectUpdate(bool useEffect) override;
549     void OnUseEffectTypeUpdate(EffectType effectType) override;
550     bool GetStatusByEffectTypeAndWindow() override;
551     void OnUseShadowBatchingUpdate(bool useShadowBatching) override;
552     void OnFreezeUpdate(bool isFreezed) override;
553     void OnRenderGroupUpdate(bool isRenderGroup) override;
554     void OnSuggestedRenderGroupUpdate(bool isRenderGroup) override;
555     void OnRenderFitUpdate(RenderFit renderFit) override;
556     void OnNodeNameUpdate(const std::string& id) override;
557     void OnAttractionEffectUpdate(const AttractionEffect& effect) override;
558     void ReCreateRsNodeTree(const std::list<RefPtr<FrameNode>>& children);
559 
560     void SyncAdditionalGeometryProperties(const RectF& paintRect);
561     void SetChildBounds(const RectF& paintRect) const;
562     void NotifyTransitionInner(const SizeF& frameSize, bool isTransitionIn);
563     void NotifyTransition(bool isTransitionIn);
HasTransitionOutAnimation()564     bool HasTransitionOutAnimation() const override
565     {
566         return disappearingTransitionCount_ > 0;
567     }
HasDisappearTransition()568     bool HasDisappearTransition() const override
569     {
570         return transitionEffect_ != nullptr && transitionEffect_->HasDisappearTransition();
571     }
572     bool HasValidBgImageResizable();
573     void OnTransitionInFinish();
574     void OnTransitionOutFinish();
575     void RemoveDefaultTransition();
576     void FireTransitionUserCallback(bool isTransitionIn);
577     void PostTransitionUserOutCallback();
578     void SetTransitionPivot(const SizeF& frameSize, bool transitionIn);
579     void SetPivot(float xPivot, float yPivot, float zPivot = 0.0f);
580     void SetPositionToRSNode();
581 
582     // Convert BorderRadiusProperty to Rosen::Vector4f
583     static inline void ConvertRadius(const BorderRadiusProperty& value, Rosen::Vector4f& cornerRadius);
584 
585     void PaintBackground();
586     void PaintClipShape(const std::unique_ptr<ClipProperty>& clip, const SizeF& frameSize);
587     void PaintClipMask(const std::unique_ptr<ClipProperty>& clip, const SizeF& frameSize);
588     void PaintClip(const SizeF& frameSize);
589     void PaintProgressMask();
590     void PaintGradient(const SizeF& frameSize);
591     void PaintGraphics();
592     void PaintOverlayText();
593     void PaintBorderImage();
594     float ConvertDimensionToPx(Dimension& src, float size);
595     Rosen::ParticleParams ConvertParticleOptionToParams(const ParticleOption& particleOption, const RectF& rect);
596     Rosen::EmitterConfig ConvertParticleEmitterOption(const EmitterOption& emitterOption, const RectF& rect);
597     Rosen::ParticleVelocity ConvertParticleVelocityOption(const VelocityProperty& velocity);
598     Rosen::ParticleVelocity ConvertParticleDefaultVelocityOption();
599     Rosen::ParticleAcceleration ConvertParticleAccelerationOption(const AccelerationProperty& acceleration);
600     Rosen::ParticleAcceleration ConvertParticleDefaultAccelerationOption();
601     Rosen::ParticleColorParaType ConvertParticleColorOption(const ParticleColorPropertyOption& colorOption);
602     Rosen::ParticleColorParaType ConvertParticleDefaultColorOption(
603         std::optional<OHOS::Rosen::Range<OHOS::Rosen::RSColor>> rsInitRangeOpt);
604     Rosen::ParticleParaType<float> ConvertParticleFloatOption(const ParticleFloatPropertyOption& floatOption);
605     Rosen::ParticleParaType<float> ConvertParticleDefaultFloatOption(OHOS::Rosen::Range<float>& rsInitRange);
606     bool NeedPreloadImage(const std::list<ParticleOption>& optionList, RectF& rect);
607     void LoadParticleImage(const std::string& src, Dimension& width, Dimension& height);
608     void OnParticleImageLoaded(const std::string& src, const RefPtr<CanvasImage> canvas);
609     void SetRsParticleImage(std::shared_ptr<Rosen::RSImage>& rsImagePtr, std::string& imageSource);
610     void PaintRSBgImage();
611     void PaintPixmapBgImage();
612     void PaintBorderImageGradient();
613     void PaintMouseSelectRect(const RectF& rect, const Color& fillColor, const Color& strokeColor);
614     void SetBackBlurFilter();
615     void SetFrontBlurFilter();
616     bool UpdateBlurBackgroundColor(const std::optional<BlurStyleOption>& bgBlurStyle);
617     bool UpdateBlurBackgroundColor(const std::optional<EffectOption>& efffectOption);
618     void GetPaddingOfFirstFrameNodeParent(Dimension& parentPaddingLeft, Dimension& parentPaddingTop);
619     void CombineMarginAndPosition(Dimension& resultX, Dimension& resultY, const Dimension& parentPaddingLeft,
620         const Dimension& parentPaddingTop, float widthPercentReference, float heightPercentReference);
621     OffsetF GetRectOffsetWithOffsetEdges(
622         const EdgesParam& offsetEdges, float widthPercentReference, float heightPercentReference);
623     OffsetF GetRectOffsetWithPositionEdges(
624         const EdgesParam& positionEdges, float widthPercentReference, float heightPercentReference);
625 
626     void InitEventClickEffect();
627     RefPtr<Curve> UpdatePlayAnimationValue(const ClickEffectLevel& level, float& scaleValue);
628     void ClickEffectPlayAnimation(const TouchType& touchType);
629 
630     // helper function to check if paint rect is valid
631     bool RectIsNull();
632 
633     /** Set data to the modifier and bind it to rsNode_
634      *   If [modifier] not initialized, initialize it and add it to rsNode
635      *
636      *   @param modifier     shared_ptr to a member modifier
637      *   @param data         passed to SetCustomData, set to the modifier
638      */
639     template<typename T, typename D>
640     void SetGraphicModifier(std::shared_ptr<T>& modifier, D data);
641 
642     void AddModifier(const std::shared_ptr<Rosen::RSModifier>& modifier);
643     void RemoveModifier(const std::shared_ptr<Rosen::RSModifier>& modifier);
644 
645     // helper function to update one of the graphic effects
646     template<typename T, typename D>
647     void UpdateGraphic(std::shared_ptr<T>& modifier, D data);
648 
649     RectF AdjustPaintRect();
650 
651     DataReadyNotifyTask CreateBgImageDataReadyCallback();
652     LoadSuccessNotifyTask CreateBgImageLoadSuccessCallback();
653     DataReadyNotifyTask CreateBorderImageDataReadyCallback();
654     LoadSuccessNotifyTask CreateBorderImageLoadSuccessCallback();
655     void BdImagePaintTask(RSCanvas& canvas);
656 
657     void RegisterDensityChangedCallback();
658 
659     bool IsUsingPosition(const RefPtr<FrameNode>& frameNode);
660 
661     void SetContentRectToFrame(RectF rect) override;
662 
663     float RoundValueToPixelGrid(float value);
664     float RoundValueToPixelGrid(float value, bool isRound, bool forceCeil, bool forceFloor);
665     float OnePixelValueRounding(float value);
666     float OnePixelValueRounding(float value, bool isRound, bool forceCeil, bool forceFloor);
667     void RoundToPixelGrid();
668     void RoundToPixelGrid(bool isRound, uint16_t flag);
669     void OnePixelRounding();
670     void OnePixelRounding(uint16_t flag = 0);
671     Matrix4 GetMatrix();
672     bool IsUniRenderEnabled() override;
673     void AddFrameNodeInfoToRsNode();
674     // Use rect to update the drawRegion rect at index.
675     void UpdateDrawRegion(uint32_t index, const std::shared_ptr<Rosen::RectF>& rect);
676     void NotifyHostTransformUpdated(bool changed = true);
677     void InitAccessibilityFocusModidifer(const RoundRect&, const Color&, float);
678     void InitFocusStateModidifer(const RoundRect&, const Color&, float);
679     void InitFocusAnimationModidifer(const RoundRect&, const Color&, float);
680 
681     std::shared_ptr<Rosen::RSNode> CreateHardwareSurface(
682         const std::optional<ContextParam>& param, bool isTextureExportNode);
683 #ifdef RENDER_EXTRACT_SUPPORTED
684     std::shared_ptr<Rosen::RSNode> CreateHardwareTexture(
685         const std::optional<ContextParam>& param, bool isTextureExportNode);
686 #endif
687     void DetachModifiers();
688 
689     RefPtr<ImageLoadingContext> bgLoadingCtx_;
690     RefPtr<CanvasImage> bgImage_;
691     RefPtr<ImageLoadingContext> bdImageLoadingCtx_;
692     RefPtr<CanvasImage> bdImage_;
693 
694     PatternType patternType_ = PatternType::DEFAULT;
695     std::shared_ptr<Rosen::RSNode> rsNode_;
696     bool isHdr_ = false;
697     bool isHoveredScale_ = false;
698     bool isHoveredBoard_ = false;
699     bool firstTransitionIn_ = false;
700     bool isBreakingPoint_ = false;
701     bool isBackBlurChanged_ = false;
702     bool needDebugBoundary_ = false;
703     bool isDisappearing_ = false;
704     bool hasDefaultTransition_ = false;
705     bool measureTriggered_ = false;
706     bool particleAnimationPlaying_ = false;
707     bool hasScales_ = false;
708     int appearingTransitionCount_ = 0;
709     int disappearingTransitionCount_ = 0;
710     int sandBoxCount_ = 0;
711     int32_t densityChangedCallbackId_ = DEFAULT_CALLBACK_ID;
712     static constexpr int32_t DEFAULT_CALLBACK_ID = -1;
713     static constexpr int32_t INVALID_PARENT_ID = -2100000;
714     static constexpr uint32_t DRAW_REGION_RECT_COUNT = 7;
715     std::map<std::string, RefPtr<ImageLoadingContext>> particleImageContextMap_;
716     std::map<std::string, RefPtr<CanvasImage>> particleImageMap_;
717     Color blendColor_ = Color::TRANSPARENT;
718     Color hoveredColor_ = Color::TRANSPARENT;
719 
720     RefPtr<RosenTransitionEffect> transitionEffect_;
721     std::function<void()> transitionOutCallback_;
722     std::function<void()> transitionInCallback_;
723     TransitionFinishCallback transitionUserCallback_;
724     std::shared_ptr<DebugBoundaryModifier> debugBoundaryModifier_;
725     std::shared_ptr<BackgroundModifier> backgroundModifier_;
726     std::shared_ptr<BorderImageModifier> borderImageModifier_;
727     std::shared_ptr<MouseSelectModifier> mouseSelectModifier_;
728     RefPtr<MoonProgressModifier> moonProgressModifier_;
729     std::shared_ptr<Rosen::RSClipBoundsModifier> clipBoundModifier_;
730     std::shared_ptr<Rosen::RSMaskModifier> clipMaskModifier_;
731     std::shared_ptr<FocusStateModifier> focusStateModifier_;
732     std::shared_ptr<FocusStateModifier> accessibilityFocusStateModifier_;
733     std::optional<TransformMatrixModifier> transformMatrixModifier_;
734     std::shared_ptr<Rosen::RSProperty<Rosen::Vector2f>> pivotProperty_;
735     std::unique_ptr<SharedTransitionModifier> sharedTransitionModifier_;
736     std::shared_ptr<OverlayTextModifier> modifier_ = nullptr;
737     std::shared_ptr<GradientStyleModifier> gradientStyleModifier_;
738     std::optional<WindowBlurModifier> windowBlurModifier_;
739     // translate and scale modifier for developer
740     std::shared_ptr<Rosen::RSTranslateModifier> translateXYUserModifier_;
741     std::shared_ptr<Rosen::RSTranslateZModifier> translateZUserModifier_;
742     std::shared_ptr<Rosen::RSScaleModifier> scaleXYUserModifier_;
743     std::shared_ptr<Rosen::RectF> drawRegionRects_[DRAW_REGION_RECT_COUNT] = { nullptr };
744     std::shared_ptr<Rosen::RSAlphaModifier> alphaModifier_;
745     RefPtr<FocusAnimationModifier> focusAnimationModifier_;
746 
747     // translate modifiers for interruption
748     std::shared_ptr<Rosen::RSTranslateModifier> translateXY_;
749 
750     std::optional<OffsetF> frameOffset_;
751 
752     // graphics modifiers
753     struct GraphicModifiers {
754         std::shared_ptr<GrayScaleModifier> grayScale;
755         std::shared_ptr<BrightnessModifier> brightness;
756         std::shared_ptr<ContrastModifier> contrast;
757         std::shared_ptr<SaturateModifier> saturate;
758         std::shared_ptr<SepiaModifier> sepia;
759         std::shared_ptr<InvertModifier> invert;
760         std::shared_ptr<HueRotateModifier> hueRotate;
761         std::shared_ptr<ColorBlendModifier> colorBlend;
762     };
763     std::unique_ptr<GraphicModifiers> graphics_;
764 
765     RefPtr<TouchEventImpl> touchListener_;
766     VectorF currentScale_ = VectorF(1.0f, 1.0f);
767     // borderLeft borderTop borderRight borderBottom
768     Rosen::Vector4f borderWidth_ = Rosen::Vector4f(0.0f, 0.0f, 0.0f, 0.0f);
769     bool isTouchUpFinished_ = true;
770 
771     bool useContentRectForRSFrame_;
772     bool adjustRSFrameByContentRect_ = false;
773     bool isFocusBoxGlow_ = false;
774 
775     RectF paintRect_;
776     // offset generated by layout node
777     std::optional<OffsetF> extraOffset_;
778     std::unique_ptr<RectF> contentClip_;
779 
780     std::shared_ptr<Rosen::RSTextureExport> rsTextureExport_;
781 
782     std::shared_ptr<Rosen::RSCanvasNode> canvasNode_;
783     std::function<void()> callbackAnimateEnd_ = nullptr;
784     std::function<void()> callbackCachedAnimateAction_ = nullptr;
785 
786     template<typename Modifier, typename PropertyType>
787     friend class PropertyTransitionEffectTemplate;
788     friend class RosenPivotTransitionEffect;
789 
790     ACE_DISALLOW_COPY_AND_MOVE(RosenRenderContext);
791 };
792 } // namespace OHOS::Ace::NG
793 
794 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PAINTS_ADAPTER_ROSEN_RENDER_CONTEXT_H
795