From 1423d1b9a5d4cbb645f1276c85120b9ee1f74a4c Mon Sep 17 00:00:00 2001 From: carnivore233 Date: Wed, 15 May 2024 21:33:01 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90RichEditor=E3=80=91=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=95=BF=E6=8C=89=E9=80=89=E4=B8=AD=E5=8C=BA=E5=90=8E=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=8C=BA=E5=8F=98=E5=8C=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: carnivore233 --- .../rich_editor/rich_editor_pattern.cpp | 44 +++++++++---------- .../pattern/rich_editor/rich_editor_pattern.h | 2 +- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.cpp b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.cpp index e29482a3a99..c1920208d58 100644 --- a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.cpp +++ b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.cpp @@ -2488,28 +2488,18 @@ bool RichEditorPattern::CloseKeyboard(bool forceClose) return false; } -void RichEditorPattern::HandleDraggableFlag(GestureEvent& info, bool& isInterceptEvent) +void RichEditorPattern::HandleDraggableFlag(bool isInterceptEvent) { auto gestureHub = GetGestureEventHub(); - if (isSpanStringMode_) { - isInterceptEvent = false; - if (gestureHub) { - gestureHub->SetIsTextDraggable(false); - } + CHECK_NULL_VOID(gestureHub); + if (isInterceptEvent || copyOption_ == CopyOptions::None) { + gestureHub->SetIsTextDraggable(false); return; } - if (gestureHub && copyOption_ != CopyOptions::None && BetweenSelectedPosition(info.GetGlobalLocation())) { - dragBoxes_ = GetTextBoxes(); - // prevent long press event from being triggered when dragging - bool isContentDraggalbe = JudgeContentDraggable(); - gestureHub->SetIsTextDraggable(isContentDraggalbe); - isInterceptEvent = true; - } else { - isInterceptEvent = false; - if (gestureHub) { - gestureHub->SetIsTextDraggable(false); - } - } + dragBoxes_ = GetTextBoxes(); + // prevent long press event from being triggered when dragging + bool isContentDraggalbe = JudgeContentDraggable(); + gestureHub->SetIsTextDraggable(isContentDraggalbe); } bool RichEditorPattern::JudgeContentDraggable() @@ -2622,13 +2612,21 @@ void RichEditorPattern::HandleDoubleClickOrLongPress(GestureEvent& info) host->MarkDirtyNode(PROPERTY_UPDATE_RENDER); ShowSelectOverlay(textSelector_.firstHandle, textSelector_.secondHandle); } - bool isInterceptEvent = false; - HandleDraggableFlag(info, isInterceptEvent); + bool isInterceptEvent = BetweenSelectedPosition(info.GetGlobalLocation()); + HandleDraggableFlag(isInterceptEvent); // check current is mouse long press isInterceptEvent |= (isMousePressed_ && caretUpdateType_== CaretUpdateType::LONG_PRESSED); - if (isInterceptEvent) { - return; + + // SpanString do not support drag + if (isSpanStringMode_) { + auto gestureHub = GetGestureEventHub(); + if (gestureHub) { + gestureHub->SetIsTextDraggable(false); + } + isInterceptEvent = false; } + + CHECK_NULL_VOID(!isInterceptEvent); HandleDoubleClickOrLongPress(info, host); } @@ -5675,7 +5673,7 @@ bool RichEditorPattern::BetweenSelectedPosition(const Offset& globalOffset) localOffset = ConvertGlobalToLocalOffset(globalOffset); } auto eventHub = host->GetEventHub(); - if (copyOption_ != CopyOptions::None && GreatNotEqual(textSelector_.GetTextEnd(), textSelector_.GetTextStart())) { + if (GreatNotEqual(textSelector_.GetTextEnd(), textSelector_.GetTextStart())) { // Determine if the pan location is in the selected area auto selectedRects = paragraphs_.GetRects(textSelector_.GetTextStart(), textSelector_.GetTextEnd()); auto panOffset = OffsetF(localOffset.GetX(), localOffset.GetY()) - GetTextRect().GetOffset() + diff --git a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.h b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.h index 0e9f8cda437..35b7cf74008 100644 --- a/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.h +++ b/frameworks/core/components_ng/pattern/rich_editor/rich_editor_pattern.h @@ -421,7 +421,7 @@ public: void HandleOnSelectAll() override; void OnCopyOperation(bool isUsingExternalKeyboard = false); void HandleOnCopy(bool isUsingExternalKeyboard = false) override; - void HandleDraggableFlag(GestureEvent& info, bool& isInterceptEvent); + void HandleDraggableFlag(bool isInterceptEvent); bool JudgeContentDraggable(); std::pair CalculateCaretOffsetAndHeight(); OffsetF CalculateEmptyValueCaretRect(); -- Gitee