Adds CreDocument:getScreenPositionFromXPointer()

Factorize same code used by ReaderLink and ReaderRolling into
CreDocument:getScreenPositionFromXPointer().
This commit is contained in:
poire-z
2019-02-03 09:58:48 +01:00
parent 81a2423982
commit 6e3b40e2bf
3 changed files with 26 additions and 24 deletions

View File

@@ -289,16 +289,7 @@ end
--- Check if a xpointer to <a> node really points to itself
function ReaderLink:isXpointerCoherent(a_xpointer)
-- Get screen coordinates of xpointer
local doc_margins = self.ui.document:getPageMargins()
local header_height = self.ui.document:getHeaderHeight() -- top full status bar (0 when bottom mini bar used)
local doc_y, doc_x = self.ui.document:getPosFromXPointer(a_xpointer)
local top_y = self.ui.document:getCurrentPos()
-- (strange, but using doc_margins.top is accurate even in scroll mode)
local screen_y = doc_y - top_y
if self.view.view_mode == "page" then
screen_y = screen_y + doc_margins["top"] + header_height
end
local screen_x = doc_x + doc_margins["left"]
local screen_y, screen_x = self.ui.document:getScreenPositionFromXPointer(a_xpointer)
-- Get again link and a_xpointer from this position
local re_link_xpointer, re_a_xpointer = self.ui.document:getLinkFromPosition({x = screen_x, y = screen_y}) -- luacheck: no unused
-- We should get the same a_xpointer. If not, crengine has messed up