From 6d3e7fcef61a327df14a81f6339fd17ec6a784cd Mon Sep 17 00:00:00 2001 From: yparitcher Date: Thu, 21 Nov 2019 04:05:40 -0500 Subject: [PATCH] [fix] PDF footer margins (#5620) closes #5612 the change in `ReaderView:recalculate()` causes the viewable page size to be calculated by not including the footer, causing the text not to get cut off. since the page area was not drawing under the footer `ReaderView:drawPageSurround()` had to be fixed to draw the margin under the footer so when tapping the footer off the area should be dran the background color. --- frontend/apps/reader/modules/readerpaging.lua | 11 +++-------- frontend/apps/reader/modules/readerview.lua | 14 +++++++++++--- spec/unit/readerlink_spec.lua | 4 ++-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 209dbad89..5b03c9263 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -766,11 +766,6 @@ function ReaderPaging:onScrollPanRel(diff) return true end -function ReaderPaging:calculateOverlap() - local footer_height = (self.view.footer_visible and 1 or 0) * self.view.footer.height - return self.overlap + footer_height -end - function ReaderPaging:onScrollPageRel(page_diff) if page_diff == 0 then return true end if page_diff > 0 then @@ -786,7 +781,7 @@ function ReaderPaging:onScrollPageRel(page_diff) local blank_area = Geom:new{} blank_area:setSizeTo(self.view.dimen) - local overlap = self:calculateOverlap() + local overlap = self.overlap local offset = Geom:new{ x = 0, y = last_visible_area.h - overlap @@ -796,7 +791,7 @@ function ReaderPaging:onScrollPageRel(page_diff) -- page up, first page should be moved to bottom local blank_area = Geom:new{} blank_area:setSizeTo(self.view.dimen) - local overlap = self:calculateOverlap() + local overlap = self.overlap local first_page_state = table.remove(self.view.page_states, 1) local offset = Geom:new{ x = 0, @@ -912,7 +907,7 @@ function ReaderPaging:onGotoPageRel(diff) else -- not end of page yet, goto next view -- adjust panning step according to overlap - local overlap = self:calculateOverlap() + local overlap = self.overlap if x_pan_off > overlap then -- moving to next view, move view x_pan_off = x_pan_off - overlap diff --git a/frontend/apps/reader/modules/readerview.lua b/frontend/apps/reader/modules/readerview.lua index 5d2faa7c9..d3ad1e194 100644 --- a/frontend/apps/reader/modules/readerview.lua +++ b/frontend/apps/reader/modules/readerview.lua @@ -304,8 +304,9 @@ end function ReaderView:drawPageSurround(bb, x, y) if self.dimen.h > self.visible_area.h then bb:paintRect(x, y, self.dimen.w, self.state.offset.y, self.outer_page_color) - bb:paintRect(x, y + self.dimen.h - self.state.offset.y - 1, - self.dimen.w, self.state.offset.y + 1, self.outer_page_color) + local bottom_margin = y + self.visible_area.h + self.state.offset.y + bb:paintRect(x, bottom_margin, self.dimen.w, self.state.offset.y + + self.ui.view.footer:getHeight(), self.outer_page_color) end if self.dimen.w > self.visible_area.w then bb:paintRect(x, y, self.state.offset.x, self.dimen.h, self.outer_page_color) @@ -573,6 +574,9 @@ function ReaderView:recalculate() self.state.rotation) -- reset our size self.visible_area:setSizeTo(self.dimen) + if self.ui.view.footer_visible then + self.visible_area.h = self.visible_area.h - self.ui.view.footer:getHeight() + end if self.ui.document.configurable.writing_direction == 0 then -- starts from left top of page_area self.visible_area.x = self.page_area.x @@ -594,7 +598,11 @@ function ReaderView:recalculate() end self.state.offset = Geom:new{x = 0, y = 0} if self.dimen.h > self.visible_area.h then - self.state.offset.y = (self.dimen.h - self.visible_area.h) / 2 + if self.ui.view.footer_visible then + self.state.offset.y = (self.dimen.h - (self.visible_area.h + self.ui.view.footer:getHeight())) / 2 + else + self.state.offset.y = (self.dimen.h - self.visible_area.h) / 2 + end end if self.dimen.w > self.visible_area.w then self.state.offset.x = (self.dimen.w - self.visible_area.w) / 2 diff --git a/spec/unit/readerlink_spec.lua b/spec/unit/readerlink_spec.lua index e422febc4..8b91a83db 100644 --- a/spec/unit/readerlink_spec.lua +++ b/spec/unit/readerlink_spec.lua @@ -30,7 +30,7 @@ describe("ReaderLink module", function() readerui:handleEvent(Event:new("SetScrollMode", false)) readerui:handleEvent(Event:new("SetZoomMode", "page")) readerui.paging:onGotoPage(1) - readerui.link:onTap(nil, {pos = {x = 363, y = 585}}) + readerui.link:onTap(nil, {pos = {x = 363, y = 565}}) UIManager:run() assert.is.same(22, readerui.paging.current_page) end) @@ -71,7 +71,7 @@ describe("ReaderLink module", function() readerui:handleEvent(Event:new("SetScrollMode", false)) readerui:handleEvent(Event:new("SetZoomMode", "page")) readerui.paging:onGotoPage(1) - readerui.link:onTap(nil, {pos = {x = 363, y = 585}}) + readerui.link:onTap(nil, {pos = {x = 363, y = 565}}) UIManager:run() assert.is.same(22, readerui.paging.current_page) readerui.link:onGoBackLink()