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)