From 5a410095fe0e98cd5f56578cc2000894d0a3b446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Tue, 4 Oct 2016 12:15:47 +0200 Subject: [PATCH] [escher] optimize the redraw of text fields Change-Id: Ia777cd9a4668e7bf582c3f76cd4cca30e5e900a5 --- escher/src/text_field.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index 7b80c2f66..092ff740a 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -26,18 +26,24 @@ const char * TextField::className() const { bool TextField::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::Event::DELETE && m_currentTextLength > 0) { + KDSize sizePreviousText = KDText::stringSize(m_textBuffer); m_currentTextLength--; m_textBuffer[m_currentTextLength] = 0; - markRectAsDirty(bounds()); //TODO: Could be optimized + KDSize sizeText = KDText::stringSize(m_textBuffer); + KDRect dirtyZone(sizeText.width(), 0, sizePreviousText.width()-sizeText.width(), sizeText.height()); + markRectAsDirty(dirtyZone); return true; } if ((int)event >= 0x100) { return false; } if (m_currentTextLength == 0 || m_currentTextLength-1 < m_textBufferSize) { + KDSize sizePreviousText = KDText::stringSize(m_textBuffer); m_textBuffer[m_currentTextLength++] = (int)event; m_textBuffer[m_currentTextLength] = 0; - markRectAsDirty(bounds()); //TODO: Could be optimized + KDSize sizeText = KDText::stringSize(m_textBuffer); + KDRect dirtyZone(sizePreviousText.width(), 0, sizeText.width()-sizePreviousText.width(), sizeText.height()); + markRectAsDirty(dirtyZone); } return true; }