From 55afcd5bf9598902f8ff233284980bd67cfb6c23 Mon Sep 17 00:00:00 2001 From: doujian Date: Tue, 10 Oct 2023 14:29:52 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=BB=84=E4=BB=B6=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E4=B8=8E=E5=BA=94=E7=94=A8=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E5=88=86=E7=A6=BB=20Signed-off-by:doujian=20?= =?UTF-8?q??= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: doujian --- .../core/components_ng/base/view_abstract.cpp | 10 +- .../core/components_ng/event/event_hub.cpp | 101 ++++++++++++++++++ .../core/components_ng/event/event_hub.h | 35 ++++++ .../components_ng/event/gesture_event_hub.cpp | 6 +- .../manager/drag_drop/drag_drop_manager.cpp | 52 +++++---- .../manager/drag_drop/drag_drop_manager.h | 2 + frameworks/core/gestures/gesture_info.h | 3 +- 7 files changed, 182 insertions(+), 27 deletions(-) diff --git a/frameworks/core/components_ng/base/view_abstract.cpp b/frameworks/core/components_ng/base/view_abstract.cpp index 4aa28241a56..963e07b9fe4 100644 --- a/frameworks/core/components_ng/base/view_abstract.cpp +++ b/frameworks/core/components_ng/base/view_abstract.cpp @@ -884,7 +884,7 @@ void ViewAbstract::SetOnDragEnter( { auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnDragEnter(std::move(onDragEnter)); + eventHub->SetOnCustomDragEnter(std::move(onDragEnter)); AddDragFrameNodeToManager(); } @@ -894,7 +894,7 @@ void ViewAbstract::SetOnDragLeave( { auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnDragLeave(std::move(onDragLeave)); + eventHub->SetOnCustomDragLeave(std::move(onDragLeave)); AddDragFrameNodeToManager(); } @@ -904,7 +904,7 @@ void ViewAbstract::SetOnDragMove( { auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnDragMove(std::move(onDragMove)); + eventHub->SetOnCustomDragMove(std::move(onDragMove)); AddDragFrameNodeToManager(); } @@ -913,7 +913,7 @@ void ViewAbstract::SetOnDrop(std::functionGetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnDrop(std::move(onDrop)); + eventHub->SetOnCustomDrop(std::move(onDrop)); AddDragFrameNodeToManager(); } @@ -922,7 +922,7 @@ void ViewAbstract::SetOnDragEnd(std::functionGetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnDragEnd(std::move(onDragEnd)); + eventHub->SetOnCustomDragEnd(std::move(onDragEnd)); AddDragFrameNodeToManager(); } diff --git a/frameworks/core/components_ng/event/event_hub.cpp b/frameworks/core/components_ng/event/event_hub.cpp index a753b40df18..e1e7e0a2f49 100644 --- a/frameworks/core/components_ng/event/event_hub.cpp +++ b/frameworks/core/components_ng/event/event_hub.cpp @@ -104,4 +104,105 @@ void EventHub::MarkModifyDone() OnModifyDone(); } +void EventHub::SetOnCustomDragEnter(OnDragFunc&& onCustomDragEnter) +{ + onCustomDragEnter_ = std::move(onCustomDragEnter); +} + +void EventHub::FireOnCustomDragEnter(const RefPtr& info, const std::string& extraParams) +{ + if (SystemProperties::GetDebugEnabled()) { + LOGI("DragDropManager fire onCustomDragEnter"); + } + if (onCustomDragEnter_ != nullptr) { + auto onCustomDragEnter = onCustomDragEnter_; + onCustomDragEnter(info, extraParams); + } +} + +void EventHub::SetOnCustomDragLeave(OnDragFunc&& onCustomDragLeave) +{ + onCustomDragLeave_ = std::move(onCustomDragLeave); +} + +void EventHub::FireOnCustomDragLeave(const RefPtr& info, const std::string& extraParams) +{ + if (SystemProperties::GetDebugEnabled()) { + LOGI("DragDropManager fire onCustomDragLeave"); + } + if (onCustomDragLeave_ != nullptr) { + auto onCustomDragLeave = onCustomDragLeave_; + onCustomDragLeave(info, extraParams); + } +} + +void EventHub::SetOnCustomDragMove(OnDragFunc&& onCustomDragMove) +{ + onCustomDragMove_ = std::move(onCustomDragMove); +} + +void EventHub::FireOnCustomDragMove(const RefPtr& info, const std::string& extraParams) +{ + if (SystemProperties::GetDebugEnabled()) { + LOGI("DragDropManager fire onCustomDragMove"); + } + if (onCustomDragMove_ != nullptr) { + auto onCustomDragMove = onCustomDragMove_; + onCustomDragMove(info, extraParams); + } +} + +void EventHub::SetOnCustomDrop(OnDragFunc&& onCustomDrop) +{ + onCustomDrop_ = std::move(onCustomDrop); +} + +void EventHub::FireOnCustomDrop(const RefPtr& info, const std::string& extraParams) +{ + if (SystemProperties::GetDebugEnabled()) { + LOGI("DragDropManager fire onCustomDrop"); + } + if (onCustomDrop_ != nullptr) { + auto onCustomDrop = onCustomDrop_; + onCustomDrop(info, extraParams); + } +} + +void EventHub::SetOnCustomDragEnd(OnNewDragFunc&& onCustomDragEnd) +{ + onCustomDragEnd_ = std::move(onCustomDragEnd); +} + +void EventHub::FireOnCustomDragEnd(const RefPtr& info) +{ + if (SystemProperties::GetDebugEnabled()) { + LOGI("DragDropManager fire onCustomDragEnd"); + } + if (onCustomDragEnd_ != nullptr) { + auto onCustomDragEnd = onCustomDragEnd_; + onCustomDragEnd(info); + } +} + +bool EventHub::IsFireOnDrop(const RefPtr& info) +{ +#ifdef ENABLE_DRAG_FRAMEWORK + if (SystemProperties::GetDebugEnabled()) { + LOGI("DragDropManager fire IsFireOnDrop, drag ret: %d", info->GetResult()); + } + return !HasOnCustomDrop() + || info->GetResult() == DragRet::DRAG_DEFAULT + || info->GetResult() == DragRet::ENABLE_DROP + || info->GetResult() == DragRet::DISABLE_DROP; +#endif + return true; +} + +void EventHub::HandleFireOnDrop(const RefPtr& info, const std::string& extraParams) +{ + if (IsFireOnDrop(info)) { + FireOnDrop(info, extraParams); + } +} + } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/event/event_hub.h b/frameworks/core/components_ng/event/event_hub.h index 30c76649ead..2035c37f535 100644 --- a/frameworks/core/components_ng/event/event_hub.h +++ b/frameworks/core/components_ng/event/event_hub.h @@ -309,6 +309,11 @@ public: return static_cast(onDrop_); } + bool HasOnCustomDrop() const + { + return static_cast(onCustomDrop_); + } + virtual std::string GetDragExtraParams(const std::string& extraInfo, const Point& point, DragEventType isStart) { auto json = JsonUtil::Create(true); @@ -410,6 +415,30 @@ public: return keyboardShortcut_; } + void SetOnCustomDragEnter(OnDragFunc&& onCustomDragEnter); + + void FireOnCustomDragEnter(const RefPtr& info, const std::string& extraParams); + + void SetOnCustomDragLeave(OnDragFunc&& onCustomDragLeave); + + void FireOnCustomDragLeave(const RefPtr& info, const std::string& extraParams); + + void SetOnCustomDragMove(OnDragFunc&& onCustomDragMove); + + void FireOnCustomDragMove(const RefPtr& info, const std::string& extraParams); + + void SetOnCustomDrop(OnDragFunc&& onCustomDrop); + + void FireOnCustomDrop(const RefPtr& info, const std::string& extraParams); + + void SetOnCustomDragEnd(OnNewDragFunc&& onCustomDragEnd); + + void FireOnCustomDragEnd(const RefPtr& info); + + bool IsFireOnDrop(const RefPtr& info); + + void HandleFireOnDrop(const RefPtr& info, const std::string& extraParams); + protected: virtual void OnModifyDone() {} @@ -431,6 +460,12 @@ private: OnDragFunc onDrop_; OnNewDragFunc onDragEnd_; + OnDragFunc onCustomDragEnter_; + OnDragFunc onCustomDragLeave_; + OnDragFunc onCustomDragMove_; + OnDragFunc onCustomDrop_; + OnNewDragFunc onCustomDragEnd_; + bool enabled_ { true }; bool developerEnabled_ { true }; std::vector keyboardShortcut_; diff --git a/frameworks/core/components_ng/event/gesture_event_hub.cpp b/frameworks/core/components_ng/event/gesture_event_hub.cpp index 98ad482b27c..8c09c55cc01 100644 --- a/frameworks/core/components_ng/event/gesture_event_hub.cpp +++ b/frameworks/core/components_ng/event/gesture_event_hub.cpp @@ -874,7 +874,7 @@ void GestureEventHub::HandleOnDragEnd(const GestureEvent& info) // Only the onDrop callback of dragged frame node is triggered. // The onDrop callback of target frame node is triggered in PipelineContext::OnDragEvent. - if (eventHub->HasOnDrop()) { + if (eventHub->HasOnDrop() || eventHub->HasOnCustomDrop()) { RefPtr event = AceType::MakeRefPtr(); if (frameNode->GetTag() == V2::WEB_ETS_TAG) { LOGI("web on drag end"); @@ -886,7 +886,8 @@ void GestureEventHub::HandleOnDragEnd(const GestureEvent& info) } event->SetScreenX(info.GetScreenLocation().GetX()); event->SetScreenY(info.GetScreenLocation().GetY()); - eventHub->FireOnDrop(event, ""); + eventHub->FireOnCustomDrop(event, ""); + eventHub->HandleFireOnDrop(event, ""); } } @@ -1129,6 +1130,7 @@ OnDragCallback GestureEventHub::GetDragCallback(const RefPtr& cont if (eventManager) { eventManager->DoMouseActionRelease(); } + eventHub->FireOnCustomDragEnd(dragEvent); if (eventHub->HasOnDragEnd()) { (eventHub->GetOnDragEnd())(dragEvent); } diff --git a/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp b/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp index ce30a3583bb..1ac885ef78f 100644 --- a/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp +++ b/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp @@ -211,8 +211,7 @@ RefPtr DragDropManager::FindTargetInChildNodes( if (!eventHub) { continue; } - if ((findDrop && (eventHub->HasOnDrop() || eventHub->HasOnItemDrop())) - || (!findDrop && (eventHub->HasOnDrop() || eventHub->HasOnItemDrop()))) { + if (eventHub->HasOnDrop() || eventHub->HasOnItemDrop() || eventHub->HasOnCustomDrop()) { return parentFrameNode; } if (SystemProperties::GetDebugEnabled()) { @@ -461,7 +460,8 @@ void DragDropManager::OnDragEnd(const Point& point, const std::string& extraInfo RefPtr event = AceType::MakeRefPtr(); auto extraParams = eventHub->GetDragExtraParams(extraInfo_, point, DragEventType::DROP); UpdateDragEvent(event, point); - eventHub->FireOnDrop(event, extraParams); + eventHub->FireOnCustomDrop(event, extraParams); + eventHub->HandleFireOnDrop(event, extraParams); ClearVelocityInfo(); #ifdef ENABLE_DRAG_FRAMEWORK SetIsDragged(false); @@ -560,6 +560,35 @@ void DragDropManager::onDragCancel() draggedFrameNode_ = nullptr; } +void DragDropManager::FireOnDragEventWithDragType(const RefPtr& eventHub, DragEventType type, + RefPtr& event, const std::string& extraParams) +{ + switch (type) { + case DragEventType::ENTER: { + eventHub->FireOnCustomDragEnter(event, extraParams); + eventHub->FireOnDragEnter(event, extraParams); + break; + } + case DragEventType::MOVE: { + eventHub->FireOnCustomDragMove(event, extraParams); + eventHub->FireOnDragMove(event, extraParams); + break; + } + case DragEventType::LEAVE: { + eventHub->FireOnCustomDragLeave(event, extraParams); + eventHub->FireOnDragLeave(event, extraParams); + break; + } + case DragEventType::DROP: { + eventHub->FireOnCustomDrop(event, extraParams); + eventHub->HandleFireOnDrop(event, extraParams); + break; + } + default: + break; + } +} + void DragDropManager::FireOnDragEvent( const RefPtr& frameNode, const Point& point, DragEventType type, const std::string& extraInfo) { @@ -580,22 +609,7 @@ void DragDropManager::FireOnDragEvent( event->SetPreviewRect(GetDragWindowRect(point)); #endif // ENABLE_DRAG_FRAMEWORK - switch (type) { - case DragEventType::ENTER: - eventHub->FireOnDragEnter(event, extraParams); - break; - case DragEventType::MOVE: - eventHub->FireOnDragMove(event, extraParams); - break; - case DragEventType::LEAVE: - eventHub->FireOnDragLeave(event, extraParams); - break; - case DragEventType::DROP: - eventHub->FireOnDrop(event, extraParams); - break; - default: - break; - } + FireOnDragEventWithDragType(eventHub, type, event, extraParams); #ifdef ENABLE_DRAG_FRAMEWORK if (isMouseDragged_ && !isDragWindowShow_) { diff --git a/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.h b/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.h index 356bc05dfb5..9fc84d53b17 100644 --- a/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.h +++ b/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.h @@ -180,6 +180,8 @@ private: void ClearVelocityInfo(); void UpdateVelocityTrackerPoint(const Point& point, bool isEnd = false); void PrintDragFrameNode(const Point& point, const RefPtr& dragFrameNode); + void FireOnDragEventWithDragType(const RefPtr& eventHub, DragEventType type, + RefPtr& event, const std::string& extraParams); std::map> dragFrameNodes_; std::map> gridDragFrameNodes_; diff --git a/frameworks/core/gestures/gesture_info.h b/frameworks/core/gestures/gesture_info.h index c5c35d5feca..a80f2b75d34 100644 --- a/frameworks/core/gestures/gesture_info.h +++ b/frameworks/core/gestures/gesture_info.h @@ -265,6 +265,7 @@ private: #ifdef ENABLE_DRAG_FRAMEWORK enum class DragRet { + DRAG_DEFAULT = -1, DRAG_SUCCESS = 0, DRAG_FAIL, DRAG_CANCEL, @@ -414,7 +415,7 @@ private: RefPtr unifiedData_; std::map summary_; std::string udKey_ = ""; - DragRet dragRet_; + DragRet dragRet_ = DragRet::DRAG_DEFAULT; Rect previewRect_; bool useCustomAnimation_ = false; bool isGetDataSuccess_ = false; -- Gitee From 1242c521cf72759f9e10b5255e91ea5338174add Mon Sep 17 00:00:00 2001 From: doujian Date: Fri, 13 Oct 2023 00:21:53 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E7=BB=84=E4=BB=B6=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E4=B8=8E=E5=BA=94=E7=94=A8=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E5=88=86=E7=A6=BB=20Signed-off-by:doujian=20?= =?UTF-8?q??= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: doujian --- .../core/components_ng/base/view_abstract.cpp | 10 +- .../core/components_ng/event/event_hub.cpp | 134 +++++++++--------- .../core/components_ng/event/event_hub.h | 47 +++--- .../components_ng/event/gesture_event_hub.cpp | 8 +- .../manager/drag_drop/drag_drop_manager.cpp | 16 +-- 5 files changed, 103 insertions(+), 112 deletions(-) diff --git a/frameworks/core/components_ng/base/view_abstract.cpp b/frameworks/core/components_ng/base/view_abstract.cpp index 963e07b9fe4..7950198f716 100644 --- a/frameworks/core/components_ng/base/view_abstract.cpp +++ b/frameworks/core/components_ng/base/view_abstract.cpp @@ -884,7 +884,7 @@ void ViewAbstract::SetOnDragEnter( { auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnCustomDragEnter(std::move(onDragEnter)); + eventHub->SetCustomerOnDragFunc(DragFuncType::DRAG_ENTER, std::move(onDragEnter)); AddDragFrameNodeToManager(); } @@ -894,7 +894,7 @@ void ViewAbstract::SetOnDragLeave( { auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnCustomDragLeave(std::move(onDragLeave)); + eventHub->SetCustomerOnDragFunc(DragFuncType::DRAG_LEAVE, std::move(onDragLeave)); AddDragFrameNodeToManager(); } @@ -904,7 +904,7 @@ void ViewAbstract::SetOnDragMove( { auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnCustomDragMove(std::move(onDragMove)); + eventHub->SetCustomerOnDragFunc(DragFuncType::DRAG_MOVE, std::move(onDragMove)); AddDragFrameNodeToManager(); } @@ -913,7 +913,7 @@ void ViewAbstract::SetOnDrop(std::functionGetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnCustomDrop(std::move(onDrop)); + eventHub->SetCustomerOnDragFunc(DragFuncType::DRAG_DROP, std::move(onDrop)); AddDragFrameNodeToManager(); } @@ -922,7 +922,7 @@ void ViewAbstract::SetOnDragEnd(std::functionGetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetOnCustomDragEnd(std::move(onDragEnd)); + eventHub->SetCustomerOnDragEnd(std::move(onDragEnd)); AddDragFrameNodeToManager(); } diff --git a/frameworks/core/components_ng/event/event_hub.cpp b/frameworks/core/components_ng/event/event_hub.cpp index e1e7e0a2f49..2ba0eab5b6d 100644 --- a/frameworks/core/components_ng/event/event_hub.cpp +++ b/frameworks/core/components_ng/event/event_hub.cpp @@ -104,83 +104,79 @@ void EventHub::MarkModifyDone() OnModifyDone(); } -void EventHub::SetOnCustomDragEnter(OnDragFunc&& onCustomDragEnter) +void EventHub::SetCustomerOnDragFunc(DragFuncType dragFuncType, OnDragFunc&& onDragFunc) { - onCustomDragEnter_ = std::move(onCustomDragEnter); -} - -void EventHub::FireOnCustomDragEnter(const RefPtr& info, const std::string& extraParams) -{ - if (SystemProperties::GetDebugEnabled()) { - LOGI("DragDropManager fire onCustomDragEnter"); - } - if (onCustomDragEnter_ != nullptr) { - auto onCustomDragEnter = onCustomDragEnter_; - onCustomDragEnter(info, extraParams); + switch (dragFuncType) { + case DragFuncType::DRAG_ENTER: + customerOnDragEnter_ = std::move(onDragFunc); + break; + case DragFuncType::DRAG_LEAVE: + customerOnDragLeave_ = std::move(onDragFunc); + break; + case DragFuncType::DRAG_MOVE: + customerOnDragMove_ = std::move(onDragFunc); + break; + case DragFuncType::DRAG_DROP: + customerOnDrop_ = std::move(onDragFunc); + break; + default: + LOGW("unsuport dragFuncType"); + break; } } -void EventHub::SetOnCustomDragLeave(OnDragFunc&& onCustomDragLeave) +void EventHub::SetCustomerOnDragFunc(DragFuncType dragFuncType, OnNewDragFunc&& onDragEnd) { - onCustomDragLeave_ = std::move(onCustomDragLeave); -} - -void EventHub::FireOnCustomDragLeave(const RefPtr& info, const std::string& extraParams) -{ - if (SystemProperties::GetDebugEnabled()) { - LOGI("DragDropManager fire onCustomDragLeave"); - } - if (onCustomDragLeave_ != nullptr) { - auto onCustomDragLeave = onCustomDragLeave_; - onCustomDragLeave(info, extraParams); + if (dragFuncType != DragFuncType::DRAG_END) { + return; } + customerOnDragEnd_ = std::move(onDragEnd); } -void EventHub::SetOnCustomDragMove(OnDragFunc&& onCustomDragMove) -{ - onCustomDragMove_ = std::move(onCustomDragMove); -} - -void EventHub::FireOnCustomDragMove(const RefPtr& info, const std::string& extraParams) +void EventHub::FireCustomerOnDragFunc(DragFuncType dragFuncType, const RefPtr& info, + const std::string& extraParams) { if (SystemProperties::GetDebugEnabled()) { - LOGI("DragDropManager fire onCustomDragMove"); - } - if (onCustomDragMove_ != nullptr) { - auto onCustomDragMove = onCustomDragMove_; - onCustomDragMove(info, extraParams); + LOGI("FireCustomerOnDragFunc type: %u", dragFuncType); } -} - -void EventHub::SetOnCustomDrop(OnDragFunc&& onCustomDrop) -{ - onCustomDrop_ = std::move(onCustomDrop); -} - -void EventHub::FireOnCustomDrop(const RefPtr& info, const std::string& extraParams) -{ - if (SystemProperties::GetDebugEnabled()) { - LOGI("DragDropManager fire onCustomDrop"); - } - if (onCustomDrop_ != nullptr) { - auto onCustomDrop = onCustomDrop_; - onCustomDrop(info, extraParams); - } -} - -void EventHub::SetOnCustomDragEnd(OnNewDragFunc&& onCustomDragEnd) -{ - onCustomDragEnd_ = std::move(onCustomDragEnd); -} - -void EventHub::FireOnCustomDragEnd(const RefPtr& info) -{ - if (SystemProperties::GetDebugEnabled()) { - LOGI("DragDropManager fire onCustomDragEnd"); - } - if (onCustomDragEnd_ != nullptr) { - auto onCustomDragEnd = onCustomDragEnd_; - onCustomDragEnd(info); + switch (dragFuncType) { + case DragFuncType::DRAG_ENTER: { + if (customerOnDragEnter_ != nullptr) { + auto customerDragEnter = customerOnDragEnter_; + customerDragEnter(info, extraParams); + } + break; + } + case DragFuncType::DRAG_LEAVE: { + if (customerOnDragLeave_ != nullptr) { + auto customerOnDragLeave = customerOnDragLeave_; + customerOnDragLeave(info, extraParams); + } + break; + } + case DragFuncType::DRAG_MOVE: { + if (customerOnDragMove_ != nullptr) { + auto customerOnDragMove = customerOnDragMove_; + customerOnDragMove(info, extraParams); + } + break; + } + case DragFuncType::DRAG_DROP: { + if (customerOnDrop_ != nullptr) { + auto customerOnDrop = customerOnDrop_; + customerOnDrop(info, extraParams); + } + break; + } + case: DragFuncType::DRAG_END: { + if (customerOnDragEnd_ != nullptr) { + auto customerOnDragEnd = customerOnDragEnd_; + customerOnDragEnd(info); + } + } + default: + LOGW("unsuport DragFuncType"); + break; } } @@ -188,9 +184,9 @@ bool EventHub::IsFireOnDrop(const RefPtr& info) { #ifdef ENABLE_DRAG_FRAMEWORK if (SystemProperties::GetDebugEnabled()) { - LOGI("DragDropManager fire IsFireOnDrop, drag ret: %d", info->GetResult()); + LOGI("DragDropManager IsFireOnDrop, drag ret: %d", info->GetResult()); } - return !HasOnCustomDrop() + return !HasCustomerOnDrop() || info->GetResult() == DragRet::DRAG_DEFAULT || info->GetResult() == DragRet::ENABLE_DROP || info->GetResult() == DragRet::DISABLE_DROP; @@ -198,7 +194,7 @@ bool EventHub::IsFireOnDrop(const RefPtr& info) return true; } -void EventHub::HandleFireOnDrop(const RefPtr& info, const std::string& extraParams) +void EventHub::HandleInternalOnDrop(const RefPtr& info, const std::string& extraParams) { if (IsFireOnDrop(info)) { FireOnDrop(info, extraParams); diff --git a/frameworks/core/components_ng/event/event_hub.h b/frameworks/core/components_ng/event/event_hub.h index 2035c37f535..ba4dc164f6b 100644 --- a/frameworks/core/components_ng/event/event_hub.h +++ b/frameworks/core/components_ng/event/event_hub.h @@ -39,6 +39,14 @@ struct KeyboardShortcut { std::function onKeyboardShortcutAction = nullptr; }; +enum class DragFuncType { + DRAG_ENTER, + DRAG_LEAVE, + DRAG_MOVE, + DRAG_DROP, + DRAG_END, +} + // The event hub is mainly used to handle common collections of events, such as gesture events, mouse events, etc. class EventHub : public virtual AceType { DECLARE_ACE_TYPE(EventHub, AceType) @@ -306,12 +314,12 @@ public: bool HasOnDrop() const { - return static_cast(onDrop_); + return onDrop_ != nullptr; } - bool HasOnCustomDrop() const + bool HasCustomerOnDrop() const { - return static_cast(onCustomDrop_); + return customerOnDrop_ != nullptr; } virtual std::string GetDragExtraParams(const std::string& extraInfo, const Point& point, DragEventType isStart) @@ -415,29 +423,16 @@ public: return keyboardShortcut_; } - void SetOnCustomDragEnter(OnDragFunc&& onCustomDragEnter); - - void FireOnCustomDragEnter(const RefPtr& info, const std::string& extraParams); - - void SetOnCustomDragLeave(OnDragFunc&& onCustomDragLeave); - - void FireOnCustomDragLeave(const RefPtr& info, const std::string& extraParams); - - void SetOnCustomDragMove(OnDragFunc&& onCustomDragMove); - - void FireOnCustomDragMove(const RefPtr& info, const std::string& extraParams); - - void SetOnCustomDrop(OnDragFunc&& onCustomDrop); - - void FireOnCustomDrop(const RefPtr& info, const std::string& extraParams); + void SetCustomerOnDragFunc(DragFuncType dragFuncType, OnDragFunc&& onDragFunc); - void SetOnCustomDragEnd(OnNewDragFunc&& onCustomDragEnd); + void SetCustomerOnDragFunc(DragFuncType dragFuncType, OnNewDragFunc&& onDragEnd); - void FireOnCustomDragEnd(const RefPtr& info); + void FireCustomerOnDragFunc(DragFuncType dragFuncType, const RefPtr& info, + const std::string& extraParams = ""); bool IsFireOnDrop(const RefPtr& info); - void HandleFireOnDrop(const RefPtr& info, const std::string& extraParams); + void HandleInternalOnDrop(const RefPtr& info, const std::string& extraParams); protected: virtual void OnModifyDone() {} @@ -460,11 +455,11 @@ private: OnDragFunc onDrop_; OnNewDragFunc onDragEnd_; - OnDragFunc onCustomDragEnter_; - OnDragFunc onCustomDragLeave_; - OnDragFunc onCustomDragMove_; - OnDragFunc onCustomDrop_; - OnNewDragFunc onCustomDragEnd_; + OnDragFunc customerOnDragEnter_; + OnDragFunc customerOnDragLeave_; + OnDragFunc customerOnDragMove_; + OnDragFunc customerOnDrop_; + OnNewDragFunc customerOnDragEnd_; bool enabled_ { true }; bool developerEnabled_ { true }; diff --git a/frameworks/core/components_ng/event/gesture_event_hub.cpp b/frameworks/core/components_ng/event/gesture_event_hub.cpp index 8c09c55cc01..a220427d22b 100644 --- a/frameworks/core/components_ng/event/gesture_event_hub.cpp +++ b/frameworks/core/components_ng/event/gesture_event_hub.cpp @@ -874,7 +874,7 @@ void GestureEventHub::HandleOnDragEnd(const GestureEvent& info) // Only the onDrop callback of dragged frame node is triggered. // The onDrop callback of target frame node is triggered in PipelineContext::OnDragEvent. - if (eventHub->HasOnDrop() || eventHub->HasOnCustomDrop()) { + if (eventHub->HasOnDrop() || eventHub->HasCustomerOnDrop()) { RefPtr event = AceType::MakeRefPtr(); if (frameNode->GetTag() == V2::WEB_ETS_TAG) { LOGI("web on drag end"); @@ -886,8 +886,8 @@ void GestureEventHub::HandleOnDragEnd(const GestureEvent& info) } event->SetScreenX(info.GetScreenLocation().GetX()); event->SetScreenY(info.GetScreenLocation().GetY()); - eventHub->FireOnCustomDrop(event, ""); - eventHub->HandleFireOnDrop(event, ""); + eventHub->FireCustomerOnDragFunc(DragFuncType::DRAG_DROP, event); + eventHub->HandleInternalOnDrop(event, ""); } } @@ -1130,7 +1130,7 @@ OnDragCallback GestureEventHub::GetDragCallback(const RefPtr& cont if (eventManager) { eventManager->DoMouseActionRelease(); } - eventHub->FireOnCustomDragEnd(dragEvent); + eventHub->FireCustomerOnDragFunc(DragFuncType::DRAG_END, dragEvent); if (eventHub->HasOnDragEnd()) { (eventHub->GetOnDragEnd())(dragEvent); } diff --git a/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp b/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp index 1ac885ef78f..e649e05bd22 100644 --- a/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp +++ b/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp @@ -211,7 +211,7 @@ RefPtr DragDropManager::FindTargetInChildNodes( if (!eventHub) { continue; } - if (eventHub->HasOnDrop() || eventHub->HasOnItemDrop() || eventHub->HasOnCustomDrop()) { + if (eventHub->HasOnDrop() || eventHub->HasOnItemDrop() || eventHub->HasCustomerOnDrop()) { return parentFrameNode; } if (SystemProperties::GetDebugEnabled()) { @@ -460,8 +460,8 @@ void DragDropManager::OnDragEnd(const Point& point, const std::string& extraInfo RefPtr event = AceType::MakeRefPtr(); auto extraParams = eventHub->GetDragExtraParams(extraInfo_, point, DragEventType::DROP); UpdateDragEvent(event, point); - eventHub->FireOnCustomDrop(event, extraParams); - eventHub->HandleFireOnDrop(event, extraParams); + eventHub->FireCustomerOnDragFunc(DragFuncType::DRAG_DROP, event, extraParams); + eventHub->HandleInternalOnDrop(event, extraParams); ClearVelocityInfo(); #ifdef ENABLE_DRAG_FRAMEWORK SetIsDragged(false); @@ -565,23 +565,23 @@ void DragDropManager::FireOnDragEventWithDragType(const RefPtr& eventH { switch (type) { case DragEventType::ENTER: { - eventHub->FireOnCustomDragEnter(event, extraParams); + eventHub->FireCustomerOnDragFunc(DragFuncType::DRAG_ENTER, event, extraParams); eventHub->FireOnDragEnter(event, extraParams); break; } case DragEventType::MOVE: { - eventHub->FireOnCustomDragMove(event, extraParams); + eventHub->FireCustomerOnDragFunc(DragFuncType::DRAG_MOVE, event, extraParams); eventHub->FireOnDragMove(event, extraParams); break; } case DragEventType::LEAVE: { - eventHub->FireOnCustomDragLeave(event, extraParams); + eventHub->FireCustomerOnDragFunc(DragFuncType::DRAG_LEAVE, event, extraParams); eventHub->FireOnDragLeave(event, extraParams); break; } case DragEventType::DROP: { - eventHub->FireOnCustomDrop(event, extraParams); - eventHub->HandleFireOnDrop(event, extraParams); + eventHub->FireCustomerOnDragFunc(DragFuncType::DRAG_DROP, event, extraParams); + eventHub->HandleInternalOnDrop(event, extraParams); break; } default: -- Gitee From 970303183e684a5816338943eb0747f681c7fdf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B1=86=E5=81=A5?= Date: Fri, 13 Oct 2023 02:52:06 +0000 Subject: [PATCH 3/5] update frameworks/core/components_ng/base/view_abstract.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 豆健 --- frameworks/core/components_ng/base/view_abstract.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/core/components_ng/base/view_abstract.cpp b/frameworks/core/components_ng/base/view_abstract.cpp index 7950198f716..dc0a0852dbf 100644 --- a/frameworks/core/components_ng/base/view_abstract.cpp +++ b/frameworks/core/components_ng/base/view_abstract.cpp @@ -922,7 +922,7 @@ void ViewAbstract::SetOnDragEnd(std::functionGetMainFrameNodeEventHub(); CHECK_NULL_VOID(eventHub); - eventHub->SetCustomerOnDragEnd(std::move(onDragEnd)); + eventHub->SetCustomerOnDragFunc(DragFuncType::DRAG_END, std::move(onDragEnd)); AddDragFrameNodeToManager(); } -- Gitee From 78a8fe7e93890702589e6eae601fd044adc02268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B1=86=E5=81=A5?= Date: Fri, 13 Oct 2023 02:52:58 +0000 Subject: [PATCH 4/5] update frameworks/core/components_ng/event/event_hub.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 豆健 --- frameworks/core/components_ng/event/event_hub.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/core/components_ng/event/event_hub.cpp b/frameworks/core/components_ng/event/event_hub.cpp index 2ba0eab5b6d..a3812336f54 100644 --- a/frameworks/core/components_ng/event/event_hub.cpp +++ b/frameworks/core/components_ng/event/event_hub.cpp @@ -168,7 +168,7 @@ void EventHub::FireCustomerOnDragFunc(DragFuncType dragFuncType, const RefPtr Date: Fri, 13 Oct 2023 03:03:38 +0000 Subject: [PATCH 5/5] update frameworks/core/components_ng/event/event_hub.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 豆健 --- frameworks/core/components_ng/event/event_hub.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/core/components_ng/event/event_hub.h b/frameworks/core/components_ng/event/event_hub.h index ba4dc164f6b..ff7ad9e2e48 100644 --- a/frameworks/core/components_ng/event/event_hub.h +++ b/frameworks/core/components_ng/event/event_hub.h @@ -45,7 +45,7 @@ enum class DragFuncType { DRAG_MOVE, DRAG_DROP, DRAG_END, -} +}; // The event hub is mainly used to handle common collections of events, such as gesture events, mouse events, etc. class EventHub : public virtual AceType { -- Gitee