1 /* 2 * Copyright (c) 2022 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_MANAGER_DRAG_DROP_DRAG_DROP_MANAGER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_MANAGER_DRAG_DROP_DRAG_DROP_MANAGER_H 18 19 #include <cstdint> 20 #include <string> 21 22 #include "base/memory/ace_type.h" 23 #include "base/utils/noncopyable.h" 24 #include "base/window/drag_window.h" 25 #include "core/common/interaction/interaction_data.h" 26 #include "core/components_ng/base/frame_node.h" 27 #include "core/components_ng/manager/drag_drop/drag_drop_proxy.h" 28 #include "core/gestures/velocity_tracker.h" 29 #include "core/components_ng/manager/drag_drop/utils/internal_drag_action.h" 30 31 namespace OHOS::Ace { 32 class UnifiedData; 33 class GridColumnInfo; 34 } 35 namespace OHOS::Ace::NG { 36 enum class DragDropMgrState : int32_t { 37 IDLE, 38 ABOUT_TO_PREVIEW, 39 DRAGGING 40 }; 41 42 struct GatherAnimationInfo { 43 float scale = 0.0f; 44 float width = 0.0f; 45 float height = 0.0f; 46 OffsetF gatherNodeCenter; 47 std::optional<BorderRadiusProperty> borderRadius; 48 }; 49 50 class ACE_EXPORT DragDropManager : public virtual AceType { 51 DECLARE_ACE_TYPE(DragDropManager, AceType); 52 53 public: 54 DragDropManager() = default; 55 ~DragDropManager() override = default; 56 57 RefPtr<DragDropProxy> CreateAndShowDragWindow(const RefPtr<PixelMap>& pixelMap, const GestureEvent& info); 58 RefPtr<DragDropProxy> CreateAndShowDragWindow(const RefPtr<UINode>& customNode, const GestureEvent& info); 59 RefPtr<DragDropProxy> CreateTextDragDropProxy(); 60 AddDragFrameNode(int32_t id,const WeakPtr<FrameNode> & dragFrameNode)61 void AddDragFrameNode(int32_t id, const WeakPtr<FrameNode>& dragFrameNode) 62 { 63 dragFrameNodes_.try_emplace(id, dragFrameNode); 64 } 65 66 void RemoveDragFrameNode(int32_t id); 67 AddGridDragFrameNode(int32_t id,const WeakPtr<FrameNode> & dragFrameNode)68 void AddGridDragFrameNode(int32_t id, const WeakPtr<FrameNode>& dragFrameNode) 69 { 70 gridDragFrameNodes_.try_emplace(id, dragFrameNode); 71 } 72 AddListDragFrameNode(int32_t id,const WeakPtr<FrameNode> & dragFrameNode)73 void AddListDragFrameNode(int32_t id, const WeakPtr<FrameNode>& dragFrameNode) 74 { 75 listDragFrameNodes_.try_emplace(id, dragFrameNode); 76 } 77 AddTextFieldDragFrameNode(int32_t id,const WeakPtr<FrameNode> & dragFrameNode)78 void AddTextFieldDragFrameNode(int32_t id, const WeakPtr<FrameNode>& dragFrameNode) 79 { 80 textFieldDragFrameNodes_.try_emplace(id, dragFrameNode); 81 } 82 SetEventStrictReportingEnabled(bool dragEventStrictReportingEnabled)83 void SetEventStrictReportingEnabled(bool dragEventStrictReportingEnabled) 84 { 85 eventStrictReportingEnabled_ = dragEventStrictReportingEnabled; 86 } 87 IsEventStrictReportingEnabled()88 bool IsEventStrictReportingEnabled() 89 { 90 return eventStrictReportingEnabled_; 91 } 92 93 void UpdateDragWindowPosition(int32_t globalX, int32_t globalY); 94 void OnDragStart(const Point& point); 95 void OnDragStart(const Point& point, const RefPtr<FrameNode>& frameNode); 96 void OnDragMove(const PointerEvent& pointerEvent, const std::string& extraInfo, 97 const RefPtr<FrameNode>& node = nullptr); 98 void OnDragEnd(const PointerEvent& pointerEvent, const std::string& extraInfo, 99 const RefPtr<FrameNode>& node = nullptr); 100 void HandleOnDragMove(const PointerEvent& pointerEvent, const std::string& extraInfo, 101 const RefPtr<FrameNode>& dragFrameNode); 102 void HandleOnDragEnd(const PointerEvent& pointerEvent, const std::string& extraInfo, 103 const RefPtr<FrameNode>& dragFrameNode); 104 void DoDragReset(); 105 void DoDropAction(const RefPtr<FrameNode>& dragFrameNode, const PointerEvent& pointerEvent, 106 const RefPtr<UnifiedData>& unifiedData, const std::string& udKey); 107 void RequestDragSummaryInfoAndPrivilege(); 108 RefPtr<UnifiedData> RequestUDMFDataWithUDKey(const std::string& udKey); 109 void TryGetDataBackGround( 110 const RefPtr<FrameNode>& dragFrameNode, const PointerEvent& pointerEvent, 111 const std::string& udKey, int32_t count = 0); 112 void OnDragDrop(RefPtr<OHOS::Ace::DragEvent>& event, const RefPtr<FrameNode>& dragFrameNode, 113 const OHOS::Ace::PointerEvent& pointerEvent); 114 void ResetDragDropStatus(const Point& point, const DragDropRet& dragDropRet, int32_t windowId); 115 bool CheckRemoteData( 116 const RefPtr<FrameNode>& dragFrameNode, const PointerEvent& pointerEvent, const std::string& udKey); 117 void OnDragMoveOut(const PointerEvent& pointerEvent); 118 void OnTextDragEnd(float globalX, float globalY, const std::string& extraInfo); 119 void onDragCancel(); 120 void OnItemDragStart(float globalX, float globalY, const RefPtr<FrameNode>& frameNode); 121 void OnItemDragMove(float globalX, float globalY, int32_t draggedIndex, DragType dragType); 122 void OnItemDragEnd(float globalX, float globalY, int32_t draggedIndex, DragType dragType); 123 void onItemDragCancel(); 124 void AddDataToClipboard(const std::string& extraInfo); 125 void GetExtraInfoFromClipboard(std::string& extraInfo); 126 void RestoreClipboardData(); 127 void DestroyDragWindow(); 128 void CancelItemDrag(); 129 std::string GetExtraInfo(); 130 void SetExtraInfo(const std::string& extraInfo); 131 void ClearExtraInfo(); 132 float GetWindowScale() const; 133 void UpdateDragStyle( 134 const DragCursorStyleCore& dragCursorStyleCore = DragCursorStyleCore::DEFAULT, const int32_t eventId = -1); 135 void UpdateDragAllowDrop(const RefPtr<FrameNode>& dragFrameNode, const DragBehavior dragBehavior, 136 const int32_t eventId = -1, bool isCapi = false); 137 bool CheckExtraSituation(const RefPtr<FrameNode>& dragFrameNode) const; 138 bool CheckInRichEditor(const RefPtr<FrameNode>& dragFrameNode) const; 139 void RequireSummary(); 140 void ClearSummary(); SetSummaryMap(const std::map<std::string,int64_t> & summaryMap)141 void SetSummaryMap(const std::map<std::string, int64_t>& summaryMap) 142 { 143 summaryMap_ = summaryMap; 144 } 145 void ResetRecordSize(uint32_t recordSize = 0); 146 uint32_t GetRecordSize() const; 147 Rect GetDragWindowRect(const Point& point); 148 RefPtr<DragDropProxy> CreateFrameworkDragDropProxy(); 149 void HideDragPreviewOverlay(); 150 void HideDragPreviewWindow(int32_t containerId); 151 bool IsMSDPDragging() const; 152 void UpdateDragEvent(RefPtr<OHOS::Ace::DragEvent>& event, const OHOS::Ace::PointerEvent& pointerEvent); 153 void UpdateNotifyDragEvent( 154 RefPtr<NotifyDragEvent>& notifyEvent, const Point& point, const DragEventType dragEventType); 155 bool CheckDragDropProxy(int64_t id) const; 156 void NotifyEnterTextEditorArea(); 157 void FireOnEditableTextComponent(const RefPtr<FrameNode>& frameNode, DragEventType type); 158 void FireOnDragLeave(const RefPtr<FrameNode>& preTargetFrameNode_, const PointerEvent& pointerEvent, 159 const std::string& extraInfo); 160 IsWindowConsumed()161 bool IsWindowConsumed() const 162 { 163 return isWindowConsumed_; 164 } 165 SetIsWindowConsumed(bool consumed)166 void SetIsWindowConsumed(bool consumed) 167 { 168 isWindowConsumed_ = consumed; 169 } 170 IsDragged()171 bool IsDragged() const 172 { 173 return isDragged_; 174 } 175 176 void SetIsDragged(bool isDragged); 177 SetDragDampStartPoint(const Point & point)178 void SetDragDampStartPoint(const Point& point) 179 { 180 dragDampStartPoint_ = point; 181 } 182 GetDragDampStartPoint()183 const Point& GetDragDampStartPoint() const 184 { 185 return dragDampStartPoint_; 186 } 187 SetIsDragCancel(bool isDragCancel)188 void SetIsDragCancel(bool isDragCancel) 189 { 190 isDragCancel_ = isDragCancel; 191 } 192 SetIsMouseDrag(bool isMouseDragged)193 void SetIsMouseDrag(bool isMouseDragged) 194 { 195 isMouseDragged_ = isMouseDragged; 196 } 197 SetIsDragWindowShow(bool isDragWindowShow)198 void SetIsDragWindowShow(bool isDragWindowShow) 199 { 200 isDragWindowShow_ = isDragWindowShow; 201 } 202 IsDragWindowShow()203 bool IsDragWindowShow() const 204 { 205 return isDragWindowShow_; 206 } 207 SetPreviewRect(const Rect & rect)208 void SetPreviewRect(const Rect& rect) 209 { 210 previewRect_ = rect; 211 } 212 GetPreviewRect()213 Rect GetPreviewRect() const 214 { 215 return previewRect_; 216 } 217 SetDragCursorStyleCore(DragCursorStyleCore dragCursorStyleCore)218 void SetDragCursorStyleCore(DragCursorStyleCore dragCursorStyleCore) 219 { 220 dragCursorStyleCore_ = dragCursorStyleCore; 221 } 222 GetDragAction()223 std::shared_ptr<OHOS::Ace::NG::ArkUIInteralDragAction> GetDragAction() 224 { 225 return dragAction_; 226 } 227 228 RefPtr<FrameNode> FindTargetInChildNodes(const RefPtr<UINode> parentNode, 229 std::vector<RefPtr<FrameNode>> hitFrameNodes, bool findDrop); 230 231 bool CheckFrameNodeCanDrop(const RefPtr<FrameNode>& node); 232 233 RefPtr<FrameNode> FindTargetDropNode(const RefPtr<UINode> parentNode, PointF localPoint); 234 235 std::unordered_set<int32_t> FindHitFrameNodes(const Point& point); 236 237 void UpdateDragListener(const Point& point); 238 239 void NotifyDragRegisterFrameNode(std::unordered_map<int32_t, WeakPtr<FrameNode>> nodes, DragEventType dragEventType, 240 RefPtr<NotifyDragEvent>& notifyEvent); 241 242 void RegisterDragStatusListener(int32_t nodeId, const WeakPtr<FrameNode>& node); 243 UnRegisterDragStatusListener(int32_t nodeId)244 void UnRegisterDragStatusListener(int32_t nodeId) 245 { 246 nodesForDragNotify_.erase(nodeId); 247 } 248 SetNotifyInDraggedCallback(const std::function<void (void)> & callback)249 void SetNotifyInDraggedCallback(const std::function<void(void)>& callback) 250 { 251 notifyInDraggedCallback_ = callback; 252 } 253 IsDragging()254 bool IsDragging() const 255 { 256 return dragDropState_ == DragDropMgrState::DRAGGING; 257 } 258 IsItemDragging()259 bool IsItemDragging() const 260 { 261 return dragDropState_ == DragDropMgrState::DRAGGING && draggedGridFrameNode_ != nullptr; 262 } 263 IsAboutToPreview()264 bool IsAboutToPreview() const 265 { 266 return dragDropState_ == DragDropMgrState::ABOUT_TO_PREVIEW; 267 } 268 269 void ResetDragging(DragDropMgrState dragDropMgrState = DragDropMgrState::IDLE) 270 { 271 dragDropState_ = dragDropMgrState; 272 } 273 274 void ResetPreTargetFrameNode(int32_t instanceId); 275 SetDraggingPressedState(bool pointerPressed)276 void SetDraggingPressedState(bool pointerPressed) 277 { 278 draggingPressedState_ = pointerPressed; 279 } 280 281 bool IsDraggingPressed(int32_t currentPointerId) const; 282 IsSameDraggingPointer(int32_t currentPointerId)283 bool IsSameDraggingPointer(int32_t currentPointerId) const 284 { 285 return currentPointerId_ == currentPointerId; 286 } 287 SetDraggingPointer(int32_t currentPointerId)288 void SetDraggingPointer(int32_t currentPointerId) 289 { 290 currentPointerId_ = currentPointerId; 291 } 292 IsEditableTextComponent(const std::string & frameTag)293 static inline bool IsEditableTextComponent(const std::string& frameTag) 294 { 295 if (frameTag != V2::TEXTINPUT_ETS_TAG && frameTag != V2::TEXTAREA_ETS_TAG && 296 frameTag != V2::RICH_EDITOR_ETS_TAG && frameTag != V2::SEARCH_Field_ETS_TAG) { 297 return false; 298 } 299 return true; 300 } 301 302 typedef struct DragPreviewInfo { 303 double width { 0.0 }; 304 double height { 0.0 }; 305 double maxWidth { 0.0 }; 306 double scale { -1.0 }; 307 VectorF originScale { 1.0f, 1.0f }; 308 OffsetF originOffset; 309 RefPtr<FrameNode> imageNode { nullptr }; 310 RefPtr<FrameNode> textNode { nullptr }; 311 } DragPreviewInfo; 312 bool IsNeedScaleDragPreview(); 313 void DoDragMoveAnimate(const PointerEvent& pointerEvent); 314 void DragMoveAnimation(const Offset& newOffset, const RefPtr<OverlayManager>& overlayManager, Point point); 315 void DoDragStartAnimation(const RefPtr<OverlayManager>& overlayManager, 316 const GestureEvent& event, const RefPtr<GestureEventHub>& gestureHub, bool isSubwindowOverlay = false); 317 void DragStartAnimation(const Offset& newOffset, const RefPtr<OverlayManager>& overlayManager, 318 const OffsetF& gatherNodeCenter, Point point = { 1, 1 }); 319 void SetDragResult(const DragNotifyMsgCore& notifyMessage, const RefPtr<OHOS::Ace::DragEvent>& dragEvent); 320 void SetDragBehavior(const DragNotifyMsgCore& notifyMessage, const RefPtr<OHOS::Ace::DragEvent>& dragEvent); ResetDragPreviewInfo()321 void ResetDragPreviewInfo() 322 { 323 info_ = DragPreviewInfo(); 324 } 325 326 void ResetPullMoveReceivedForCurrentDrag(bool isPullMoveReceivedForCurrentDrag = false) 327 { 328 isPullMoveReceivedForCurrentDrag_ = isPullMoveReceivedForCurrentDrag; 329 } 330 IsPullMoveReceivedForCurrentDrag()331 bool IsPullMoveReceivedForCurrentDrag() const 332 { 333 return isPullMoveReceivedForCurrentDrag_; 334 } 335 SetPrepareDragFrameNode(const WeakPtr<FrameNode> & prepareDragFrameNode)336 void SetPrepareDragFrameNode(const WeakPtr<FrameNode>& prepareDragFrameNode) 337 { 338 prepareDragFrameNode_ = prepareDragFrameNode; 339 } 340 GetPrepareDragFrameNode()341 const WeakPtr<FrameNode> GetPrepareDragFrameNode() const 342 { 343 return prepareDragFrameNode_; 344 } 345 SetPreDragStatus(PreDragStatus preDragStatus)346 void SetPreDragStatus(PreDragStatus preDragStatus) 347 { 348 preDragStatus_ = preDragStatus; 349 } 350 GetPreDragStatus()351 PreDragStatus GetPreDragStatus() const 352 { 353 return preDragStatus_; 354 } 355 356 static RectF GetMenuPreviewRect(); 357 static void UpdateGatherNodeAttr(const RefPtr<OverlayManager>& overlayManager, const GatherAnimationInfo& info); 358 static void UpdateGatherNodePosition(const RefPtr<OverlayManager>& overlayManager, 359 const RefPtr<FrameNode>& imageNode); 360 static void UpdateTextNodePosition(const RefPtr<FrameNode>& textNode, const Offset& localPoint); 361 double CalcGatherNodeMaxDistanceWithPoint(const RefPtr<OverlayManager>& overlayManager, int32_t x, int32_t y); 362 SetPixelMapOffset(OffsetF pixelMapOffset)363 void SetPixelMapOffset(OffsetF pixelMapOffset) 364 { 365 pixelMapOffset_ = pixelMapOffset; 366 } 367 368 bool IsNeedDisplayInSubwindow(); ClearGatherPixelMap()369 void ClearGatherPixelMap() 370 { 371 gatherPixelMaps_.clear(); 372 } 373 374 void PushGatherPixelMap(const RefPtr<PixelMap>& pixelMap); 375 void GetGatherPixelMap(DragDataCore& dragData, float scale, float previewWidth = 0.0f, float previewHeight = 0.0f); HasGatherNode()376 bool HasGatherNode() const 377 { 378 return hasGatherNode_; 379 } 380 SetHasGatherNode(bool hasGatherNode)381 void SetHasGatherNode(bool hasGatherNode) 382 { 383 hasGatherNode_ = hasGatherNode; 384 } 385 GetDragDropPointerEvent()386 const PointerEvent& GetDragDropPointerEvent() const 387 { 388 return dragDropPointerEvent_; 389 } 390 SetDragDropPointerEvent(const PointerEvent & dragDropPointerEvent)391 void SetDragDropPointerEvent(const PointerEvent& dragDropPointerEvent) 392 { 393 dragDropPointerEvent_ = dragDropPointerEvent; 394 } 395 SetIsShowBadgeAnimation(bool isShowBadgeAnimation)396 void SetIsShowBadgeAnimation(bool isShowBadgeAnimation) 397 { 398 isShowBadgeAnimation_ = isShowBadgeAnimation; 399 } 400 IsShowBadgeAnimation()401 bool IsShowBadgeAnimation() 402 { 403 return isShowBadgeAnimation_; 404 } 405 IsDragWithContextMenu()406 bool IsDragWithContextMenu() const 407 { 408 return isDragWithContextMenu_; 409 } 410 SetIsDragWithContextMenu(bool isDragWithContextMenu)411 void SetIsDragWithContextMenu(bool isDragWithContextMenu) 412 { 413 isDragWithContextMenu_ = isDragWithContextMenu; 414 } 415 416 void SetIsDragNodeNeedClean(bool isDragNodeNeedClean = false) 417 { 418 isDragNodeNeedClean_ = isDragNodeNeedClean; 419 } 420 IsDragNodeNeedClean()421 bool IsDragNodeNeedClean() const 422 { 423 return isDragNodeNeedClean_; 424 } 425 426 void UpdateDragMovePosition(const NG::OffsetF& offset, bool isRedragStart = false); 427 428 void ResetContextMenuDragPosition(); 429 430 void ResetContextMenuRedragPosition(); 431 GetUpdateDragMovePosition()432 OffsetF GetUpdateDragMovePosition() const 433 { 434 return dragTotalMovePosition_; 435 } 436 437 bool IsDropAllowed(const RefPtr<FrameNode>& dragFrameNode); 438 SetDragAction(const std::shared_ptr<OHOS::Ace::NG::ArkUIInteralDragAction> & dragAction)439 void SetDragAction(const std::shared_ptr<OHOS::Ace::NG::ArkUIInteralDragAction>& dragAction) 440 { 441 dragAction_ = dragAction; 442 } 443 444 void AddNewDragAnimation(); 445 446 bool IsAllAnimationFinished(); 447 448 float GetCurrentDistance(float x, float y); 449 450 static double GetMaxWidthBaseOnGridSystem(const RefPtr<PipelineBase>& pipeline); 451 GetDampingOverflowCount()452 uint32_t GetDampingOverflowCount() const 453 { 454 return dampingOverflowCount_ ; 455 } 456 SetDampingOverflowCount()457 void SetDampingOverflowCount() 458 { 459 dampingOverflowCount_++; 460 } 461 GetMenuWrapperNode()462 RefPtr<FrameNode> GetMenuWrapperNode() 463 { 464 return menuWrapperNode_.Upgrade(); 465 } 466 SetMenuWrapperNode(const RefPtr<FrameNode> & frameNode)467 void SetMenuWrapperNode(const RefPtr<FrameNode>& frameNode) 468 { 469 menuWrapperNode_ = frameNode; 470 } 471 472 bool CheckIsNewDrag(const PointerEvent& pointerEvent) const; 473 474 void RequireSummaryIfNecessary(const PointerEvent& pointerEvent); 475 ResetPullId()476 inline void ResetPullId() 477 { 478 summaryMap_.clear(); 479 parentHitNodes_.clear(); 480 currentPullId_ = -1; 481 } 482 483 void ResetDraggingStatus(const TouchEvent& touchPoint); 484 485 private: 486 double CalcDragPreviewDistanceWithPoint( 487 const OHOS::Ace::Dimension& preserverHeight, int32_t x, int32_t y, const DragPreviewInfo& info); 488 Offset CalcDragMoveOffset( 489 const OHOS::Ace::Dimension& preserverHeight, int32_t x, int32_t y, const DragPreviewInfo& info); 490 bool UpdateDragMovePositionFinished( 491 bool needDoDragMoveAnimate, bool isMenuShow, const Offset& newOffset, int32_t containerId); 492 void UpdateDragPreviewScale(); 493 bool GetDragPreviewInfo(const OHOS::Ace::RefPtr<OHOS::Ace::NG::OverlayManager>& overlayManager, 494 DragPreviewInfo& dragPreviewInfo, const RefPtr<GestureEventHub>& gestureHub); 495 bool IsNeedDoDragMoveAnimate(const PointerEvent& pointerEvent); 496 const RefPtr<NG::OverlayManager> GetDragAnimationOverlayManager(int32_t containerId); 497 RefPtr<FrameNode> FindDragFrameNodeByPosition(float globalX, float globalY, 498 const RefPtr<FrameNode>& node = nullptr); 499 void FireOnDragEvent( 500 const RefPtr<FrameNode>& frameNode, const PointerEvent& pointerEvent, 501 DragEventType type, const std::string& extraInfo); 502 void FireOnItemDragEvent(const RefPtr<FrameNode>& frameNode, DragType dragType, 503 const ItemDragInfo& itemDragInfo, DragEventType type, int32_t draggedIndex, int32_t insertIndex = 0); 504 bool FireOnItemDropEvent(const RefPtr<FrameNode>& frameNode, DragType dragType, 505 const ItemDragInfo& itemDragInfo, int32_t draggedIndex, int32_t insertIndex, bool isSuccess); 506 int32_t GetItemIndex(const RefPtr<FrameNode>& frameNode, DragType dragType, float globalX, float globalY); 507 void CreateDragWindow(const GestureEvent& info, uint32_t width, uint32_t height); 508 RefPtr<FrameNode> CreateDragRootNode(const RefPtr<UINode>& customNode); 509 void ClearVelocityInfo(); 510 void UpdateVelocityTrackerPoint(const Point& point, bool isEnd = false); 511 void PrintDragFrameNode(const OHOS::Ace::PointerEvent& pointerEvent, const RefPtr<FrameNode>& dragFrameNode); 512 void PrintGridDragFrameNode(const float globalX, const float globalY, const RefPtr<FrameNode>& dragFrameNode); 513 void FireOnDragEventWithDragType(const RefPtr<EventHub>& eventHub, DragEventType type, 514 RefPtr<OHOS::Ace::DragEvent>& event, const std::string& extraParams); 515 void NotifyDragFrameNode( 516 const Point& point, const DragEventType& dragEventType, const DragRet& dragRet = DragRet::DRAG_DEFAULT); 517 void TransDragWindowToDragFwk(int32_t windowContainerId); 518 void ResetDragDrop(int32_t windowId, const Point& point); 519 bool isDistanceLimited(const Point& point); 520 bool isTimeLimited(const PointerEvent& pointerEvent, const Point& point); 521 bool ReachMoveLimit(const PointerEvent& pointerEvent, const Point& point); 522 bool IsUIExtensionShowPlaceholder(const RefPtr<NG::UINode>& node); 523 bool IsUIExtensionComponent(const RefPtr<NG::UINode>& node); 524 int32_t GetWindowId(); 525 526 std::map<int32_t, WeakPtr<FrameNode>> dragFrameNodes_; 527 std::map<int32_t, WeakPtr<FrameNode>> gridDragFrameNodes_; 528 std::map<int32_t, WeakPtr<FrameNode>> listDragFrameNodes_; 529 std::map<int32_t, WeakPtr<FrameNode>> textFieldDragFrameNodes_; 530 RefPtr<DragWindow> dragWindow_; 531 RefPtr<FrameNode> draggedFrameNode_; 532 RefPtr<FrameNode> preTargetFrameNode_; 533 RefPtr<FrameNode> draggedGridFrameNode_; 534 RefPtr<FrameNode> preGridTargetFrameNode_; 535 RefPtr<FrameNode> dragWindowRootNode_; 536 RefPtr<Clipboard> clipboard_; 537 Point preMovePoint_ = Point(0, 0); 538 uint64_t preTimeStamp_ = 0L; 539 WeakPtr<FrameNode> prepareDragFrameNode_; 540 std::function<void(const std::string&)> addDataCallback_ = nullptr; 541 std::function<void(const std::string&)> getDataCallback_ = nullptr; 542 std::function<void(const std::string&)> deleteDataCallback_ = nullptr; 543 std::string extraInfo_; 544 std::unique_ptr<JsonValue> newData_ = nullptr; 545 bool isDragCancel_ = false; 546 std::unordered_map<int32_t, WeakPtr<FrameNode>> nodesForDragNotify_; 547 std::unordered_set<int32_t> parentHitNodes_; 548 DragCursorStyleCore dragCursorStyleCore_ = DragCursorStyleCore::DEFAULT; 549 std::map<std::string, int64_t> summaryMap_; 550 uint32_t recordSize_ = 0; 551 int64_t currentId_ = -1; 552 int32_t currentPointerId_ = -1; 553 int32_t currentPullId_ = -1; 554 bool draggingPressedState_ = false; 555 556 std::function<void(void)> notifyInDraggedCallback_ = nullptr; 557 bool isDragged_ = false; 558 bool isMouseDragged_ = false; 559 bool isWindowConsumed_ = false; 560 bool isDragWindowShow_ = false; 561 bool hasNotifiedTransformation_ = false; 562 bool isPullMoveReceivedForCurrentDrag_ = false; 563 bool isDragWindowSubWindow_ = false; 564 bool isDragNodeNeedClean_ = false; 565 VelocityTracker velocityTracker_; 566 PreDragStatus preDragStatus_ = PreDragStatus::ACTION_DETECTING_STATUS; 567 Rect previewRect_ { -1, -1, -1, -1 }; 568 DragDropMgrState dragDropState_ = DragDropMgrState::IDLE; 569 DragPreviewInfo info_; 570 PointerEvent dragDropPointerEvent_; 571 bool isDragFwkShow_ = true; 572 OffsetF pixelMapOffset_; 573 OffsetF curPointerOffset_; 574 std::vector<RefPtr<PixelMap>> gatherPixelMaps_; 575 bool hasGatherNode_ = false; 576 bool isShowBadgeAnimation_ = true; 577 bool eventStrictReportingEnabled_ = false; 578 int32_t badgeNumber_ = -1; 579 int32_t currentAnimationCnt_ = 0; 580 int32_t allAnimationCnt_ = 0; 581 bool isDragWithContextMenu_ = false; 582 Point dragDampStartPoint_ { 1, 1 }; 583 OffsetF dragMovePosition_ = OffsetF(0.0f, 0.0f); 584 OffsetF lastDragMovePosition_ = OffsetF(0.0f, 0.0f); 585 OffsetF dragTotalMovePosition_ = OffsetF(0.0f, 0.0f); 586 RefPtr<GridColumnInfo> columnInfo_; 587 uint32_t dampingOverflowCount_ = 0; 588 WeakPtr<FrameNode> menuWrapperNode_; 589 std::shared_ptr<OHOS::Ace::NG::ArkUIInteralDragAction> dragAction_; 590 591 ACE_DISALLOW_COPY_AND_MOVE(DragDropManager); 592 }; 593 } // namespace OHOS::Ace::NG 594 595 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_MANAGER_DRAG_DROP_DRAG_DROP_MANAGER_H 596