diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-28 01:54:37 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-28 01:54:37 +1000 |
commit | 326bc7266d38eb94d75e8f08d2b5733c3d051c2e (patch) | |
tree | 3664941a9a6cdb1d4f20477e93f14a2189501547 /source/windowing/StarTextBoxWidget.cpp | |
parent | cd497bbcf399bcfa17694725583cefd93bff65d9 (diff) |
Fix text box cursor offset with hidden text
Diffstat (limited to 'source/windowing/StarTextBoxWidget.cpp')
-rw-r--r-- | source/windowing/StarTextBoxWidget.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/source/windowing/StarTextBoxWidget.cpp b/source/windowing/StarTextBoxWidget.cpp index 0622d89..03d2ae9 100644 --- a/source/windowing/StarTextBoxWidget.cpp +++ b/source/windowing/StarTextBoxWidget.cpp @@ -102,14 +102,26 @@ int TextBoxWidget::getCursorOffset() { // horizontal only scale = 0.5; } else if (m_hAnchor == HorizontalAnchor::RightAnchor) { scale = -1.0; - return context()->stringInterfaceWidth(m_text) * scale - + context()->stringInterfaceWidth(m_text.substr(m_cursorOffset, m_text.size())); + if (m_textHidden) { + int width = context()->stringInterfaceWidth("*"); + size_t chars = m_text.size(); + return (width * chars) * scale + (width * (chars - m_cursorOffset)); + } else { + return context()->stringInterfaceWidth(m_text) * scale + + context()->stringInterfaceWidth(m_text.substr(m_cursorOffset, m_text.size())); + } } else { throw GuiException("Somehow, the value of m_hAnchor became bad"); } + if (m_textHidden) { + int width = context()->stringInterfaceWidth("*"); + size_t chars = m_text.size(); + return (int)std::ceil((width * chars) * scale - (width * (chars - m_cursorOffset))); + } else { return (int)std::ceil(context()->stringInterfaceWidth(m_text) * scale - - context()->stringInterfaceWidth(m_text.substr(m_cursorOffset, m_text.size()))); + - context()->stringInterfaceWidth(m_text.substr(m_cursorOffset, m_text.size()))); + } } void TextBoxWidget::update() { |