diff --git a/frameworks/bridge/declarative_frontend/style_string/js_span_object.cpp b/frameworks/bridge/declarative_frontend/style_string/js_span_object.cpp index 6495ed6ef1326984c0f49c676b419fc292b8c396..56f4810805612780b8073ec562593107acdfe5a7 100644 --- a/frameworks/bridge/declarative_frontend/style_string/js_span_object.cpp +++ b/frameworks/bridge/declarative_frontend/style_string/js_span_object.cpp @@ -15,6 +15,8 @@ #include "frameworks/bridge/declarative_frontend/style_string/js_span_object.h" +#include "core/components/text/text_theme.h" +#include "core/components/text_field/textfield_theme.h" #include "frameworks/bridge/common/utils/utils.h" #include "frameworks/bridge/declarative_frontend/engine/functions/js_function.h" #include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" @@ -58,6 +60,12 @@ RefPtr JSFontSpan::ParseJsFontSpan(const JSRef& obj) JSRef colorObj = JSRef::Cast(obj->GetProperty("fontColor")); if (!colorObj->IsNull() && JSViewAbstract::ParseJsColor(colorObj, color)) { font.fontColor = color; + } else { + auto context = PipelineBase::GetCurrentContextSafely(); + CHECK_NULL_RETURN(context, AceType::MakeRefPtr(font)); + auto theme = context->GetTheme(); + CHECK_NULL_RETURN(theme, AceType::MakeRefPtr(font)); + font.fontColor = theme->GetTextStyle().GetTextColor(); } return AceType::MakeRefPtr(font); } diff --git a/frameworks/core/components_ng/pattern/text/span/mutable_span_string.cpp b/frameworks/core/components_ng/pattern/text/span/mutable_span_string.cpp index fa098d63aa7b8837fe7309aeb6a6d9a0e91b1bd6..48b3cc91a9a7cfa972431e4d4689f24e0050b378 100644 --- a/frameworks/core/components_ng/pattern/text/span/mutable_span_string.cpp +++ b/frameworks/core/components_ng/pattern/text/span/mutable_span_string.cpp @@ -226,7 +226,7 @@ void MutableSpanString::ApplyReplaceStringToSpanBase(int32_t start, int32_t leng spans.insert(it, newSpan); continue; } - auto newEnd = (op == SpanStringOperation::REMOVE)? + auto newEnd = (op != SpanStringOperation::REMOVE)? std::max(intersection->second, spanEnd): start; if (intersection->first > spanStart) { (*it)->UpdateEndIndex(newEnd); diff --git a/frameworks/core/components_ng/pattern/text/text_pattern.cpp b/frameworks/core/components_ng/pattern/text/text_pattern.cpp index 162d4e49b0c112b5d9ac19f0113c43804dca68c8..bc3ea57fb6fcb9b20cd78a33bad2280ce717fd4f 100644 --- a/frameworks/core/components_ng/pattern/text/text_pattern.cpp +++ b/frameworks/core/components_ng/pattern/text/text_pattern.cpp @@ -1507,7 +1507,7 @@ void TextPattern::InitDragEvent() CHECK_NULL_RETURN(pattern, itemInfo); auto eventHub = pattern->GetEventHub(); CHECK_NULL_RETURN(eventHub, itemInfo); - if (pattern->spans_.empty()) { + if (pattern->spans_.empty() || pattern->isSpanStringMode_) { return pattern->OnDragStartNoChild(event, extraParams); } else { return pattern->OnDragStart(event, extraParams); @@ -2034,6 +2034,10 @@ bool TextPattern::OnDirtyLayoutWrapperSwap(const RefPtr& dirty, c baselineOffset_ = textLayoutAlgorithm->GetBaselineOffset(); contentOffset_ = dirty->GetGeometryNode()->GetContentOffset(); textStyle_ = textLayoutAlgorithm->GetTextStyle(); + if (textSelector_.IsValid() && !isMousePressed_) { + CalculateHandleOffsetAndShowOverlay(); + ShowSelectOverlay(textSelector_.firstHandle, textSelector_.secondHandle, true); + } return true; } @@ -2127,12 +2131,18 @@ void TextPattern::BeforeCreateLayoutWrapper() } else { auto host = GetHost(); CHECK_NULL_VOID(host); - for (const auto& child : host->GetChildren()) { - host->RemoveChild(child); - } + textForDisplay_.clear(); + host->Clean(); for (const auto& span : spans_) { textForDisplay_ += span->content; } + if (dataDetectorAdapter_->textForAI_ != textForDisplay_) { + dataDetectorAdapter_->textForAI_ = textForDisplay_; + dataDetectorAdapter_->aiDetectInitialized_ = false; + } + if (CanStartAITask() && !dataDetectorAdapter_->aiDetectInitialized_) { + dataDetectorAdapter_->StartAITask(); + } // mark content dirty if (contentMod_) { contentMod_->ContentChange(); @@ -2884,7 +2894,6 @@ void TextPattern::UpdateSpanItems(const std::list>& spanItems) spans_ = spanItems; auto host = GetHost(); CHECK_NULL_VOID(host); - CloseSelectOverlay(); host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); } } // namespace OHOS::Ace::NG