From 07de799237acfde3f44f91c260cff2761647a773 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 23 Jul 2013 14:51:38 +0800 Subject: [PATCH 1/7] set fast refresh mode in setDirty method --- frontend/ui/reader/readerpaging.lua | 7 ++---- frontend/ui/uimanager.lua | 37 ++++++++++++++++------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/frontend/ui/reader/readerpaging.lua b/frontend/ui/reader/readerpaging.lua index 2434a28ea..3266c3fc8 100644 --- a/frontend/ui/reader/readerpaging.lua +++ b/frontend/ui/reader/readerpaging.lua @@ -108,7 +108,7 @@ function ReaderPaging:initGesListener() w = Screen:getWidth(), h = Screen:getHeight(), }, - rate = 5.0, + rate = 4.0, } }, PanRelease = { @@ -246,7 +246,6 @@ function ReaderPaging:onPanRelease(arg, ges) self:updateFlippingPage(self.current_page) else UIManager.full_refresh = true - UIManager:setDirty(self.view.dialog) end end @@ -520,9 +519,7 @@ function ReaderPaging:onScrollPanRel(diff) -- update current pageno to the very last part in current view self:gotoPage(self.view.page_states[#self.view.page_states].page, "scrolling") - UIManager.waveform_mode = WAVEFORM_MODE_A2 - UIManager.patial_refresh = true - UIManager:setDirty(self.view.dialog, "partial") + UIManager:setDirty(self.view.dialog, "fast") end function ReaderPaging:onScrollPageRel(diff) diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index 88871619b..945be4fd7 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -24,10 +24,11 @@ WAVEFORM_MODE_AUTO = 0x101 UIManager = { -- change this to set refresh type for next refresh -- defaults to 1 initially and will be set to 1 after each refresh - refresh_type = 1, + default_refresh_type = 1, -- change this to set refresh waveform for next refresh -- default to WAVEFORM_MODE_GC16 - waveform_mode = WAVEFORM_MODE_GC16, + default_waveform_mode = WAVEFORM_MODE_GC16, + fast_waveform_mode = WAVEFORM_MODE_A2, -- force to repaint all the widget is stack, will be reset to false -- after each ui loop repaint_all = false, @@ -189,6 +190,7 @@ function UIManager:run() local request_full_refresh = false local force_full_refresh = false local force_patial_refresh = false + local force_fast_refresh = false for _, widget in ipairs(self._window_stack) do if self.repaint_all or self._dirty[widget.widget] then widget.widget:paintTo(Screen.bb, widget.x, widget.y) @@ -201,51 +203,54 @@ function UIManager:run() if self._dirty[widget.widget] == "patial" then force_patial_refresh = true end + if self._dirty[widget.widget] == "fast" then + force_fast_refresh = true + end -- and remove from list after painting self._dirty[widget.widget] = nil -- trigger repaint dirty = true end end - + if self.full_refresh then dirty = true force_full_refresh = true end - + if self.patial_refresh then dirty = true force_patial_refresh = true end - + self.repaint_all = false self.full_refresh = false self.patial_refresh = false - + + local refresh_type = self.default_refresh_type + local waveform_mode = self.default_waveform_mode if dirty then - if force_patial_refresh then - self.refresh_type = 1 + if force_patial_refresh or force_fast_refresh then + refresh_type = 1 elseif force_full_refresh or self.refresh_count == self.FULL_REFRESH_COUNT - 1 then - self.refresh_type = 0 - else - self.refresh_type = 1 + refresh_type = 0 + end + if force_fast_refresh then + self.waveform_mode = self.fast_waveform_mode end - --self.waveform_mode = self.fast_refresh and WAVEFORM_MODE_A2 or WAVEFORM_MODE_GC16 if self.update_region_func then local update_region = self.update_region_func() - Screen:refresh(self.refresh_type, self.waveform_mode, + Screen:refresh(refresh_type, waveform_mode, update_region.x, update_region.y, update_region.w, update_region.h) else - Screen:refresh(self.refresh_type, self.waveform_mode) + Screen:refresh(refresh_type, waveform_mode) end if self.refresh_type == 0 then self.refresh_count = 0 elseif not force_patial_refresh and not force_full_refresh then self.refresh_count = (self.refresh_count + 1)%self.FULL_REFRESH_COUNT end - -- reset waveform_mode to WAVEFORM_MODE_GC16 - self.waveform_mode = WAVEFORM_MODE_GC16 self.update_region_func = nil end From 467e7bf4fc9aa99ed601e655c4a9494c36ce8523 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 23 Jul 2013 14:52:15 +0800 Subject: [PATCH 2/7] UI tweaks on dictionary window --- frontend/ui/widget/buttontable.lua | 6 ++++-- frontend/ui/widget/dict.lua | 9 ++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/frontend/ui/widget/buttontable.lua b/frontend/ui/widget/buttontable.lua index a24117a95..aa32e4f95 100644 --- a/frontend/ui/widget/buttontable.lua +++ b/frontend/ui/widget/buttontable.lua @@ -13,6 +13,8 @@ ButtonTable = VerticalGroup:new{ padding = scaleByDPI(2), zero_sep = false, + button_font_face = "cfont", + button_font_size = 20, } function ButtonTable:init() @@ -33,8 +35,8 @@ function ButtonTable:init() bordersize = 0, margin = 0, padding = 0, - text_font_face = "cfont", - text_font_size = 18, + text_font_face = self.button_font_face, + text_font_size = self.button_font_size, } local button_dim = button:getSize() local vertical_sep = LineWidget:new{ diff --git a/frontend/ui/widget/dict.lua b/frontend/ui/widget/dict.lua index c2b4ec869..c0cce51a4 100644 --- a/frontend/ui/widget/dict.lua +++ b/frontend/ui/widget/dict.lua @@ -10,9 +10,9 @@ DictQuickLookup = InputContainer:new{ dictionary = nil, definition = nil, dict_index = 1, - title_face = Font:getFace("tfont", 20), - word_face = Font:getFace("tfont", 18), - content_face = Font:getFace("cfont", 18), + title_face = Font:getFace("tfont", 22), + word_face = Font:getFace("tfont", 20), + content_face = Font:getFace("cfont", 20), width = nil, title_padding = scaleByDPI(5), @@ -81,6 +81,8 @@ function DictQuickLookup:update() } local button_table = ButtonTable:new{ width = math.max(self.width, definition:getSize().w), + button_font_face = "cfont", + button_font_size = 20, buttons = { { { @@ -155,6 +157,7 @@ function DictQuickLookup:update() self.dict_frame, } UIManager.repaint_all = true + UIManager.full_refresh = true end function DictQuickLookup:isPrevDictAvaiable() From 4dd48b38df2fbb006a4c8ce50abe454e2d60cee0 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 23 Jul 2013 14:52:56 +0800 Subject: [PATCH 3/7] bugfix: update latest koreader-base --- koreader-base | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/koreader-base b/koreader-base index fa55acc48..1cbd8fb52 160000 --- a/koreader-base +++ b/koreader-base @@ -1 +1 @@ -Subproject commit fa55acc48b7e48a957ad3b82dd591a9bf91eb645 +Subproject commit 1cbd8fb52fcd9fde6325f6b43486f34d062aa81d From 210e2fcef8f32a22c785eebc2a4e8a1213e5fd32 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 23 Jul 2013 16:47:39 +0800 Subject: [PATCH 4/7] update image dimen in paintTo method --- frontend/ui/widget/image.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frontend/ui/widget/image.lua b/frontend/ui/widget/image.lua index bf008cab8..fc78d664f 100644 --- a/frontend/ui/widget/image.lua +++ b/frontend/ui/widget/image.lua @@ -29,6 +29,11 @@ end function ImageWidget:paintTo(bb, x, y) local size = self:getSize() + self.dimen = Geom:new{ + x = x, y = y, + w = size.w, + h = size.h + } bb:blitFrom(self._bb, x, y, 0, 0, size.w, size.h) if self.invert then bb:invertRect(x, y, size.w, size.h) From 294f47c0edb4eb1cf7bf431a95b79fbdb782bf79 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 23 Jul 2013 16:49:30 +0800 Subject: [PATCH 5/7] full refresh config panel --- frontend/ui/widget/config.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/ui/widget/config.lua b/frontend/ui/widget/config.lua index c68fb0f0d..2bcb3bf97 100644 --- a/frontend/ui/widget/config.lua +++ b/frontend/ui/widget/config.lua @@ -31,7 +31,11 @@ end function MenuBarItem:invert(invert) self[1].invert = invert - UIManager:setDirty(self.config, "partial") + UIManager.update_region_func = function() + DEBUG("update icon region", self[1].dimen) + return self[1].dimen + end + UIManager:setDirty(self.config, "full") end OptionTextItem = InputContainer:new{} @@ -469,7 +473,6 @@ function ConfigDialog:update() dimen = Screen:getSize(), self.dialog_frame, } - UIManager.repaint_all = true end function ConfigDialog:onShowConfigPanel(index) @@ -478,6 +481,8 @@ function ConfigDialog:onShowConfigPanel(index) self:update() + UIManager.repaint_all = true + UIManager.full_refresh = true UIManager.update_region_func = function() local update_region = self.dialog_frame.dimen:combine(orig_dimen) DEBUG("update region", update_region) From 3f672b5894e22bb9f6d73ae1cfab1a1ce5b8c3d5 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 23 Jul 2013 17:10:29 +0800 Subject: [PATCH 6/7] fix typo error that invalidate forced partial refresh --- frontend/ui/uimanager.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index 945be4fd7..edb88423b 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -200,7 +200,7 @@ function UIManager:run() if self._dirty[widget.widget] == "full" then force_full_refresh = true end - if self._dirty[widget.widget] == "patial" then + if self._dirty[widget.widget] == "partial" then force_patial_refresh = true end if self._dirty[widget.widget] == "fast" then From b3a068d3bb4d8cd72ed4824b52db7a4d2b0e1531 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 23 Jul 2013 23:52:09 +0800 Subject: [PATCH 7/7] fix wrong calculation of textwidget height --- frontend/ui/widget/text.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/ui/widget/text.lua b/frontend/ui/widget/text.lua index dcb137808..c455ea455 100644 --- a/frontend/ui/widget/text.lua +++ b/frontend/ui/widget/text.lua @@ -118,7 +118,7 @@ function TextBoxWidget:_render() local font_height = self.face.size local line_height_px = self.line_height * font_height local space_w = sizeUtf8Text(0, Screen:getWidth(), self.face, " ", true).x - local h = (font_height + line_height_px) * #v_list - line_height_px + local h = (font_height + line_height_px) * #v_list self._bb = Blitbuffer.new(self.width, h) local y = font_height local pen_x = 0 @@ -127,7 +127,7 @@ function TextBoxWidget:_render() for _,w in ipairs(l) do --@TODO Don't use kerning for monospaced fonts. (houqp) -- refert to cb25029dddc42693cc7aaefbe47e9bd3b7e1a750 in master tree - renderUtf8Text(self._bb, pen_x, y*0.8, self.face, w.word, + renderUtf8Text(self._bb, pen_x, y, self.face, w.word, true, self.bgcolor, self.fgcolor) local is_ascii = not w.word:match("[%z\194-\244][\128-\191]*") pen_x = pen_x + w.width + (is_ascii and space_w or 0)