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