ReaderFooter: Cleanup some more messy dimensions handling (#6898)

Some stuff was still hacked on manually instead of trusting the widget system to do things right, which it does, if you update the right stuff at the right time the right way ;). *This Is The Way*.

Fix #6893 (and address https://github.com/koreader/koreader/pull/6878#discussion_r523411883, because it was indeed redundant ^^).

Includes a bonus fix for a number of (footer) settings not being applied immediately in PDFs.
pull/6756/head
NiLuJe 4 years ago committed by GitHub
parent 960b2ae62a
commit 0ae86fc0ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -504,7 +504,6 @@ function ReaderFooter:init()
self.mode = self.mode_list.off self.mode = self.mode_list.off
self.view.footer_visible = false self.view.footer_visible = false
self:resetLayout() self:resetLayout()
self.footer_container.dimen.h = 0
self.footer_text.height = 0 self.footer_text.height = 0
end end
if self.settings.all_at_once then if self.settings.all_at_once then
@ -512,9 +511,6 @@ function ReaderFooter:init()
self:updateFooterTextGenerator() self:updateFooterTextGenerator()
if self.settings.progress_bar_position and self.has_no_mode then if self.settings.progress_bar_position and self.has_no_mode then
self.footer_text.height = 0 self.footer_text.height = 0
if self.settings.disable_progress_bar then
self.footer_container.dimen.h = 0
end
end end
else else
self:applyFooterMode() self:applyFooterMode()
@ -673,13 +669,17 @@ function ReaderFooter:resetLayout(force_reset)
if self.separator_line then if self.separator_line then
self.separator_line.dimen.w = new_screen_width - 2 * self.horizontal_margin self.separator_line.dimen.w = new_screen_width - 2 * self.horizontal_margin
end end
local bar_height if self.settings.disable_progress_bar then
if self.settings.progress_style_thin then self.progress_bar.height = 0
bar_height = self.settings.progress_style_thin_height or PROGRESS_BAR_STYLE_THIN_DEFAULT_HEIGHT
else else
bar_height = self.settings.progress_style_thick_height or PROGRESS_BAR_STYLE_THICK_DEFAULT_HEIGHT local bar_height
if self.settings.progress_style_thin then
bar_height = self.settings.progress_style_thin_height or PROGRESS_BAR_STYLE_THIN_DEFAULT_HEIGHT
else
bar_height = self.settings.progress_style_thick_height or PROGRESS_BAR_STYLE_THICK_DEFAULT_HEIGHT
end
self.progress_bar:setHeight(bar_height)
end end
self.progress_bar:setHeight(bar_height)
self.horizontal_group:resetLayout() self.horizontal_group:resetLayout()
self.footer_positioner.dimen.w = new_screen_width self.footer_positioner.dimen.w = new_screen_width
@ -834,16 +834,11 @@ function ReaderFooter:addToMainMenu(menu_items)
self.reclaim_height = self.settings.reclaim_height or false self.reclaim_height = self.settings.reclaim_height or false
-- refresh margins position -- refresh margins position
if self.has_no_mode then if self.has_no_mode then
if self.settings.disable_progress_bar then
self.footer_container.dimen.h = 0
end
self.footer_text.height = 0 self.footer_text.height = 0
should_signal = true should_signal = true
self.genFooterText = footerTextGeneratorMap.empty self.genFooterText = footerTextGeneratorMap.empty
self.mode = self.mode_list.off self.mode = self.mode_list.off
elseif prev_has_no_mode then elseif prev_has_no_mode then
self.footer_container.dimen.h = self.height
self.footer_text.height = self.height
if self.settings.all_at_once then if self.settings.all_at_once then
self.mode = self.mode_list.page_progress self.mode = self.mode_list.page_progress
self:applyFooterMode() self:applyFooterMode()
@ -1381,8 +1376,6 @@ function ReaderFooter:addToMainMenu(menu_items)
callback = function() callback = function()
self.settings.disable_progress_bar = not self.settings.disable_progress_bar self.settings.disable_progress_bar = not self.settings.disable_progress_bar
if not self.settings.disable_progress_bar then if not self.settings.disable_progress_bar then
self.footer_container.dimen.h = self.height
self.footer_text.height = self.height
self:setTocMarkers() self:setTocMarkers()
self.mode = self.mode_list.page_progress self.mode = self.mode_list.page_progress
self:applyFooterMode() self:applyFooterMode()
@ -1847,12 +1840,12 @@ function ReaderFooter:_updateFooterText(force_repaint, force_recompute)
if self.settings.disable_progress_bar then if self.settings.disable_progress_bar then
if self.has_no_mode or text == "" then if self.has_no_mode or text == "" then
self.text_width = 0 self.text_width = 0
self.footer_container.dimen.h = 0
self.footer_text.height = 0 self.footer_text.height = 0
else else
self.text_width = self.footer_text:getSize().w self.text_width = self.footer_text:getSize().w
self.footer_text.height = self.footer_text:getSize().h self.footer_text.height = self.footer_text:getSize().h
end end
self.progress_bar.height = 0
self.progress_bar.width = 0 self.progress_bar.width = 0
elseif self.settings.progress_bar_position then elseif self.settings.progress_bar_position then
if self.has_no_mode or text == "" then if self.has_no_mode or text == "" then
@ -1876,13 +1869,6 @@ function ReaderFooter:_updateFooterText(force_repaint, force_recompute)
self.progress_bar.width = math.floor( self.progress_bar.width = math.floor(
self._saved_screen_width - self.text_width - self.settings.progress_margin_width*2) self._saved_screen_width - self.text_width - self.settings.progress_margin_width*2)
end end
local bar_height
if self.settings.progress_style_thin then
bar_height = self.settings.progress_style_thin_height or PROGRESS_BAR_STYLE_THIN_DEFAULT_HEIGHT
else
bar_height = self.settings.progress_style_thick_height or PROGRESS_BAR_STYLE_THICK_DEFAULT_HEIGHT
end
self.progress_bar:setHeight(bar_height)
if self.separator_line then if self.separator_line then
self.separator_line.dimen.w = self._saved_screen_width - 2 * self.horizontal_margin self.separator_line.dimen.w = self._saved_screen_width - 2 * self.horizontal_margin
@ -2134,7 +2120,13 @@ function ReaderFooter:refreshFooter(refresh, signal)
-- We *do* need to ensure we at least re-compute the footer layout, though, especially when going from visible to invisible... -- We *do* need to ensure we at least re-compute the footer layout, though, especially when going from visible to invisible...
self:onUpdateFooter(refresh and not signal, refresh and signal) self:onUpdateFooter(refresh and not signal, refresh and signal)
if signal then if signal then
self.ui:handleEvent(Event:new("SetPageBottomMargin", self.ui.document.configurable.b_page_margin)) if self.ui.document.provider == "crengine" then
-- This will ultimately trigger an UpdatePos, hence a ReaderUI repaint.
self.ui:handleEvent(Event:new("SetPageBottomMargin", self.ui.document.configurable.b_page_margin))
else
-- No fancy chain of events outside of CRe, just ask for a ReaderUI repaint ourselves ;).
UIManager:setDirty(self.view.dialog, "partial")
end
end end
end end

Loading…
Cancel
Save