diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 58e3c7b7e..6ac540ee0 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -1,4 +1,6 @@ +local Blitbuffer = require("ffi/blitbuffer") local Device = require("device") +local Geom = require("ui/geometry") local InputContainer = require("ui/widget/container/inputcontainer") local Event = require("ui/event") local ReaderPanning = require("apps/reader/modules/readerpanning") @@ -393,6 +395,23 @@ end function ReaderRolling:onGotoXPointer(xp) self:_gotoXPointer(xp) self.xpointer = xp + -- Show a mark on left side of screen to give a visual feedback + -- of where xpointer target is (removed after 1 second) + if string.sub(xp, 1, 1) == "#" then -- only for links, not page top fragment identifier + local doc_y = self.ui.document:getPosFromXPointer(xp) + local top_y = self.ui.document:getCurrentPos() + local doc_margins = self.ui.document._document:getPageMargins() + local screen_y = doc_y - top_y + doc_margins["top"] + local marker_w = math.max(doc_margins["left"] - Screen:scaleBySize(5), Screen:scaleBySize(5)) + local marker_h = Screen:scaleBySize(self.ui.font.font_size * 1.1 * self.ui.font.line_space_percent/100.0) + UIManager:scheduleIn(0.5, function() + Screen.bb:paintRect(0, screen_y, marker_w, marker_h, Blitbuffer.COLOR_BLACK) + Screen["refreshPartial"](Screen, 0, screen_y, marker_w, marker_h) + UIManager:scheduleIn(1, function() + UIManager:setDirty(self.view.dialog, "partial", Geom:new({x=0, y=screen_y, w=marker_w, h=marker_h})) + end) + end) + end return true end