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