From c2e3fd553e78d828381c6f21adda93372c525fba Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Mon, 10 Nov 2025 17:32:47 +0300 Subject: [PATCH] Text cursor position is more accurate when paragraph is empty --- src/RichText/TextBox.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/RichText/TextBox.cpp b/src/RichText/TextBox.cpp index 4e14f76..20fe3d8 100644 --- a/src/RichText/TextBox.cpp +++ b/src/RichText/TextBox.cpp @@ -829,8 +829,16 @@ SkRect TextBox::get_cursor_rect(TextPosition pos) { const ParagraphData& pData = paragraphs[pos.fParagraphIndex]; if(pData.text.empty()) { - bool isAlignLeft = (pData.pStyleData.textAlignment == skia::textlayout::TextAlign::kLeft) || (pData.pStyleData.textAlignment == skia::textlayout::TextAlign::kJustify && pData.pStyleData.textDirection == skia::textlayout::TextDirection::kLtr); - topPoint = {isAlignLeft ? 0.0f : pData.p->getMaxWidth(), pData.heightOffset}; + // Left aligned + if((pData.pStyleData.textAlignment == skia::textlayout::TextAlign::kLeft) || (pData.pStyleData.textAlignment == skia::textlayout::TextAlign::kJustify && pData.pStyleData.textDirection == skia::textlayout::TextDirection::kLtr)) + topPoint.fX = 0.0f; + // Right aligned + else if((pData.pStyleData.textAlignment == skia::textlayout::TextAlign::kRight) || (pData.pStyleData.textAlignment == skia::textlayout::TextAlign::kJustify && pData.pStyleData.textDirection == skia::textlayout::TextDirection::kRtl)) + topPoint.fX = pData.p->getMaxWidth(); + // Centered + else + topPoint.fX = pData.p->getMaxWidth() * 0.5f; + topPoint.fY = pData.heightOffset; height = pData.p->getHeight(); } else {