From eb34fbb818c81383edf1d4ed0fdc70e7fdd4bf1a Mon Sep 17 00:00:00 2001 From: lennonhill <31923882+lennonhill@users.noreply.github.com> Date: Wed, 16 Mar 2022 23:22:56 +0100 Subject: [PATCH] PDF: align page view with target when following internal link (#8907) --- frontend/apps/reader/modules/readerlink.lua | 2 +- frontend/apps/reader/modules/readerpaging.lua | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/frontend/apps/reader/modules/readerlink.lua b/frontend/apps/reader/modules/readerlink.lua index abf09c756..87625cba4 100644 --- a/frontend/apps/reader/modules/readerlink.lua +++ b/frontend/apps/reader/modules/readerlink.lua @@ -552,7 +552,7 @@ function ReaderLink:onGotoLink(link, neglect_current_location, allow_footnote_po if not neglect_current_location then self:addCurrentLocationToStack() end - self.ui:handleEvent(Event:new("GotoPage", link.page + 1)) + self.ui:handleEvent(Event:new("GotoPage", link.page + 1, link.pos)) return true end link_url = link.uri -- external link diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index ac91a3ed2..8b35be600 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -1062,8 +1062,22 @@ function ReaderPaging:_gotoPage(number, orig_mode) return true end -function ReaderPaging:onGotoPage(number) +function ReaderPaging:onGotoPage(number, pos) + self:setPagePosition(number, 0) self:_gotoPage(number) + if pos then + local rect_p = Geom:new{ x = pos.x or 0, y = pos.y or 0 } + local rect_s = Geom:new(rect_p):copy() + rect_s:transformByScale(self.view.state.zoom) + if self.view.page_scroll then + self:onScrollPanRel(rect_s.y - self.view.page_area.y) + else + self.view:PanningUpdate(rect_s.x - self.view.visible_area.x, rect_s.y - self.view.visible_area.y) + end + elseif number == self.current_page then + -- gotoPage emits this event only if the page changes + self.ui:handleEvent(Event:new("PageUpdate", self.current_page)) + end return true end