From 1c1c2c2a8ce3a6258bc810f39f824b7db9a02349 Mon Sep 17 00:00:00 2001 From: Marcel Smit Date: Wed, 9 Oct 2019 16:08:55 +0200 Subject: [PATCH] Fix for inability to click/go to the last column of a line, due to delta not being added when at the end of a line. Make sure to increment columnCoord with delta, before bailing of the while/for loop. + Comment a printf. --- TextEditor.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/TextEditor.cpp b/TextEditor.cpp index 8d16d619..379541f1 100644 --- a/TextEditor.cpp +++ b/TextEditor.cpp @@ -336,16 +336,14 @@ TextEditor::Coordinates TextEditor::ScreenPosToCoordinates(const ImVec2& aPositi { auto& line = mLines.at(lineNo); - int columnIndex = 0; - std::string cumulatedString = ""; - float columnWidth = 0.0f; float columnX = 0.0f; - int delta = 0; - + // First we find the hovered column coord. - while (mTextStart + columnX - (aInsertionMode ? 0.5f : 0.0f) * columnWidth < local.x && (size_t)columnIndex < line.size()) + for (size_t columnIndex = 0; columnIndex < line.size(); ++columnIndex) { - columnCoord += delta; + float columnWidth = 0.0f; + int delta = 0; + if (line[columnIndex].mChar == '\t') { float oldX = columnX; @@ -365,7 +363,11 @@ TextEditor::Coordinates TextEditor::ScreenPosToCoordinates(const ImVec2& aPositi columnX += columnWidth; delta = 1; } - ++columnIndex; + + if (mTextStart + columnX - (aInsertionMode ? 0.5f : 0.0f) * columnWidth < local.x) + columnCoord += delta; + else + break; } // Then we reduce by 1 column coord if cursor is on the left side of the hovered column. @@ -1122,7 +1124,7 @@ void TextEditor::Render() if (local.x >= mTextStart) { auto pos = ScreenPosToCoordinates(mpos); - printf("Coord(%d, %d)\n", pos.mLine, pos.mColumn); + //printf("Coord(%d, %d)\n", pos.mLine, pos.mColumn); auto id = GetWordAt(pos); if (!id.empty()) {