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