From a766ec51ae7e6741f61278cba312fc71d0f177c2 Mon Sep 17 00:00:00 2001 From: chrox Date: Mon, 3 Nov 2014 11:25:16 +0800 Subject: [PATCH] only update neccessary screen regions when typing with virtual keyboard --- frontend/ui/widget/virtualkeyboard.lua | 33 +++++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/frontend/ui/widget/virtualkeyboard.lua b/frontend/ui/widget/virtualkeyboard.lua index 1dd73b90c..0de815cd3 100644 --- a/frontend/ui/widget/virtualkeyboard.lua +++ b/frontend/ui/widget/virtualkeyboard.lua @@ -95,27 +95,47 @@ function VirtualKey:init() end end +function VirtualKey:update_keyboard() + UIManager.update_regions_func = function() + DEBUG("update key region", self[1].dimen) + return {self[1].dimen} + end + UIManager:setDirty(self.keyboard, "partial") +end + +function VirtualKey:update_keyboard_inputbox() + local inputbox = self.keyboard.inputbox + UIManager.update_regions_func = function() + DEBUG("update keyboard and inputbox", self[1].dimen, inputbox.dimen) + return {self[1].dimen, inputbox.dimen} + end + UIManager:setDirty(inputbox, "partial") + UIManager:setDirty(self.keyboard, "partial") +end + function VirtualKey:onTapSelect() self[1].invert = true + self:update_keyboard_inputbox() if self.callback then self.callback() end - UIManager:scheduleIn(0.02, function() self:invert(false) end) + UIManager:scheduleIn(0.2, function() self:invert(false) end) return true end function VirtualKey:onHoldSelect() self[1].invert = true + self:update_keyboard_inputbox() if self.hold_callback then self.hold_callback() end - UIManager:scheduleIn(0.5, function() self:invert(false) end) + UIManager:scheduleIn(0.2, function() self:invert(false) end) return true end function VirtualKey:invert(invert) self[1].invert = invert - UIManager:setDirty(self.keyboard, "partial") + self:update_keyboard() end local VirtualKeyboard = InputContainer:new{ @@ -298,28 +318,23 @@ function VirtualKeyboard:setLayout(key) if self.utf8mode then self.umlautmode = false end end self:initLayout() + UIManager.update_regions_func = nil UIManager:setDirty(self, "partial") end function VirtualKeyboard:addChar(key) DEBUG("add char", key) self.inputbox:addChar(key) - UIManager:setDirty(self, "partial") - UIManager:setDirty(self.inputbox, "partial") end function VirtualKeyboard:delChar() DEBUG("delete char") self.inputbox:delChar() - UIManager:setDirty(self, "partial") - UIManager:setDirty(self.inputbox, "partial") end function VirtualKeyboard:clear() DEBUG("clear input") self.inputbox:clear() - UIManager:setDirty(self, "partial") - UIManager:setDirty(self.inputbox, "partial") end return VirtualKeyboard