show_overlap inverts part of page visible in previous view

This is nice feature of Sony e-book readers which is very useful when
reading since it shows previous part of visible page and provides
hint where to continue reading after page refresh
pull/2/merge
Dobrica Pavlinusic 12 years ago
parent a824204039
commit 5d9176907f

@ -102,6 +102,14 @@ function CREReader:goto(pos, pos_type)
self.doc:drawCurrentPage(self.nulldc, fb.bb)
print("## self.show_overlap "..self.show_overlap)
if self.show_overlap < 0 then
fb.bb:invertRect(0,0, width, -self.show_overlap)
elseif self.show_overlap > 0 then
fb.bb:invertRect(0,height - self.show_overlap, width, self.show_overlap)
end
self.show_overlap = 0
if self.rcount == self.rcountmax then
print("full refresh")
self.rcount = 1
@ -127,10 +135,12 @@ function CREReader:gotoTocEntry(entry)
end
function CREReader:nextView()
self.show_overlap = -self.pan_overlap_vertical
return self.pos + G_height - self.pan_overlap_vertical
end
function CREReader:prevView()
self.show_overlap = self.pan_overlap_vertical
return self.pos - G_height + self.pan_overlap_vertical
end

@ -54,6 +54,7 @@ UniReader = {
pan_y = 0,
pan_margin = 20, -- horizontal margin for two-column zoom
pan_overlap_vertical = 30,
show_overlap = 0,
-- the document:
doc = nil,
@ -552,6 +553,14 @@ function UniReader:show(no)
"width:"..width..", height:"..height)
fb.bb:blitFrom(bb, dest_x, dest_y, offset_x, offset_y, width, height)
print("## self.show_overlap "..self.show_overlap)
if self.show_overlap < 0 then
fb.bb:invertRect(0,0, width, dest_y - self.show_overlap)
elseif self.show_overlap > 0 then
fb.bb:invertRect(0,dest_y + height - self.show_overlap, width, self.show_overlap)
end
self.show_overlap = 0
-- render highlights to page
if self.highlight[no] then
self:toggleTextHighLight(self.highlight[no])
@ -668,6 +677,7 @@ function UniReader:nextView()
-- goto next view of current page
self.offset_y = self.offset_y - G_height
+ self.pan_overlap_vertical
self.show_overlap = -self.pan_overlap_vertical -- top < 0
end
else
-- not in fit to content width pan mode, just do a page turn
@ -695,6 +705,7 @@ function UniReader:prevView()
-- goto previous view of current page
self.offset_y = self.offset_y + G_height
- self.pan_overlap_vertical
self.show_overlap = self.pan_overlap_vertical -- bottom > 0
end
else
-- not in fit to content width pan mode, just do a page turn
@ -1183,8 +1194,8 @@ function UniReader:addAllCommands()
x = unireader.shift_x / 5
y = unireader.shift_y / 5
elseif unireader.pan_by_page then
x = G_width;
y = G_height - unireader.pan_overlap_vertical; -- overlap for lines which didn't fit
x = G_width
y = G_height
else
x = unireader.shift_x
y = unireader.shift_y
@ -1223,14 +1234,18 @@ function UniReader:addAllCommands()
unireader.offset_x = unireader.min_offset_x
end
elseif keydef.keycode == KEY_FW_UP then
unireader.offset_y = unireader.offset_y + y
unireader.offset_y = unireader.offset_y + y - unireader.pan_overlap_vertical
if unireader.offset_y > 0 then
unireader.offset_y = 0
elseif unireader.pan_by_page then
unireader.show_overlap = unireader.pan_overlap_vertical -- bottom
end
elseif keydef.keycode == KEY_FW_DOWN then
unireader.offset_y = unireader.offset_y - y
unireader.offset_y = unireader.offset_y - y + unireader.pan_overlap_vertical
if unireader.offset_y < unireader.min_offset_y then
unireader.offset_y = unireader.min_offset_y
elseif unireader.pan_by_page then
unireader.show_overlap = -unireader.pan_overlap_vertical -- top
end
elseif keydef.keycode == KEY_FW_PRESS then
if keydef.modifier==MOD_SHIFT then

Loading…
Cancel
Save