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