diff options
Diffstat (limited to 'src/Text.cpp')
-rw-r--r-- | src/Text.cpp | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/src/Text.cpp b/src/Text.cpp index 23dfb5b..3790c85 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -129,6 +129,21 @@ namespace QuickMedia { return characterSize; } + + void Text::replace(size_t start_index, size_t length, const sf::String &insert_str) { + int string_diff = (int)insert_str.getSize() - (int)length; + str.replace(start_index, length, insert_str); + dirty = true; + dirtyText = true; + if(caretIndex >= (int)start_index) { + caretIndex += string_diff; + dirtyCaret = true; + } + } + + int Text::getCaretIndex() const { + return caretIndex; + } void Text::setFillColor(sf::Color color) { @@ -800,17 +815,21 @@ namespace QuickMedia } else if(event.key.code == sf::Keyboard::BackSpace && caretIndex > 0) { - auto strBefore = str.substring(0, caretIndex - 1); - auto strAfter = str.substring(caretIndex); + str.erase(caretIndex - 1, 1); --caretIndex; - setString(strBefore + strAfter); + dirty = true; + dirtyText = true; dirtyCaret = true; } else if(event.key.code == sf::Keyboard::Delete && !caretAtEnd) { - auto strBefore = str.substring(0, caretIndex); - auto strAfter = str.substring(caretIndex + 1); - setString(strBefore + strAfter); + str.erase(caretIndex, 1); + dirty = true; + dirtyText = true; + } + else if(event.key.code == sf::Keyboard::D && event.key.control) + { + setString(""); } else if(event.key.code == sf::Keyboard::Up) { @@ -835,11 +854,7 @@ namespace QuickMedia if(caretAtEnd) str += '\n'; else - { - auto strBefore = str.substring(0, caretIndex); - auto strAfter = str.substring(caretIndex); - str = strBefore + '\n' + strAfter; - } + str.insert(caretIndex, '\n'); ++caretIndex; dirty = true; @@ -858,7 +873,7 @@ namespace QuickMedia { stringToAdd = sf::Clipboard::getString(); } - else if(event.text.unicode >= 32 || (event.text.unicode == 9 && !single_line_edit)) // 9 == tab + else if(event.text.unicode >= 32 || (event.text.unicode == '\t' && !single_line_edit)) stringToAdd = event.text.unicode; else return; @@ -866,11 +881,7 @@ namespace QuickMedia if(caretAtEnd) str += stringToAdd; else - { - auto strBefore = str.substring(0, caretIndex); - auto strAfter = str.substring(caretIndex); - str = strBefore + stringToAdd + strAfter; - } + str.insert(caretIndex, stringToAdd); caretIndex += stringToAdd.getSize(); dirty = true; |