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