Files
Upsilon/escher/src/text_field.cpp
Romain Goyet c2781748fd [Escher] Remove C++ init order warnings
Change-Id: I0c14c8f9c5d702e0ace6229b48ff6e117e2b6937
2016-09-15 20:39:26 +02:00

41 lines
962 B
C++

#include <escher/text_field.h>
TextField::TextField(Responder * parentResponder, char * textBuffer, size_t textBufferSize) :
ChildlessView(),
Responder(parentResponder),
m_textBuffer(textBuffer),
m_textBufferSize(textBufferSize),
m_currentTextLength(0)
{
}
/* View */
void TextField::drawRect(KDContext * ctx, KDRect rect) const {
m_textBuffer[m_currentTextLength] = 0;
ctx->drawString(m_textBuffer, KDPointZero);
}
#if ESCHER_VIEW_LOGGING
const char * TextField::className() const {
return "TextField";
}
#endif
/* Responder */
bool TextField::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::Event::DELETE && m_currentTextLength > 0) {
m_currentTextLength--;
return true;
}
if ((int)event >= 0x100) {
return false;
}
if (m_currentTextLength-1 < m_textBufferSize) {
m_textBuffer[m_currentTextLength++] = (int)event;
markRectAsDirty(bounds()); // TODO: Could be optimized
}
return true;
}