Merge pull request #72 from sadovsf/master
Fixed cursor positioning issues with new ImGui
diff --git a/TextEditor.cpp b/TextEditor.cpp
index 2093ce1..cddb6ca 100644
--- a/TextEditor.cpp
+++ b/TextEditor.cpp
@@ -266,7 +266,7 @@
{
cumulatedStringWidth[1] = cumulatedStringWidth[0];
cumulatedString += line[columnCoord].mChar;
- cumulatedStringWidth[0] = ImGui::CalcTextSize(cumulatedString.c_str()).x;
+ cumulatedStringWidth[0] = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, cumulatedString.c_str(), nullptr, nullptr).x;
columnWidth = (cumulatedStringWidth[0] - cumulatedStringWidth[1]);
columnCoord++;
}
@@ -615,7 +615,7 @@
void TextEditor::Render()
{
/* Compute mCharAdvance regarding to scaled font size (Ctrl + mouse wheel)*/
- const float fontSize = ImGui::CalcTextSize("#").x;
+ const float fontSize = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, "#", nullptr, nullptr).x;
mCharAdvance = ImVec2(fontSize, ImGui::GetTextLineHeightWithSpacing() * mLineSpacing);
/* Update palette with the current alpha from style */
@@ -650,12 +650,12 @@
// Deduce mTextStart by evaluating mLines size (global lineMax) plus two spaces as text width
char buf[16];
snprintf(buf, 16, " %d ", globalLineMax);
- mTextStart = ImGui::CalcTextSize(buf).x + mLeftMargin;
+ mTextStart = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, buf, nullptr, nullptr).x + mLeftMargin;
if (!mLines.empty())
{
auto fontScale = ImGui::GetFontSize() / ImGui::GetFont()->FontSize;
- float spaceSize = ImGui::CalcTextSize(" ").x + 1.0f * fontScale;
+ float spaceSize = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, " ", nullptr, nullptr).x;
while (lineNo <= lineMax)
{
@@ -720,7 +720,8 @@
// Draw line number (right aligned)
snprintf(buf, 16, "%d ", lineNo + 1);
- auto lineNoWidth = ImGui::CalcTextSize(buf).x;
+
+ auto lineNoWidth = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, buf, nullptr, nullptr).x;
drawList->AddText(ImVec2(lineStartScreenPos.x + mTextStart - lineNoWidth, lineStartScreenPos.y), mPalette[(int)PaletteIndex::LineNumber], buf);
// Highlight the current line (where the cursor is)
@@ -766,8 +767,8 @@
{
const ImVec2 newOffset(textScreenPos.x + bufferOffset.x, textScreenPos.y + bufferOffset.y);
drawList->AddText(newOffset, prevColor, buffer.c_str());
- auto textSize = ImGui::CalcTextSize(buffer.c_str());
- bufferOffset.x += textSize.x + 1.0f * fontScale;
+ auto textSize = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, buffer.c_str(), nullptr, nullptr);
+ bufferOffset.x += textSize.x;
buffer.clear();
}
prevColor = color;
@@ -1972,7 +1973,7 @@
auto& line = mLines[aFrom.mLine];
float distance = 0.0f;
auto fontScale = ImGui::GetFontSize() / ImGui::GetFont()->FontSize;
- float spaceSize = ImGui::CalcTextSize(" ").x + 1.0f * fontScale;
+ float spaceSize = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, " ", nullptr, nullptr).x;
for (size_t it = 0u; it < line.size() && it < (unsigned)aFrom.mColumn; ++it)
{
if (line[it].mChar == '\t')
@@ -1984,7 +1985,7 @@
char tempCString[2];
tempCString[0] = line[it].mChar;
tempCString[1] = '\0';
- distance += ImGui::CalcTextSize(tempCString).x + 1.0f * fontScale;
+ distance += ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, tempCString, nullptr, nullptr).x;
}
}