1f857971dSopenharmony_ci/* 2f857971dSopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd. 3f857971dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f857971dSopenharmony_ci * you may not use this file except in compliance with the License. 5f857971dSopenharmony_ci * You may obtain a copy of the License at 6f857971dSopenharmony_ci * 7f857971dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f857971dSopenharmony_ci * 9f857971dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f857971dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f857971dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f857971dSopenharmony_ci * See the License for the specific language governing permissions and 13f857971dSopenharmony_ci * limitations under the License. 14f857971dSopenharmony_ci */ 15f857971dSopenharmony_ci 16f857971dSopenharmony_ci#ifndef DRAG_DRAWING_H 17f857971dSopenharmony_ci#define DRAG_DRAWING_H 18f857971dSopenharmony_ci 19f857971dSopenharmony_ci#include <vector> 20f857971dSopenharmony_ci 21f857971dSopenharmony_ci#include "display_manager.h" 22f857971dSopenharmony_ci#include "event_handler.h" 23f857971dSopenharmony_ci#include "event_runner.h" 24f857971dSopenharmony_ci#include "json_parser.h" 25f857971dSopenharmony_ci#include "libxml/tree.h" 26f857971dSopenharmony_ci#include "libxml/parser.h" 27f857971dSopenharmony_ci#include "modifier/rs_extended_modifier.h" 28f857971dSopenharmony_ci#include "modifier/rs_modifier.h" 29f857971dSopenharmony_ci#include "vsync_receiver.h" 30f857971dSopenharmony_ci 31f857971dSopenharmony_ci#include "drag_data.h" 32f857971dSopenharmony_ci#include "drag_smooth_processor.h" 33f857971dSopenharmony_ci#include "drag_vsync_station.h" 34f857971dSopenharmony_ci#ifndef OHOS_BUILD_ENABLE_ARKUI_X 35f857971dSopenharmony_ci#include "i_context.h" 36f857971dSopenharmony_ci#endif // OHOS_BUILD_ENABLE_ARKUI_X 37f857971dSopenharmony_ci#include "i_drag_animation.h" 38f857971dSopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ARKUI_X 39f857971dSopenharmony_ci#include "pointer_style.h" 40f857971dSopenharmony_ci#include "virtual_rs_window.h" 41f857971dSopenharmony_ci#endif // OHOS_BUILD_ENABLE_ARKUI_X 42f857971dSopenharmony_ci 43f857971dSopenharmony_cinamespace OHOS { 44f857971dSopenharmony_cinamespace Msdp { 45f857971dSopenharmony_cinamespace DeviceStatus { 46f857971dSopenharmony_cistruct DrawingInfo; 47f857971dSopenharmony_ciclass DragDrawing; 48f857971dSopenharmony_ciusing DragStartExtFunc = void (*)(DragData &dragData); 49f857971dSopenharmony_ciusing DragNotifyExtFunc = void (*)(DragEventInfo &dragEventInfo); 50f857971dSopenharmony_ciclass DrawSVGModifier : public Rosen::RSContentStyleModifier { 51f857971dSopenharmony_cipublic: 52f857971dSopenharmony_ci explicit DrawSVGModifier(std::shared_ptr<Media::PixelMap> stylePixelMap) : stylePixelMap_(stylePixelMap) {} 53f857971dSopenharmony_ci ~DrawSVGModifier() = default; 54f857971dSopenharmony_ci void Draw(Rosen::RSDrawingContext& context) const override; 55f857971dSopenharmony_ci 56f857971dSopenharmony_ciprivate: 57f857971dSopenharmony_ci std::shared_ptr<Media::PixelMap> stylePixelMap_ { nullptr }; 58f857971dSopenharmony_ci}; 59f857971dSopenharmony_ci 60f857971dSopenharmony_ciclass DrawPixelMapModifier : public Rosen::RSContentStyleModifier { 61f857971dSopenharmony_cipublic: 62f857971dSopenharmony_ci DrawPixelMapModifier() = default; 63f857971dSopenharmony_ci ~DrawPixelMapModifier() = default; 64f857971dSopenharmony_ci void SetDragShadow(std::shared_ptr<Rosen::RSCanvasNode> pixelMapNode) const; 65f857971dSopenharmony_ci void SetTextDragShadow(std::shared_ptr<Rosen::RSCanvasNode> pixelMapNode) const; 66f857971dSopenharmony_ci Rosen::SHADOW_COLOR_STRATEGY ConvertShadowColorStrategy(int32_t shadowColorStrategy) const; 67f857971dSopenharmony_ci void Draw(Rosen::RSDrawingContext &context) const override; 68f857971dSopenharmony_ci}; 69f857971dSopenharmony_ci 70f857971dSopenharmony_ciclass DrawMouseIconModifier : public Rosen::RSContentStyleModifier { 71f857971dSopenharmony_cipublic: 72f857971dSopenharmony_ci explicit DrawMouseIconModifier(MMI::PointerStyle pointerStyle) : pointerStyle_(pointerStyle) {} 73f857971dSopenharmony_ci ~DrawMouseIconModifier() = default; 74f857971dSopenharmony_ci void Draw(Rosen::RSDrawingContext &context) const override; 75f857971dSopenharmony_ci 76f857971dSopenharmony_ciprivate: 77f857971dSopenharmony_ci void OnDraw(std::shared_ptr<Media::PixelMap> pixelMap) const; 78f857971dSopenharmony_ci std::shared_ptr<Media::PixelMap> DrawFromSVG() const; 79f857971dSopenharmony_ci 80f857971dSopenharmony_ciprivate: 81f857971dSopenharmony_ci MMI::PointerStyle pointerStyle_; 82f857971dSopenharmony_ci}; 83f857971dSopenharmony_ci 84f857971dSopenharmony_ciclass DrawDynamicEffectModifier : public Rosen::RSContentStyleModifier { 85f857971dSopenharmony_cipublic: 86f857971dSopenharmony_ci DrawDynamicEffectModifier() = default; 87f857971dSopenharmony_ci ~DrawDynamicEffectModifier() = default; 88f857971dSopenharmony_ci void Draw(Rosen::RSDrawingContext &context) const override; 89f857971dSopenharmony_ci void SetAlpha(float alpha); 90f857971dSopenharmony_ci void SetScale(float scale); 91f857971dSopenharmony_ci 92f857971dSopenharmony_ciprivate: 93f857971dSopenharmony_ci std::shared_ptr<Rosen::RSAnimatableProperty<float>> alpha_ { nullptr }; 94f857971dSopenharmony_ci std::shared_ptr<Rosen::RSAnimatableProperty<float>> scale_ { nullptr }; 95f857971dSopenharmony_ci}; 96f857971dSopenharmony_ci 97f857971dSopenharmony_ciclass DrawDragStopModifier : public Rosen::RSContentStyleModifier { 98f857971dSopenharmony_cipublic: 99f857971dSopenharmony_ci DrawDragStopModifier() = default; 100f857971dSopenharmony_ci ~DrawDragStopModifier() = default; 101f857971dSopenharmony_ci void Draw(Rosen::RSDrawingContext &context) const override; 102f857971dSopenharmony_ci void SetAlpha(float alpha); 103f857971dSopenharmony_ci void SetScale(float scale); 104f857971dSopenharmony_ci void SetStyleScale(float scale); 105f857971dSopenharmony_ci void SetStyleAlpha(float alpha); 106f857971dSopenharmony_ci 107f857971dSopenharmony_ciprivate: 108f857971dSopenharmony_ci std::shared_ptr<Rosen::RSAnimatableProperty<float>> alpha_ { nullptr }; 109f857971dSopenharmony_ci std::shared_ptr<Rosen::RSAnimatableProperty<float>> scale_ { nullptr }; 110f857971dSopenharmony_ci std::shared_ptr<Rosen::RSAnimatableProperty<float>> styleScale_ { nullptr }; 111f857971dSopenharmony_ci std::shared_ptr<Rosen::RSAnimatableProperty<float>> styleAlpha_ { nullptr }; 112f857971dSopenharmony_ci}; 113f857971dSopenharmony_ci 114f857971dSopenharmony_ciclass DrawStyleChangeModifier : public Rosen::RSContentStyleModifier { 115f857971dSopenharmony_cipublic: 116f857971dSopenharmony_ci DrawStyleChangeModifier() = default; 117f857971dSopenharmony_ci explicit DrawStyleChangeModifier(std::shared_ptr<Media::PixelMap> stylePixelMap) : stylePixelMap_(stylePixelMap) {} 118f857971dSopenharmony_ci ~DrawStyleChangeModifier() = default; 119f857971dSopenharmony_ci void Draw(Rosen::RSDrawingContext &context) const override; 120f857971dSopenharmony_ci void SetScale(float scale); 121f857971dSopenharmony_ci 122f857971dSopenharmony_ciprivate: 123f857971dSopenharmony_ci std::shared_ptr<Media::PixelMap> stylePixelMap_ { nullptr }; 124f857971dSopenharmony_ci std::shared_ptr<Rosen::RSAnimatableProperty<float>> scale_ { nullptr }; 125f857971dSopenharmony_ci}; 126f857971dSopenharmony_ci 127f857971dSopenharmony_ciclass DrawStyleScaleModifier : public Rosen::RSContentStyleModifier { 128f857971dSopenharmony_cipublic: 129f857971dSopenharmony_ci DrawStyleScaleModifier() = default; 130f857971dSopenharmony_ci ~DrawStyleScaleModifier() = default; 131f857971dSopenharmony_ci void Draw(Rosen::RSDrawingContext &context) const override; 132f857971dSopenharmony_ci void SetScale(float scale); 133f857971dSopenharmony_ci 134f857971dSopenharmony_ciprivate: 135f857971dSopenharmony_ci std::shared_ptr<Rosen::RSAnimatableProperty<float>> scale_ { nullptr }; 136f857971dSopenharmony_ci}; 137f857971dSopenharmony_ci 138f857971dSopenharmony_cistruct FilterInfo { 139f857971dSopenharmony_ci std::string dragType; 140f857971dSopenharmony_ci bool shadowEnable { false }; 141f857971dSopenharmony_ci bool shadowIsFilled { false }; 142f857971dSopenharmony_ci bool shadowMask { false }; 143f857971dSopenharmony_ci int32_t shadowColorStrategy { 0 }; 144f857971dSopenharmony_ci float shadowCorner { 0.0F }; 145f857971dSopenharmony_ci float dipScale { 0.0f }; 146f857971dSopenharmony_ci float scale { 1.0f }; 147f857971dSopenharmony_ci float cornerRadius1 { 0.0f }; 148f857971dSopenharmony_ci float cornerRadius2 { 0.0f }; 149f857971dSopenharmony_ci float cornerRadius3 { 0.0f }; 150f857971dSopenharmony_ci float cornerRadius4 { 0.0f }; 151f857971dSopenharmony_ci float opacity { 0.95f }; 152f857971dSopenharmony_ci float offsetX { 0.0f }; 153f857971dSopenharmony_ci float offsetY { 0.0f }; 154f857971dSopenharmony_ci uint32_t argb { 0 }; 155f857971dSopenharmony_ci std::string path; 156f857971dSopenharmony_ci float elevation { 0.0f }; 157f857971dSopenharmony_ci bool isHardwareAcceleration { false }; 158f857971dSopenharmony_ci Rosen::Vector2f coef; 159f857971dSopenharmony_ci float blurRadius { -1.0f }; 160f857971dSopenharmony_ci float blurStaturation { -1.0f }; 161f857971dSopenharmony_ci float blurBrightness { -1.0f }; 162f857971dSopenharmony_ci uint32_t blurColor { 0 }; 163f857971dSopenharmony_ci int32_t blurStyle { -1 }; 164f857971dSopenharmony_ci float dragNodeGrayscale { 0.0f }; 165f857971dSopenharmony_ci}; 166f857971dSopenharmony_ci 167f857971dSopenharmony_cistruct ExtraInfo { 168f857971dSopenharmony_ci std::string componentType; 169f857971dSopenharmony_ci int32_t blurStyle { -1 }; 170f857971dSopenharmony_ci float cornerRadius { 0.0f }; 171f857971dSopenharmony_ci bool allowDistributed { true }; 172f857971dSopenharmony_ci Rosen::Vector2f coef; 173f857971dSopenharmony_ci}; 174f857971dSopenharmony_ci 175f857971dSopenharmony_cienum class ScreenSizeType { 176f857971dSopenharmony_ci // Undefined screen width 177f857971dSopenharmony_ci UNDEFINED = 0, 178f857971dSopenharmony_ci // Screen width size is XS, grids is 2 179f857971dSopenharmony_ci XS, 180f857971dSopenharmony_ci // Screen width size is SM, grids is 4 181f857971dSopenharmony_ci SM, 182f857971dSopenharmony_ci // Screen width size is MD, grids is 8 183f857971dSopenharmony_ci MD, 184f857971dSopenharmony_ci // Screen width size is LG, grids is 12 185f857971dSopenharmony_ci LG, 186f857971dSopenharmony_ci // Screen width size is XL, maxi number of grids 187f857971dSopenharmony_ci XL, 188f857971dSopenharmony_ci}; 189f857971dSopenharmony_ci 190f857971dSopenharmony_cistruct DrawingInfo { 191f857971dSopenharmony_ci std::atomic_bool isRunning { false }; 192f857971dSopenharmony_ci std::atomic_bool isPreviousDefaultStyle { false }; 193f857971dSopenharmony_ci std::atomic_bool isCurrentDefaultStyle { false }; 194f857971dSopenharmony_ci bool isInitUiDirector { true }; 195f857971dSopenharmony_ci bool isExistScalingValue { false }; 196f857971dSopenharmony_ci std::atomic_bool needDestroyDragWindow { false }; 197f857971dSopenharmony_ci int32_t sourceType { -1 }; 198f857971dSopenharmony_ci int32_t currentDragNum { -1 }; 199f857971dSopenharmony_ci DragCursorStyle currentStyle { DragCursorStyle::DEFAULT }; 200f857971dSopenharmony_ci int32_t displayId { -1 }; 201f857971dSopenharmony_ci int32_t pixelMapX { -1 }; 202f857971dSopenharmony_ci int32_t pixelMapY { -1 }; 203f857971dSopenharmony_ci int32_t displayX { -1 }; 204f857971dSopenharmony_ci int32_t displayY { -1 }; 205f857971dSopenharmony_ci float x { -1.0f }; 206f857971dSopenharmony_ci float y { -1.0f }; 207f857971dSopenharmony_ci float currentPositionX { -1.0f }; 208f857971dSopenharmony_ci float currentPositionY { -1.0f }; 209f857971dSopenharmony_ci int32_t mouseWidth { 0 }; 210f857971dSopenharmony_ci int32_t mouseHeight { 0 }; 211f857971dSopenharmony_ci int32_t rootNodeWidth { -1 }; 212f857971dSopenharmony_ci int32_t rootNodeHeight { -1 }; 213f857971dSopenharmony_ci std::atomic<int64_t> startNum { -1 }; 214f857971dSopenharmony_ci int32_t timerId { -1 }; 215f857971dSopenharmony_ci float scalingValue { 0.0 }; 216f857971dSopenharmony_ci std::vector<std::shared_ptr<Rosen::RSCanvasNode>> nodes; 217f857971dSopenharmony_ci std::vector<std::shared_ptr<Rosen::RSCanvasNode>> multiSelectedNodes; 218f857971dSopenharmony_ci std::vector<std::shared_ptr<Media::PixelMap>> multiSelectedPixelMaps; 219f857971dSopenharmony_ci std::shared_ptr<Rosen::RSNode> rootNode { nullptr }; 220f857971dSopenharmony_ci std::shared_ptr<Rosen::RSNode> parentNode { nullptr }; 221f857971dSopenharmony_ci std::shared_ptr<Rosen::RSSurfaceNode> surfaceNode { nullptr }; 222f857971dSopenharmony_ci std::shared_ptr<Media::PixelMap> pixelMap { nullptr }; 223f857971dSopenharmony_ci std::shared_ptr<Media::PixelMap> stylePixelMap { nullptr }; 224f857971dSopenharmony_ci#ifndef OHOS_BUILD_ENABLE_ARKUI_X 225f857971dSopenharmony_ci IContext* context { nullptr }; 226f857971dSopenharmony_ci#endif // OHOS_BUILD_ENABLE_ARKUI_X 227f857971dSopenharmony_ci ExtraInfo extraInfo; 228f857971dSopenharmony_ci FilterInfo filterInfo; 229f857971dSopenharmony_ci}; 230f857971dSopenharmony_ci 231f857971dSopenharmony_cistruct DragWindowRotationInfo { 232f857971dSopenharmony_ci float rotation { 0.0f }; 233f857971dSopenharmony_ci float pivotX { 0.0f }; 234f857971dSopenharmony_ci float pivotY { 0.0f }; 235f857971dSopenharmony_ci}; 236f857971dSopenharmony_ci 237f857971dSopenharmony_ciclass DragDrawing : public IDragAnimation { 238f857971dSopenharmony_cipublic: 239f857971dSopenharmony_ci DragDrawing() = default; 240f857971dSopenharmony_ci DISALLOW_COPY_AND_MOVE(DragDrawing); 241f857971dSopenharmony_ci ~DragDrawing(); 242f857971dSopenharmony_ci 243f857971dSopenharmony_ci#ifndef OHOS_BUILD_ENABLE_ARKUI_X 244f857971dSopenharmony_ci int32_t Init(const DragData &dragData, IContext* context); 245f857971dSopenharmony_ci#else 246f857971dSopenharmony_ci int32_t Init(const DragData &dragData); 247f857971dSopenharmony_ci#endif // OHOS_BUILD_ENABLE_ARKUI_X 248f857971dSopenharmony_ci void NotifyDragInfo(const std::string &sourceName, const std::string &targetName); 249f857971dSopenharmony_ci void Draw(int32_t displayId, int32_t displayX, int32_t displayY, bool isNeedAdjustDisplayXY = true, 250f857971dSopenharmony_ci bool isMultiSelectedAnimation = true); 251f857971dSopenharmony_ci int32_t UpdateDragStyle(DragCursorStyle style); 252f857971dSopenharmony_ci int32_t UpdateShadowPic(const ShadowInfo &shadowInfo); 253f857971dSopenharmony_ci int32_t UpdatePreviewStyle(const PreviewStyle &previewStyle); 254f857971dSopenharmony_ci int32_t UpdatePreviewStyleWithAnimation(const PreviewStyle &previewStyle, const PreviewAnimation &animation); 255f857971dSopenharmony_ci int32_t StartVsync(); 256f857971dSopenharmony_ci#ifndef OHOS_BUILD_ENABLE_ARKUI_X 257f857971dSopenharmony_ci void OnDragSuccess(IContext* context); 258f857971dSopenharmony_ci void OnDragFail(IContext* context); 259f857971dSopenharmony_ci#else 260f857971dSopenharmony_ci void OnDragSuccess(); 261f857971dSopenharmony_ci void OnDragFail(); 262f857971dSopenharmony_ci void SetDragWindow(std::shared_ptr<OHOS::Rosen::Window> window); 263f857971dSopenharmony_ci void AddDragDestroy(std::function<void()> cb); 264f857971dSopenharmony_ci void SetSVGFilePath(const std::string &filePath); 265f857971dSopenharmony_ci#endif // OHOS_BUILD_ENABLE_ARKUI_X 266f857971dSopenharmony_ci void OnDragMove(int32_t displayId, int32_t displayX, int32_t displayY, int64_t actionTime); 267f857971dSopenharmony_ci void EraseMouseIcon(); 268f857971dSopenharmony_ci void DestroyDragWindow(); 269f857971dSopenharmony_ci void UpdateDrawingState(); 270f857971dSopenharmony_ci void UpdateDragWindowState(bool visible); 271f857971dSopenharmony_ci void OnStartDrag(const DragAnimationData &dragAnimationData, std::shared_ptr<Rosen::RSCanvasNode> shadowNode, 272f857971dSopenharmony_ci std::shared_ptr<Rosen::RSCanvasNode> dragStyleNode) override; 273f857971dSopenharmony_ci void OnDragStyle(std::shared_ptr<Rosen::RSCanvasNode> dragStyleNode, 274f857971dSopenharmony_ci std::shared_ptr<Media::PixelMap> stylePixelMap) override; 275f857971dSopenharmony_ci void OnStopDragSuccess(std::shared_ptr<Rosen::RSCanvasNode> shadowNode, 276f857971dSopenharmony_ci std::shared_ptr<Rosen::RSCanvasNode> dragStyleNode) override; 277f857971dSopenharmony_ci void OnStopDragFail(std::shared_ptr<Rosen::RSSurfaceNode> surfaceNode, 278f857971dSopenharmony_ci std::shared_ptr<Rosen::RSNode> rootNode) override; 279f857971dSopenharmony_ci void OnStopAnimation() override; 280f857971dSopenharmony_ci int32_t EnterTextEditorArea(bool enable); 281f857971dSopenharmony_ci bool GetAllowDragState(); 282f857971dSopenharmony_ci void SetScreenId(uint64_t screenId); 283f857971dSopenharmony_ci int32_t RotateDragWindowAsync(Rosen::Rotation rotation); 284f857971dSopenharmony_ci int32_t RotateDragWindowSync(const std::shared_ptr<Rosen::RSTransaction>& rsTransaction = nullptr); 285f857971dSopenharmony_ci void SetRotation(Rosen::Rotation rotation); 286f857971dSopenharmony_ci float CalculateWidthScale(); 287f857971dSopenharmony_ci float GetMaxWidthScale(int32_t width); 288f857971dSopenharmony_ci int32_t AddSelectedPixelMap(std::shared_ptr<OHOS::Media::PixelMap> pixelMap); 289f857971dSopenharmony_ci void UpdateDragWindowDisplay(int32_t displayId); 290f857971dSopenharmony_ci void ScreenRotate(Rosen::Rotation rotation, Rosen::Rotation lastRotation); 291f857971dSopenharmony_ci 292f857971dSopenharmony_ciprivate: 293f857971dSopenharmony_ci int32_t CheckDragData(const DragData &dragData); 294f857971dSopenharmony_ci int32_t InitLayer(); 295f857971dSopenharmony_ci void InitCanvas(int32_t width, int32_t height); 296f857971dSopenharmony_ci void CreateWindow(); 297f857971dSopenharmony_ci int32_t DrawShadow(std::shared_ptr<Rosen::RSCanvasNode> shadowNode); 298f857971dSopenharmony_ci int32_t DrawMouseIcon(); 299f857971dSopenharmony_ci int32_t DrawStyle(std::shared_ptr<Rosen::RSCanvasNode> dragStyleNode, 300f857971dSopenharmony_ci std::shared_ptr<Media::PixelMap> stylePixelMap); 301f857971dSopenharmony_ci int32_t RunAnimation(std::function<int32_t()> cb); 302f857971dSopenharmony_ci int32_t InitVSync(float endAlpha, float endScale); 303f857971dSopenharmony_ci void OnVsync(); 304f857971dSopenharmony_ci void InitDrawingInfo(const DragData &dragData); 305f857971dSopenharmony_ci int32_t InitDragAnimationData(DragAnimationData &dragAnimationData); 306f857971dSopenharmony_ci void RemoveModifier(); 307f857971dSopenharmony_ci int32_t UpdateSvgNodeInfo(xmlNodePtr curNode, int32_t extendSvgWidth); 308f857971dSopenharmony_ci xmlNodePtr GetRectNode(xmlNodePtr curNode); 309f857971dSopenharmony_ci xmlNodePtr UpdateRectNode(int32_t extendSvgWidth, xmlNodePtr curNode); 310f857971dSopenharmony_ci void UpdateTspanNode(xmlNodePtr curNode); 311f857971dSopenharmony_ci int32_t ParseAndAdjustSvgInfo(xmlNodePtr curNode); 312f857971dSopenharmony_ci std::shared_ptr<Media::PixelMap> DecodeSvgToPixelMap(const std::string &filePath); 313f857971dSopenharmony_ci int32_t GetFilePath(std::string &filePath); 314f857971dSopenharmony_ci bool NeedAdjustSvgInfo(); 315f857971dSopenharmony_ci void SetDecodeOptions(Media::DecodeOptions &decodeOpts); 316f857971dSopenharmony_ci bool ParserFilterInfo(const std::string &filterInfoStr, FilterInfo &filterInfo); 317f857971dSopenharmony_ci void ParserCornerRadiusInfo(const cJSON *cornerRadiusInfoStr, FilterInfo &filterInfo); 318f857971dSopenharmony_ci void ParserBlurInfo(const cJSON *BlurInfoInfoStr, FilterInfo &filterInfo); 319f857971dSopenharmony_ci void SetCustomDragBlur(const FilterInfo &filterInfo, std::shared_ptr<Rosen::RSCanvasNode> filterNode); 320f857971dSopenharmony_ci void SetComponentDragBlur(const FilterInfo &filterInfo, const ExtraInfo &extraInfo, 321f857971dSopenharmony_ci std::shared_ptr<Rosen::RSCanvasNode> filterNode); 322f857971dSopenharmony_ci void ParserDragShadowInfo(cJSON* filterInfoParser, FilterInfo &filterInfo); 323f857971dSopenharmony_ci void ParserTextDragShadowInfo(cJSON* filterInfoParser, FilterInfo &filterInfo); 324f857971dSopenharmony_ci void PrintDragShadowInfo(); 325f857971dSopenharmony_ci void ProcessFilter(); 326f857971dSopenharmony_ci bool ParserExtraInfo(const std::string &extraInfoStr, ExtraInfo &extraInfo); 327f857971dSopenharmony_ci static float RadiusVp2Sigma(float radiusVp, float dipScale); 328f857971dSopenharmony_ci void DoDrawMouse(int32_t mousePositionX, int32_t mousePositionY); 329f857971dSopenharmony_ci void UpdateMousePosition(float mousePositionX, float mousePositionY); 330f857971dSopenharmony_ci int32_t UpdateDefaultDragStyle(DragCursorStyle style); 331f857971dSopenharmony_ci int32_t UpdateValidDragStyle(DragCursorStyle style); 332f857971dSopenharmony_ci int32_t SetNodesLocation(int32_t positionX, int32_t positionY); 333f857971dSopenharmony_ci int32_t CreateEventRunner(int32_t positionX, int32_t positionY); 334f857971dSopenharmony_ci int32_t ModifyPreviewStyle(std::shared_ptr<Rosen::RSCanvasNode> node, const PreviewStyle &previewStyle); 335f857971dSopenharmony_ci int32_t ModifyMultiPreviewStyle(const std::vector<PreviewStyle> &previewStyles); 336f857971dSopenharmony_ci void MultiSelectedAnimation(int32_t positionX, int32_t positionY, int32_t adjustSize, 337f857971dSopenharmony_ci bool isMultiSelectedAnimation); 338f857971dSopenharmony_ci void DoMultiSelectedAnimation(float positionX, float positionY, float adjustSize, 339f857971dSopenharmony_ci bool isMultiSelectedAnimation = true); 340f857971dSopenharmony_ci void InitMultiSelectedNodes(); 341f857971dSopenharmony_ci void ClearMultiSelectedData(); 342f857971dSopenharmony_ci bool ParserRadius(float &radius); 343f857971dSopenharmony_ci void OnStopAnimationSuccess(); 344f857971dSopenharmony_ci void OnStopAnimationFail(); 345f857971dSopenharmony_ci void OnDragStyleAnimation(); 346f857971dSopenharmony_ci void ChangeStyleAnimation(); 347f857971dSopenharmony_ci void CheckStyleNodeModifier(std::shared_ptr<Rosen::RSCanvasNode> styleNode); 348f857971dSopenharmony_ci void RemoveStyleNodeModifier(std::shared_ptr<Rosen::RSCanvasNode> styleNode); 349f857971dSopenharmony_ci void StartStyleAnimation(float startScale, float endScale, int32_t duration); 350f857971dSopenharmony_ci void UpdateAnimationProtocol(Rosen::RSAnimationTimingProtocol protocol); 351f857971dSopenharmony_ci void RotateDisplayXY(int32_t &displayX, int32_t &displayY); 352f857971dSopenharmony_ci void RotatePixelMapXY(); 353f857971dSopenharmony_ci void ResetAnimationParameter(); 354f857971dSopenharmony_ci void ResetAnimationFlag(bool isForce = false); 355f857971dSopenharmony_ci void DoEndAnimation(); 356f857971dSopenharmony_ci void ResetParameter(); 357f857971dSopenharmony_ci int32_t DoRotateDragWindow(float rotation, 358f857971dSopenharmony_ci const std::shared_ptr<Rosen::RSTransaction>& rsTransaction, bool isAnimated); 359f857971dSopenharmony_ci int32_t DoRotateDragWindowAnimation(float rotation, float pivotX, float pivotY, 360f857971dSopenharmony_ci const std::shared_ptr<Rosen::RSTransaction>& rsTransaction); 361f857971dSopenharmony_ci int32_t RotateDragWindow(Rosen::Rotation rotation, 362f857971dSopenharmony_ci const std::shared_ptr<Rosen::RSTransaction>& rsTransaction = nullptr, bool isAnimated = false); 363f857971dSopenharmony_ci#ifndef OHOS_BUILD_ENABLE_ARKUI_X 364f857971dSopenharmony_ci std::shared_ptr<AppExecFwk::EventHandler> GetSuperHubHandler(); 365f857971dSopenharmony_ci#endif // OHOS_BUILD_ENABLE_ARKUI_X 366f857971dSopenharmony_ci void RotateCanvasNode(float pivotX, float pivotY, float rotation); 367f857971dSopenharmony_ci#ifndef OHOS_BUILD_ENABLE_ARKUI_X 368f857971dSopenharmony_ci void ResetSuperHubHandler(); 369f857971dSopenharmony_ci#endif // OHOS_BUILD_ENABLE_ARKUI_X 370f857971dSopenharmony_ci void FlushDragPosition(uint64_t nanoTimestamp); 371f857971dSopenharmony_ci void RotatePosition(float &displayX, float &displayY); 372f857971dSopenharmony_ci void UpdateDragPosition(int32_t displayId, float displayX, float displayY); 373f857971dSopenharmony_ci float AdjustDoubleValue(double doubleValue); 374f857971dSopenharmony_ci int32_t UpdatePixelMapsAngleAndAlpha(); 375f857971dSopenharmony_ci int32_t UpdatePixeMapDrawingOrder(); 376f857971dSopenharmony_ci void LoadDragDropLib(); 377f857971dSopenharmony_ci template <typename T> 378f857971dSopenharmony_ci void AdjustRotateDisplayXY(T &displayX, T &displayY); 379f857971dSopenharmony_ci void DrawRotateDisplayXY(float positionX, float positionY); 380f857971dSopenharmony_ci void ScreenRotateAdjustDisplayXY( 381f857971dSopenharmony_ci Rosen::Rotation rotation, Rosen::Rotation lastRotation, float &displayX, float &displayY); 382f857971dSopenharmony_ci 383f857971dSopenharmony_ciprivate: 384f857971dSopenharmony_ci int64_t interruptNum_ { -1 }; 385f857971dSopenharmony_ci std::shared_ptr<Rosen::RSCanvasNode> canvasNode_ { nullptr }; 386f857971dSopenharmony_ci std::shared_ptr<DrawSVGModifier> drawSVGModifier_ { nullptr }; 387f857971dSopenharmony_ci std::shared_ptr<DrawPixelMapModifier> drawPixelMapModifier_ { nullptr }; 388f857971dSopenharmony_ci std::shared_ptr<DrawMouseIconModifier> drawMouseIconModifier_ { nullptr }; 389f857971dSopenharmony_ci std::shared_ptr<DrawDynamicEffectModifier> drawDynamicEffectModifier_ { nullptr }; 390f857971dSopenharmony_ci std::shared_ptr<DrawDragStopModifier> drawDragStopModifier_ { nullptr }; 391f857971dSopenharmony_ci std::shared_ptr<DrawStyleChangeModifier> drawStyleChangeModifier_ { nullptr }; 392f857971dSopenharmony_ci std::shared_ptr<DrawStyleScaleModifier> drawStyleScaleModifier_ { nullptr }; 393f857971dSopenharmony_ci std::shared_ptr<Rosen::RSUIDirector> rsUiDirector_ { nullptr }; 394f857971dSopenharmony_ci std::shared_ptr<Rosen::VSyncReceiver> receiver_ { nullptr }; 395f857971dSopenharmony_ci std::shared_ptr<AppExecFwk::EventHandler> handler_ { nullptr }; 396f857971dSopenharmony_ci std::shared_ptr<AppExecFwk::EventHandler> superHubHandler_ { nullptr }; 397f857971dSopenharmony_ci std::atomic_bool hasRunningStopAnimation_ { false }; 398f857971dSopenharmony_ci std::atomic_bool hasRunningScaleAnimation_ { false }; 399f857971dSopenharmony_ci std::atomic_bool needBreakStyleScaleAnimation_ { false }; 400f857971dSopenharmony_ci std::atomic_bool hasRunningAnimation_ { false }; 401f857971dSopenharmony_ci void* dragExtHandler_ { nullptr }; 402f857971dSopenharmony_ci bool needRotatePixelMapXY_ { false }; 403f857971dSopenharmony_ci uint64_t screenId_ { 0 }; 404f857971dSopenharmony_ci Rosen::Rotation rotation_ { Rosen::Rotation::ROTATION_0 }; 405f857971dSopenharmony_ci ScreenSizeType currentScreenSize_ = ScreenSizeType::UNDEFINED; 406f857971dSopenharmony_ci MMI::PointerStyle pointerStyle_; 407f857971dSopenharmony_ci DragVSyncStation vSyncStation_; 408f857971dSopenharmony_ci DragSmoothProcessor dragSmoothProcessor_; 409f857971dSopenharmony_ci std::shared_ptr<DragFrameCallback> frameCallback_ { nullptr }; 410f857971dSopenharmony_ci std::atomic_bool isRunningRotateAnimation_ { false }; 411f857971dSopenharmony_ci DragWindowRotationInfo DragWindowRotateInfo_; 412f857971dSopenharmony_ci int32_t timerId_ { -1 }; 413f857971dSopenharmony_ci#ifdef OHOS_BUILD_ENABLE_ARKUI_X 414f857971dSopenharmony_ci std::shared_ptr<OHOS::Rosen::Window> window_ { nullptr }; 415f857971dSopenharmony_ci std::function<void()> callback_ { nullptr }; 416f857971dSopenharmony_ci std::string svgFilePath_; 417f857971dSopenharmony_ci int64_t actionTime_ { 0 }; 418f857971dSopenharmony_ci#else 419f857971dSopenharmony_ci IContext* context_ { nullptr} ; 420f857971dSopenharmony_ci#endif // OHOS_BUILD_ENABLE_ARKUI_X 421f857971dSopenharmony_ci}; 422f857971dSopenharmony_ci} // namespace DeviceStatus 423f857971dSopenharmony_ci} // namespace Msdp 424f857971dSopenharmony_ci} // namespace OHOS 425f857971dSopenharmony_ci#endif // DRAG_DRAWING_H