From 5536ce996a128d4f38a7d21a82f060481012d866 Mon Sep 17 00:00:00 2001 From: poire-z Date: Fri, 5 Jun 2020 10:09:44 +0200 Subject: [PATCH] CRE: use same marks in top and bottom progress bars Feed to crengine the same ticks (build from the TOC entries) that we use in the bottom status bar. (crengine otherwise builds a tick for each DocFragment, which most often is really different than what's seen in the bottom bar.) --- frontend/apps/reader/modules/readerfooter.lua | 24 +++++-------------- .../apps/reader/modules/readerrolling.lua | 10 ++++++++ frontend/apps/reader/modules/readertoc.lua | 15 ++++++++++++ frontend/document/credocument.lua | 4 ++++ 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/frontend/apps/reader/modules/readerfooter.lua b/frontend/apps/reader/modules/readerfooter.lua index 528f8815c..009d992db 100644 --- a/frontend/apps/reader/modules/readerfooter.lua +++ b/frontend/apps/reader/modules/readerfooter.lua @@ -1581,26 +1581,14 @@ function ReaderFooter:setTocMarkers(reset) end if self.settings.toc_markers then self.progress_bar.tick_width = Screen:scaleBySize(self.settings.toc_markers_width) - if self.progress_bar.ticks ~= nil then return end - local ticks_candidates = {} - if self.ui.toc then - local max_level = self.ui.toc:getMaxDepth() - for i = 0, -max_level, -1 do - local ticks = self.ui.toc:getTocTicks(i) - table.insert(ticks_candidates, ticks) - end - -- find the finest toc ticks by sorting out the largest one - table.sort(ticks_candidates, function(a, b) return #a > #b end) + if self.progress_bar.ticks ~= nil then -- already computed + return end - - if #ticks_candidates > 0 then - self.progress_bar.ticks = ticks_candidates[1] - self.progress_bar.last = self.pages or self.view.document:getPageCount() - else - -- we still set ticks here so self.progress_bar.ticks will not be - -- initialized again if ticks_candidates is empty - self.progress_bar.ticks = {} + self.progress_bar.ticks = {} + if self.ui.toc then + self.progress_bar.ticks = self.ui.toc:getTocTicksForFooter() end + self.progress_bar.last = self.pages or self.view.document:getPageCount() else self.progress_bar.ticks = nil end diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index cbf15737f..72be6f416 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -814,6 +814,7 @@ function ReaderRolling:updatePos() self.ui:handleEvent(Event:new("UpdateToc")) self.view.footer:updateFooter() end + self:updateTopStatusBarMarkers() UIManager:setDirty(self.view.dialog, "partial") -- Allow for the new rendering to be shown before possibly showing -- the "Styles have changes..." ConfirmBox so the user can decide @@ -1005,6 +1006,15 @@ function ReaderRolling:onSetStatusLine(status_line, on_read_settings) self.ui:handleEvent(Event:new("UpdatePos")) end +function ReaderRolling:updateTopStatusBarMarkers() + if not self.cre_top_bar_enabled then + return + end + local pages = self.ui.document:getPageCount() + local ticks = self.ui.toc:getTocTicksForFooter() + self.ui.document:setHeaderProgressMarks(pages, ticks) +end + function ReaderRolling:updateBatteryState() if self.view.view_mode == "page" and self.cre_top_bar_enabled then logger.dbg("update battery state") diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index 4fa34f4cb..06dafeefa 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -285,6 +285,21 @@ function ReaderToc:getTocTicks(level) return ticks end +function ReaderToc:getTocTicksForFooter() + local ticks_candidates = {} + local max_level = self:getMaxDepth() + for i = 0, -max_level, -1 do + local ticks = self:getTocTicks(i) + table.insert(ticks_candidates, ticks) + end + if #ticks_candidates > 0 then + -- Find the finest toc ticks by sorting out the largest one + table.sort(ticks_candidates, function(a, b) return #a > #b end) + return ticks_candidates[1] + end + return {} +end + function ReaderToc:getNextChapter(cur_pageno, level) local ticks = self:getTocTicks(level) local next_chapter = nil diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index 4f171c245..81ecb6bdc 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -767,6 +767,10 @@ function CreDocument:setViewDimen(dimen) self._document:setViewDimen(dimen.w, dimen.h) end +function CreDocument:setHeaderProgressMarks(pages, ticks) + self._document:setHeaderProgressMarks(pages, ticks) +end + function CreDocument:setHeaderFont(new_font) if new_font then logger.dbg("CreDocument: set header font", new_font)