diff --git a/.gitee/CODEOWNERS b/.gitee/CODEOWNERS index f8fa337e36fed2dc303f8787e2deacd939563fd6..e090191553c2abdf88c4b44703005a3373dba7ac 100644 --- a/.gitee/CODEOWNERS +++ b/.gitee/CODEOWNERS @@ -94,7 +94,7 @@ frameworks/core/components_ng/pattern/refresh/ @aryawang frameworks/core/components_ng/pattern/relative_container/ @nickyjd frameworks/core/components_ng/pattern/remote_window/ @liuchao92 frameworks/core/components_ng/pattern/rendering_context/ @keerecles -frameworks/core/components_ng/pattern/rich_editor/ @jyj-0306 +frameworks/core/components_ng/pattern/rich_editor/ @jyj_0306 frameworks/core/components_ng/pattern/root/ @zhoutianer frameworks/core/components_ng/pattern/scroll/ @rongShao-Z frameworks/core/components_ng/pattern/scroll_bar/ @rongShao-Z @@ -115,7 +115,7 @@ frameworks/core/components_ng/pattern/tabs/ @xuzhidan frameworks/core/components_ng/pattern/text/ @lijuan124 frameworks/core/components_ng/pattern/text_clock/ @aryawang frameworks/core/components_ng/pattern/text_drag/ @zhaojian2021 -frameworks/core/components_ng/pattern/text_field/ @jyj-0306 @lijuan124 +frameworks/core/components_ng/pattern/text_field/ @jyj_0306 @lijuan124 frameworks/core/components_ng/pattern/text_picker/ @cheng-feiwang frameworks/core/components_ng/pattern/texttimer/ @aryawang frameworks/core/components_ng/pattern/time_picker/ @cheng-feiwang @@ -160,7 +160,7 @@ frameworks/core/components/flex/ @yangfan229 frameworks/core/components/focus_animation/ @catpoison frameworks/core/components/focus_collaboration/ @catpoison frameworks/core/components/focusable/ @catpoison -frameworks/core/components/font/ @jyj-0306 +frameworks/core/components/font/ @jyj_0306 frameworks/core/components/foreach/ @yan-shuifeng frameworks/core/components/form/ @wangchensu1 frameworks/core/components/gesture_listener/ @zheng-qiyi @@ -220,7 +220,7 @@ frameworks/core/components/swiper/ @xuzhidan frameworks/core/components/tab_bar/ @xuzhidan frameworks/core/components/text/ @lijuan124 frameworks/core/components/text_clock/ @aryawang -frameworks/core/components/text_field/ @jyj-0306 @lijuan124 +frameworks/core/components/text_field/ @jyj_0306 @lijuan124 frameworks/core/components/text_overlay/ @yangfan229 frameworks/core/components/text_span/ @lijuan124 frameworks/core/components/texttimer/ @aryawang @@ -371,7 +371,7 @@ frameworks/core/components_ng/test/pattern/refresh/ @suiwuyue frameworks/core/components_ng/test/pattern/relative_container/ @nickyjd frameworks/core/components_ng/test/pattern/remote_window/ @liuchao92 frameworks/core/components_ng/test/pattern/rendering_context/ @keerecles -frameworks/core/components_ng/test/pattern/rich_editor/ @jyj-0306 +frameworks/core/components_ng/test/pattern/rich_editor/ @jyj_0306 frameworks/core/components_ng/test/pattern/root/ @yan-shuifeng frameworks/core/components_ng/test/pattern/scroll/ @suiwuyue frameworks/core/components_ng/test/pattern/scroll_bar/ @suiwuyue @@ -392,7 +392,7 @@ frameworks/core/components_ng/test/pattern/tabs/ @xuzhidan frameworks/core/components_ng/test/pattern/text/ @lijuan124 frameworks/core/components_ng/test/pattern/text_clock/ @aryawang frameworks/core/components_ng/test/pattern/text_drag/ @zhaojian2021 -frameworks/core/components_ng/test/pattern/text_field/ @jyj-0306 @lijuan124 +frameworks/core/components_ng/test/pattern/text_field/ @jyj_0306 @lijuan124 frameworks/core/components_ng/test/pattern/text_picker/ @cheng-feiwang frameworks/core/components_ng/test/pattern/texttimer/ @aryawang frameworks/core/components_ng/test/pattern/time_picker/ @cheng-feiwang diff --git a/frameworks/core/components_ng/event/drag_event.cpp b/frameworks/core/components_ng/event/drag_event.cpp index 5e13a677addeb06dd81172b4581c9f38d45f1988..581e70d956fd05d66db81658921d36c182c8ce87 100644 --- a/frameworks/core/components_ng/event/drag_event.cpp +++ b/frameworks/core/components_ng/event/drag_event.cpp @@ -147,19 +147,23 @@ void DragEventActuator::OnCollectTouchTarget(const OffsetF& coordinateOffset, co if (info.GetSourceDevice() != SourceType::MOUSE) { if (gestureHub->GetTextDraggable()) { if (gestureHub->GetIsTextDraggable()) { - HideTextAnimation(true, info.GetGlobalLocation().GetX(), info.GetGlobalLocation().GetY()); + SetTextPixelMap(gestureHub); } } else if (!isNotInPreviewState_) { - HideEventColumn(); - HidePixelMap(true, info.GetGlobalLocation().GetX(), info.GetGlobalLocation().GetY()); - HideFilter(); - SubwindowManager::GetInstance()->HideMenuNG(false, true); - AnimationOption option; - option.SetDuration(PIXELMAP_ANIMATION_DURATION); - option.SetCurve(Curves::SHARP); - AnimationUtils::Animate( - option, [renderContext]() { renderContext->UpdateOpacity(SCALE_NUMBER); }, - option.GetOnFinishEvent()); + if (gestureHub->GetIsTextDraggable()) { + HideTextAnimation(true, info.GetGlobalLocation().GetX(), info.GetGlobalLocation().GetY()); + } else { + HideEventColumn(); + HidePixelMap(true, info.GetGlobalLocation().GetX(), info.GetGlobalLocation().GetY()); + HideFilter(); + SubwindowManager::GetInstance()->HideMenuNG(false, true); + AnimationOption option; + option.SetDuration(PIXELMAP_ANIMATION_DURATION); + option.SetCurve(Curves::SHARP); + AnimationUtils::Animate( + option, [renderContext]() { renderContext->UpdateOpacity(SCALE_NUMBER); }, + option.GetOnFinishEvent()); + } } } @@ -697,57 +701,22 @@ void DragEventActuator::SetThumbnailCallback(std::function&& callb longPressRecognizer_->SetThumbnailCallback(std::move(callback)); } -void DragEventActuator::GetTextPixelMap(bool startDrag) +void DragEventActuator::SetTextPixelMap(const RefPtr& gestureHub) { - if (SystemProperties::GetDebugEnabled()) { - LOGI("DragEvent start getTextPixelMap."); - } - auto gestureHub = gestureEventHub_.Upgrade(); - CHECK_NULL_VOID(gestureHub); - bool isAllowedDrag = IsAllowedDrag(); - if (!gestureHub->GetTextDraggable() || !isAllowedDrag) { - if (SystemProperties::GetDebugEnabled()) { - LOGW("Text is not draggable, stop get text pixelMap."); - } - return; - } auto frameNode = gestureHub->GetFrameNode(); CHECK_NULL_VOID(frameNode); auto pattern = frameNode->GetPattern(); CHECK_NULL_VOID(pattern); - auto pixelMap = gestureHub->GetPixelMap(); - CHECK_NULL_VOID(pixelMap); - auto pipeline = PipelineContext::GetCurrentContext(); - CHECK_NULL_VOID(pipeline); - auto manager = pipeline->GetOverlayManager(); - CHECK_NULL_VOID(manager); - manager->RemovePixelMap(); - auto dragDropManager = pipeline->GetDragDropManager(); - CHECK_NULL_VOID(dragDropManager); - if (!dragDropManager->IsDragged()) { - if (SystemProperties::GetDebugEnabled()) { - LOGW("DragDropManger is not dragged, stop get text pixelMap."); - } - return; - } - std::shared_ptr mediaPixelMap = pixelMap->GetPixelMapSharedPtr(); - float scale = gestureHub->GetPixelMapScale(mediaPixelMap->GetHeight(), mediaPixelMap->GetWidth()); - mediaPixelMap->scale(scale, scale); - int32_t width = mediaPixelMap->GetWidth(); - int32_t height = mediaPixelMap->GetHeight(); - ShadowInfoCore shadowInfo { mediaPixelMap, width * PIXELMAP_WIDTH_RATE, - height * PIXELMAP_HEIGHT_RATE }; - int ret = InteractionInterface::GetInstance()->UpdateShadowPic(shadowInfo); - if (ret != 0) { - LOGE("InteractionInterface: UpdateShadowPic error"); - return; - } - if (SystemProperties::GetDebugEnabled()) { - LOGI("In function getTextPixelMap, set DragWindowVisible true."); + + auto dragNode = pattern->MoveDragNode(); + pattern->CloseSelectOverlay(); + CHECK_NULL_VOID(dragNode); + auto pixelMap = dragNode->GetRenderContext()->GetThumbnailPixelMap(); + if (pixelMap) { + gestureHub->SetPixelMap(pixelMap); + } else { + gestureHub->SetPixelMap(nullptr); } - InteractionInterface::GetInstance()->SetDragWindowVisible(true); - dragDropManager->SetIsDragWindowShow(true); - gestureHub->SetPixelMap(nullptr); } void DragEventActuator::SetTextAnimation(const RefPtr& gestureHub, const Offset& globalLocation) @@ -773,13 +742,9 @@ void DragEventActuator::SetTextAnimation(const RefPtr& gestureH } return; } - pattern->CloseSelectOverlay(); - pattern->CloseKeyboard(true); + pattern->CloseHandleAndSelect(); auto dragNode = pattern->MoveDragNode(); CHECK_NULL_VOID(dragNode); - auto pixelMap = dragNode->GetRenderContext()->GetThumbnailPixelMap(); - CHECK_NULL_VOID(pixelMap); - gestureHub->SetPixelMap(pixelMap); // create columnNode auto columnNode = FrameNode::CreateFrameNode(V2::COLUMN_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr(true)); diff --git a/frameworks/core/components_ng/event/drag_event.h b/frameworks/core/components_ng/event/drag_event.h index 9d7eb64c057283ac25f661602b640c0b8b29e837..a16a8ede494868bccceb7d9b96537244d009d8d7 100644 --- a/frameworks/core/components_ng/event/drag_event.h +++ b/frameworks/core/components_ng/event/drag_event.h @@ -131,7 +131,7 @@ public: void HideTextAnimation(bool startDrag = false, double globalX = 0, double globalY = 0); bool GetIsBindOverlayValue(const RefPtr& actuator); bool IsAllowedDrag(); - void GetTextPixelMap(bool startDrag); + void SetTextPixelMap(const RefPtr& gestureHub); OffsetF GetFloatImageOffset(const RefPtr& frameNode); #endif // ENABLE_DRAG_FRAMEWORK PanDirection GetDirection() const diff --git a/frameworks/core/components_ng/event/gesture_event_hub.cpp b/frameworks/core/components_ng/event/gesture_event_hub.cpp index 9fb37e9826afa1596bca7f6e7930a94200e2559c..e83ddcb56f0cbb9eca15cf28ecfa03f43850c7bf 100644 --- a/frameworks/core/components_ng/event/gesture_event_hub.cpp +++ b/frameworks/core/components_ng/event/gesture_event_hub.cpp @@ -892,7 +892,6 @@ void GestureEventHub::HandleOnDragEnd(const GestureEvent& info) eventHub->HandleInternalOnDrop(event, ""); } } - CHECK_NULL_VOID(dragDropProxy_); dragDropProxy_->DestroyDragWindow(); dragDropProxy_ = nullptr; diff --git a/frameworks/core/components_ng/pattern/text/text_pattern.h b/frameworks/core/components_ng/pattern/text/text_pattern.h index df231d93490b1c73a4b03af8409708f5dd493772..f0d0c8abb1d8435d8498f2f89502223628123d94 100644 --- a/frameworks/core/components_ng/pattern/text/text_pattern.h +++ b/frameworks/core/components_ng/pattern/text/text_pattern.h @@ -177,9 +177,9 @@ public: OffsetF GetTextPaintOffset() const; - RefPtr MoveDragNode() override + const RefPtr& MoveDragNode() override { - return std::move(dragNode_); + return dragNode_; } ParagraphT GetDragParagraph() const override diff --git a/frameworks/core/components_ng/pattern/text_drag/text_drag_base.h b/frameworks/core/components_ng/pattern/text_drag/text_drag_base.h index ae06c7acd5b8683116c993e1fab4f9a31da68dd1..9298847aa3b8bd9ce01e598df6309bbb621cf627 100644 --- a/frameworks/core/components_ng/pattern/text_drag/text_drag_base.h +++ b/frameworks/core/components_ng/pattern/text_drag/text_drag_base.h @@ -44,11 +44,15 @@ public: virtual std::vector GetTextBoxes() = 0; virtual OffsetF GetParentGlobalOffset() const = 0; - virtual RefPtr MoveDragNode() = 0; + virtual const RefPtr& MoveDragNode() = 0; virtual ParagraphT GetDragParagraph() const = 0; virtual void CloseSelectOverlay() = 0; + virtual void CloseHandleAndSelect() + { + CloseSelectOverlay(); + } virtual void CreateHandles() {}; virtual bool CloseKeyboard(bool forceClose) = 0; virtual OffsetF GetDragUpperLeftCoordinates() = 0; diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.cpp b/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.cpp index 098caf562ec189ecfb5e0b5f6611f6b7cba018bf..2f9c1073f60781536794d41df0e01b7926f7102e 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.cpp +++ b/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.cpp @@ -31,6 +31,7 @@ TextFieldOverlayModifier::TextFieldOverlayModifier( cursorWidth_ = AceType::MakeRefPtr(static_cast(CURSOR_WIDTH.ConvertToPx())); selectedColor_ = AceType::MakeRefPtr(LinearColor(Color())); cursorVisible_ = AceType::MakeRefPtr(false); + showSelect_ = AceType::MakeRefPtr(false); contentSize_ = AceType::MakeRefPtr(SizeF()); contentOffset_ = AceType::MakeRefPtr(OffsetF()); auto textFieldPattern = DynamicCast(pattern_.Upgrade()); @@ -48,6 +49,7 @@ TextFieldOverlayModifier::TextFieldOverlayModifier( AttachProperty(cursorWidth_); AttachProperty(selectedColor_); AttachProperty(cursorVisible_); + AttachProperty(showSelect_); AttachProperty(contentSize_); AttachProperty(contentOffset_); AttachProperty(cursorOffset_); @@ -109,6 +111,9 @@ void TextFieldOverlayModifier::PaintUnderline(RSCanvas& canvas) const void TextFieldOverlayModifier::PaintSelection(DrawingContext& context) const { + if (!showSelect_->Get() && !needPaintSelect_) { + return; + } auto& canvas = context.canvas; canvas.Save(); auto textFieldPattern = DynamicCast(pattern_.Upgrade()); @@ -269,5 +274,11 @@ void TextFieldOverlayModifier::SetChangeSelectedRects(bool value) if (value) { changeSelectedRects_->Set(!changeSelectedRects_->Get()); } + needPaintSelect_ = value; +} + +void TextFieldOverlayModifier::SetShowSelect(bool value) +{ + showSelect_->Set(value); } } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.h b/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.h index 5b8a0b2d7b33cebdca16563965a7690bfd037454..1a178a343d67d0be97e7dbce23ea8e4a37107598 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.h +++ b/frameworks/core/components_ng/pattern/text_field/text_field_overlay_modifier.h @@ -57,6 +57,7 @@ public: void SetChangeSelectedRects(bool value); void SetFirstHandleOffset(const OffsetF& offset); void SetSecondHandleOffset(const OffsetF& offset); + void SetShowSelect(bool value); private: void PaintSelection(DrawingContext& context) const; @@ -64,6 +65,7 @@ private: void PaintEdgeEffect(const SizeF& frameSize, RSCanvas& canvas); void PaintScrollBar(DrawingContext& context); + bool needPaintSelect_ = false; WeakPtr pattern_; WeakPtr scrollBar_; WeakPtr edgeEffect_; @@ -72,6 +74,7 @@ private: RefPtr selectedColor_; RefPtr cursorOffset_; RefPtr cursorVisible_; + RefPtr showSelect_; RefPtr contentSize_; RefPtr contentOffset_; RefPtr firstHandleOffset_; diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_paint_method.cpp b/frameworks/core/components_ng/pattern/text_field/text_field_paint_method.cpp index 471dbe4977b44f7ee68aa8a96346dabb0b64f678..9401263a3b3a852b7ccf356b744549b90455f569 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_paint_method.cpp +++ b/frameworks/core/components_ng/pattern/text_field/text_field_paint_method.cpp @@ -164,6 +164,7 @@ void TextFieldPaintMethod::UpdateOverlayModifier(PaintWrapper* paintWrapper) } textFieldOverlayModifier_->SetUnderlineWidth(textFieldPattern->GetUnderlineWidth()); textFieldOverlayModifier_->SetUnderlineColor(textFieldPattern->GetUnderlineColor()); + textFieldOverlayModifier_->SetShowSelect(textFieldPattern->GetShowSelect()); auto frameNode = textFieldPattern->GetHost(); CHECK_NULL_VOID(frameNode); auto layoutProperty = frameNode->GetLayoutProperty(); diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp b/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp index 8f7662132edd60b55992cf13e0d97de2ebbe21ad..74399d16ff84689513e1ae1a14b1fc24b363d308 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp +++ b/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp @@ -1142,6 +1142,10 @@ std::function&, const std::strin CHECK_NULL_RETURN(host, itemInfo); auto layoutProperty = host->GetLayoutProperty(); CHECK_NULL_RETURN(layoutProperty, itemInfo); + if (pattern->SelectOverlayIsOn() || pattern->imeAttached_ || pattern->showSelect_) { + pattern->CloseHandleAndSelect(); + pattern->CloseKeyboard(true); + } pattern->dragStatus_ = DragStatus::DRAGGING; pattern->textFieldContentModifier_->ChangeDragStatus(); auto contentController = pattern->contentController_; @@ -1166,7 +1170,7 @@ std::function&, const std::strin std::function&, const std::string&)> TextFieldPattern::OnDragDrop() { - auto onDrop = [weakPtr = WeakClaim(this)]( + return [weakPtr = WeakClaim(this)]( const RefPtr& event, const std::string& extraParams) { auto pattern = weakPtr.Upgrade(); CHECK_NULL_VOID(pattern); @@ -1190,7 +1194,9 @@ std::function&, const std::string&)> Tex for (const auto& record : records) { str += record; } - pattern->needToRequestKeyboardInner_ = true; + if (pattern->dragStatus_ == DragStatus::NONE) { + pattern->needToRequestKeyboardInner_ = true; + } pattern->dragRecipientStatus_ = DragStatus::NONE; if (str.empty()) { return; @@ -1214,7 +1220,6 @@ std::function&, const std::string&)> Tex host->MarkDirtyNode(pattern->IsTextArea() ? PROPERTY_UPDATE_MEASURE : PROPERTY_UPDATE_MEASURE_SELF); } }; - return onDrop; } void TextFieldPattern::InitDragDropEvent() @@ -1872,6 +1877,7 @@ void TextFieldPattern::ShowSelectOverlay(const ShowSelectOverlayParams& showOver if (isTransparent_) { return; } + showSelect_ = true; auto hasDataCallback = [weak = WeakClaim(this), params = showOverlayParams](bool hasData) { LOGI("HasData callback from clipboard, data available ? %{public}d", hasData); auto pattern = weak.Upgrade(); @@ -4841,4 +4847,10 @@ int32_t TextFieldPattern::GetLineCount() const } return 0; } + +void TextFieldPattern::CloseHandleAndSelect() +{ + CloseSelectOverlay(true); + showSelect_ = false; +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_pattern.h b/frameworks/core/components_ng/pattern/text_field/text_field_pattern.h index 3db957cbfb329176d6b92b212d652a8fd0ec2d9c..04ba59b0c4f9cb686714cd3d729a538975c9f527 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_pattern.h +++ b/frameworks/core/components_ng/pattern/text_field/text_field_pattern.h @@ -672,9 +672,9 @@ public: return { dragParagraph_ }; } - RefPtr MoveDragNode() override + const RefPtr& MoveDragNode() override { - return std::move(dragNode_); + return dragNode_; } const std::vector& GetDragContents() const @@ -972,6 +972,11 @@ public: return responseArea_; } + bool GetShowSelect() const + { + return showSelect_; + } + private: void GetTextSelectRectsInRangeAndWillChange(); bool HasFocus() const; @@ -1084,6 +1089,7 @@ private: void UpdateErrorTextMargin(); OffsetF GetTextPaintOffset() const; void UpdateSelectController(); + void CloseHandleAndSelect() override; #if defined(ENABLE_STANDARD_INPUT) std::optional GetMiscTextConfig() const; #endif @@ -1226,6 +1232,7 @@ private: bool leftMouseCanMove_ = false; bool isSingleHandle_ = true; + bool showSelect_ = false; RefPtr contentController_; RefPtr selectController_; CaretStatus caretStatus_ = CaretStatus::NONE;