From e27323d5c621497d0fca0946e0edef3853ba438b Mon Sep 17 00:00:00 2001 From: xqq879988 Date: Tue, 18 Jun 2024 09:32:16 +0800 Subject: [PATCH] =?UTF-8?q?richEditor=20=E5=BF=AB=E6=8D=B7=E9=94=AEBug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xqq879988 --- .../rich_editor/rich_editor_pattern.cpp | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 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 c1e5fad7786..89512ec1b35 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 @@ -8814,16 +8814,28 @@ float RichEditorPattern::GetTextThemeFontSize() int32_t RichEditorPattern::CalcLineEndPosition() { + float caretHeightUp = 0.0f; float caretHeightDown = 0.0f; - - OffsetF CaretOffsetDown = CalcCursorOffsetByPosition(caretPosition_, caretHeightDown, true, false); - auto textPaintOffset = GetTextContentRect().GetOffset() - OffsetF(0.0, std::min(baselineOffset_, 0.0f)); + float caretHeightLine = 0.0f; + int32_t realCaretOffsetY = 0; + int32_t realLastClickOffsetY = 0; + OffsetF caretOffsetUp = CalcCursorOffsetByPosition(caretPosition_, caretHeightUp, false, false); + OffsetF caretOffsetDown = CalcCursorOffsetByPosition(caretPosition_, caretHeightDown, true, false); + OffsetF caretOffsetLine = CalcCursorOffsetByPosition(caretPosition_, caretHeightLine); + if (NearEqual(richTextRect_.GetY(), contentRect_.GetY())) { + realLastClickOffsetY = lastClickOffset_.GetY(); + realCaretOffsetY = caretOffsetDown.GetY(); + } else { + auto scrollOffset = caretOffsetDown.GetY() - caretOffsetUp.GetY() + caretOffsetLine.GetY(); + realLastClickOffsetY = lastClickOffset_.GetY() + std::abs(richTextRect_.GetY()) + contentRect_.GetY(); + realCaretOffsetY = scrollOffset + std::abs(richTextRect_.GetY()) + contentRect_.GetY(); + } auto minDet = paragraphs_.minParagraphFontSize.value_or(GetTextThemeFontSize()); Offset textOffset; - float textWidth = GetTextRect().Width(); - float textPaintOffsetY = textPaintOffset.GetY() - minDet / 2.0; - float textOffsetClickY = lastClickOffset_.GetY() - textPaintOffsetY; - float textOffsetDownY = CaretOffsetDown.GetY() - textPaintOffsetY; + float textWidth = richTextRect_.Width(); + float textPaintOffsetY = contentRect_.GetY() - std::min(baselineOffset_, 0.0f) - minDet / 2.0; + float textOffsetClickY = realLastClickOffsetY - textPaintOffsetY; + float textOffsetDownY = realCaretOffsetY - textPaintOffsetY; if (lastClickOffset_.NonNegative()) { textOffset = { textWidth, textOffsetClickY }; } else { -- Gitee