From 0bcb1370d61cf6e6c0e4414bbb6ea50252fa742a Mon Sep 17 00:00:00 2001 From: hct95 Date: Mon, 9 Oct 2023 14:16:50 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8B=96=E6=8B=BD=E4=BD=8D?= =?UTF-8?q?=E7=A7=BB=E8=B7=9D=E7=A6=BB=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hct95 Change-Id: I58415bea4561457b945e0ab4b308b71ae998b9a4 --- .../base/view_abstract_model_ng.cpp | 9 +++++-- .../core/components_ng/event/drag_event.cpp | 25 +++++++++++++------ .../recognizers/long_press_recognizer.cpp | 6 +---- .../recognizers/long_press_recognizer.h | 5 ---- .../manager/drag_drop/drag_drop_manager.h | 6 +++++ frameworks/core/gestures/gesture_info.h | 1 - 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/frameworks/core/components_ng/base/view_abstract_model_ng.cpp b/frameworks/core/components_ng/base/view_abstract_model_ng.cpp index c9a38d92088..01d2a645ac7 100644 --- a/frameworks/core/components_ng/base/view_abstract_model_ng.cpp +++ b/frameworks/core/components_ng/base/view_abstract_model_ng.cpp @@ -147,6 +147,13 @@ void ViewAbstractModelNG::BindContextMenu(ResponseType type, std::functionGetDragDropManager(); + CHECK_NULL_VOID(dragDropManager); + if (dragDropManager->IsAboutToPreview() || dragDropManager->IsDragging()) { + return; + } if (menuParam.previewMode == MenuPreviewMode::IMAGE) { auto context = targetNode->GetRenderContext(); CHECK_NULL_VOID(context); @@ -157,8 +164,6 @@ void ViewAbstractModelNG::BindContextMenu(ResponseType type, std::functionGetDisplayWindowRectInfo(); menuPosition += NG::OffsetF { windowRect.Left(), windowRect.Top() }; CreateCustomMenu(builder, targetNode, menuPosition, previewBuildFunc, menuParam); diff --git a/frameworks/core/components_ng/event/drag_event.cpp b/frameworks/core/components_ng/event/drag_event.cpp index f6836dc1a9b..9a922af4bfc 100644 --- a/frameworks/core/components_ng/event/drag_event.cpp +++ b/frameworks/core/components_ng/event/drag_event.cpp @@ -80,7 +80,7 @@ DragEventActuator::DragEventActuator( panRecognizer_ = MakeRefPtr(fingers_, direction_, distance_); longPressRecognizer_ = AceType::MakeRefPtr(LONG_PRESS_DURATION, fingers_, false, false); previewLongPressRecognizer_ = - AceType::MakeRefPtr(PREVIEW_LONG_PRESS_RECONGNIZER, fingers_, false, true); + AceType::MakeRefPtr(PREVIEW_LONG_PRESS_RECONGNIZER, fingers_, false, false); isNotInPreviewState_ = false; } @@ -131,6 +131,11 @@ void DragEventActuator::OnCollectTouchTarget(const OffsetF& coordinateOffset, co } auto actuator = weak.Upgrade(); CHECK_NULL_VOID(actuator); + auto pipeline = PipelineContext::GetCurrentContext(); + CHECK_NULL_VOID(pipeline); + auto dragDropManager = pipeline->GetDragDropManager(); + CHECK_NULL_VOID(dragDropManager); + dragDropManager->ResetDragging(DragDropMgrState::ABOUT_TO_PREVIEW); #ifdef ENABLE_DRAG_FRAMEWORK auto gestureHub = actuator->gestureEventHub_.Upgrade(); CHECK_NULL_VOID(gestureHub); @@ -306,10 +311,6 @@ void DragEventActuator::OnCollectTouchTarget(const OffsetF& coordinateOffset, co result.emplace_back(SequencedRecognizer_); return; } - auto menuLongPress = gestureHub->GetLongPressRecognizer(); - if (menuLongPress) { - menuLongPress->SetIsForDrag(true); - } auto longPressUpdateValue = [weak = WeakClaim(this)](GestureEvent& info) { if (SystemProperties::GetDebugEnabled()) { LOGI("DragEvent longPressRecognizer onActionUpdate."); @@ -317,12 +318,24 @@ void DragEventActuator::OnCollectTouchTarget(const OffsetF& coordinateOffset, co auto actuator = weak.Upgrade(); CHECK_NULL_VOID(actuator); actuator->SetIsNotInPreviewState(true); + auto pipeline = PipelineContext::GetCurrentContext(); + CHECK_NULL_VOID(pipeline); + auto dragDropManager = pipeline->GetDragDropManager(); + CHECK_NULL_VOID(dragDropManager); + dragDropManager->ResetDragging(); }; longPressRecognizer_->SetOnActionUpdate(longPressUpdateValue); auto longPressUpdate = [weak = WeakClaim(this)](GestureEvent& info) { if (SystemProperties::GetDebugEnabled()) { LOGI("DragEvent previewLongPressRecognizer onActionUpdate."); } + auto pipeline = PipelineContext::GetCurrentContext(); + CHECK_NULL_VOID(pipeline); + auto dragDropManager = pipeline->GetDragDropManager(); + CHECK_NULL_VOID(dragDropManager); + if (dragDropManager->IsAboutToPreview() || dragDropManager->IsDragging()) { + return; + } auto actuator = weak.Upgrade(); CHECK_NULL_VOID(actuator); auto gestureHub = actuator->gestureEventHub_.Upgrade(); @@ -343,8 +356,6 @@ void DragEventActuator::OnCollectTouchTarget(const OffsetF& coordinateOffset, co } actuator->SetFilter(actuator); - auto pipeline = PipelineContext::GetCurrentContext(); - CHECK_NULL_VOID(pipeline); auto manager = pipeline->GetOverlayManager(); CHECK_NULL_VOID(manager); actuator->SetIsNotInPreviewState(false); diff --git a/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.cpp b/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.cpp index 4d7a04d7404..fc8a1fa6c4d 100644 --- a/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.cpp +++ b/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.cpp @@ -177,11 +177,7 @@ void LongPressRecognizer::HandleTouchMoveEvent(const TouchEvent& event) return; } Offset offset = event.GetOffset() - touchPoints_[event.id].GetOffset(); - auto longPressThreshold = MAX_THRESHOLD; - if (isForDrag_) { - longPressThreshold = DRAG_LONG_PRESS_THRESHOLD; - } - if (offset.GetDistance() > longPressThreshold) { + if (offset.GetDistance() > MAX_THRESHOLD) { LOGD("this gesture is not long press, try to reject it"); Adjudicate(AceType::Claim(this), GestureDisposal::REJECT); return; diff --git a/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.h b/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.h index 0006a95be30..2335a80165a 100644 --- a/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.h +++ b/frameworks/core/components_ng/gestures/recognizers/long_press_recognizer.h @@ -89,11 +89,6 @@ public: onAccessibilityEventFunc_ = std::move(onAccessibilityEvent); } - void SetIsForDrag(bool isForDrag) - { - isForDrag_ = isForDrag; - } - GestureEventFunc GetLongPressActionFunc(); private: 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..d02b93d980b 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 @@ -29,6 +29,7 @@ namespace OHOS::Ace::NG { enum class DragDropMgrState : int32_t { IDLE, + ABOUT_TO_PREVIEW, DRAGGING }; @@ -161,6 +162,11 @@ public: return dragDropState_ == DragDropMgrState::DRAGGING; } + bool IsAboutToPreview() + { + return dragDropState_ == DragDropMgrState::ABOUT_TO_PREVIEW; + } + void ResetDragging(DragDropMgrState dragDropMgrState = DragDropMgrState::IDLE) { dragDropState_ = dragDropMgrState; diff --git a/frameworks/core/gestures/gesture_info.h b/frameworks/core/gestures/gesture_info.h index c5c35d5feca..cd93eb4990e 100644 --- a/frameworks/core/gestures/gesture_info.h +++ b/frameworks/core/gestures/gesture_info.h @@ -43,7 +43,6 @@ namespace OHOS::Ace { constexpr int32_t DEFAULT_PAN_FINGER = 1; constexpr Dimension DEFAULT_PAN_DISTANCE = 5.0_vp; -constexpr double DRAG_LONG_PRESS_THRESHOLD = 3.0; constexpr Dimension DRAG_PAN_DISTANCE_MOUSE = 1.0_vp; constexpr Dimension DEFAULT_SLIDE_DISTANCE = DEFAULT_PAN_DISTANCE; constexpr int32_t DEFAULT_SLIDE_FINGER = DEFAULT_PAN_FINGER; -- Gitee