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