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