diff --git a/src/apps/haiku-depot/textview/TextDocumentLayout.cpp b/src/apps/haiku-depot/textview/TextDocumentLayout.cpp index 940048ce02..d977cd2320 100644 --- a/src/apps/haiku-depot/textview/TextDocumentLayout.cpp +++ b/src/apps/haiku-depot/textview/TextDocumentLayout.cpp @@ -144,6 +144,29 @@ TextDocumentLayout::GetTextBounds(int32 textOffset, float& x1, float& y1, } +int32 +TextDocumentLayout::TextOffsetAt(float x, float y, bool& rightOfCenter) +{ + _ValidateLayout(); + + int32 textOffset = 0; + rightOfCenter = false; + + int32 paragraphs = fParagraphLayouts.CountItems(); + for (int32 i = 0; i < paragraphs; i++) { + const ParagraphLayoutInfo& info = fParagraphLayouts.ItemAtFast(i); + if (y > info.y + info.layout->Height()) { + textOffset += info.layout->CountGlyphs(); + continue; + } + + textOffset += info.layout->TextOffsetAt(x, y - info.y, rightOfCenter); + break; + } + + return textOffset; +} + // #pragma mark - private diff --git a/src/apps/haiku-depot/textview/TextDocumentLayout.h b/src/apps/haiku-depot/textview/TextDocumentLayout.h index dda4d373d6..676b10ca46 100644 --- a/src/apps/haiku-depot/textview/TextDocumentLayout.h +++ b/src/apps/haiku-depot/textview/TextDocumentLayout.h @@ -92,6 +92,9 @@ public: float& x1, float& y1, float& x2, float& y2); + int32 TextOffsetAt(float x, float y, + bool& rightOfCenter); + private: void _Init(); void _ValidateLayout();