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