diff --git a/escher/include/escher/text_area.h b/escher/include/escher/text_area.h index 9b9386080..5a82295f8 100644 --- a/escher/include/escher/text_area.h +++ b/escher/include/escher/text_area.h @@ -1,6 +1,7 @@ #ifndef ESCHER_TEXT_AREA_H #define ESCHER_TEXT_AREA_H +#include #include #include #include @@ -61,7 +62,10 @@ private: void insertChar(char c, size_t index); char removeChar(size_t index); - size_t bufferLength() const; + char operator[](int index) { + assert(index >= 0 && index < m_bufferSize); + return m_buffer[index]; + } private: char * m_buffer; size_t m_bufferSize; diff --git a/escher/src/text_area.cpp b/escher/src/text_area.cpp index 763d11f27..20be36936 100644 --- a/escher/src/text_area.cpp +++ b/escher/src/text_area.cpp @@ -109,11 +109,6 @@ TextArea::Text::Position TextArea::Text::span() const { return Position(width, height); } -size_t TextArea::Text::bufferLength() const { - return strlen(m_buffer); -} - - /* TextArea::ContentView */ TextArea::ContentView::ContentView(char * textBuffer, size_t textBufferSize, KDText::FontSize fontSize, KDColor textColor, KDColor backgroundColor) : @@ -226,10 +221,13 @@ void TextArea::TextArea::ContentView::moveCursorGeo(int deltaX, int deltaY) { } void TextArea::TextArea::ContentView::moveCursorIndex(int deltaX) { - if ((deltaX < 0 && m_cursorIndex <= 0) || (deltaX > 0 && m_cursorIndex >= m_text.bufferLength())) { - return; + assert(deltaX == -1 || deltaX == 1); + if (deltaX == -1 && m_cursorIndex>0) { + m_cursorIndex--; + } + if (deltaX == 1 && m_text[m_cursorIndex] != 0) { + m_cursorIndex++; } - m_cursorIndex += deltaX; layoutSubviews(); }