From 7d71d73cc48f3d5ba4f61ee3316021a09e49ad32 Mon Sep 17 00:00:00 2001 From: poire-z Date: Mon, 12 Mar 2018 20:46:40 +0100 Subject: [PATCH] Speed up page turning on big cre documents (#3740) Page turning, menu opening, ... everything actually --- frontend/apps/reader/modules/readerrolling.lua | 9 +++++++++ frontend/document/credocument.lua | 13 +++++++++++++ 2 files changed, 22 insertions(+) diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 0625e1e47..021d5042c 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -99,6 +99,9 @@ function ReaderRolling:init() end) table.insert(self.ui.postReaderCallback, function() self:updatePos() + -- Disable crengine internal history, with required redraw + self.ui.document:enableInternalHistory(false) + self:onRedrawCurrentView() end) self.ui.menu:registerToMainMenu(self) end @@ -566,10 +569,16 @@ function ReaderRolling:onSetDimensions(dimen) end function ReaderRolling:onChangeScreenMode(mode) + -- We need to temporarily re-enable internal history as crengine + -- uses it to reposition after resize + self.ui.document:enableInternalHistory(true) self.ui:handleEvent(Event:new("SetScreenMode", mode)) self.ui.document:setViewDimen(Screen:getSize()) self:onChangeViewMode() self:onUpdatePos() + -- Re-disable internal history, with required redraw + self.ui.document:enableInternalHistory(false) + self:onRedrawCurrentView() end function ReaderRolling:onColorRenderingUpdate() diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index cfcc7c7bf..eeeab505b 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -540,6 +540,19 @@ function CreDocument:findText(pattern, origin, reverse, caseInsensitive) pattern, origin, reverse, caseInsensitive and 1 or 0) end +function CreDocument:enableInternalHistory(toggle) + -- Setting this to 0 unsets crengine internal bookmarks highlighting, + -- and as a side effect, disable internal history and the need to build + -- a bookmark at each page turn: this speeds up a lot page turning + -- and menu opening on big books. + -- It has to be called late in the document opening process, and setting + -- it to false needs to be followed by a redraw. + -- It needs to be temporarily re-enabled on page resize for crengine to + -- keep track of position in page and restore it after resize. + logger.dbg("CreDocument: set bookmarks highlight and internal history", toggle) + self._document:setIntProperty("crengine.highlight.bookmarks", toggle and 2 or 0) +end + function CreDocument:register(registry) registry:addProvider("azw", "application/vnd.amazon.mobi8-ebook", self, 90) registry:addProvider("chm", "application/vnd.ms-htmlhelp", self, 90)