mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
mod: use percent as absolute location in DOCs in CREReader
The height of documents will be changed after zoom in or zoom out, so we cannot use pos to mark positions inside documents.
This commit is contained in:
21
cre.cpp
21
cre.cpp
@@ -84,6 +84,14 @@ static int getPos(lua_State *L) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int getPosPercent(lua_State *L) {
|
||||
CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument");
|
||||
|
||||
lua_pushinteger(L, doc->text_view->getPosPercent());
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int getFullHeight(lua_State *L) {
|
||||
CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument");
|
||||
|
||||
@@ -161,6 +169,15 @@ static int gotoPage(lua_State *L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gotoPercent(lua_State *L) {
|
||||
CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument");
|
||||
int percent = luaL_checkint(L, 2);
|
||||
|
||||
doc->text_view->SetPos(percent * doc->text_view->GetFullHeight() / 10000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gotoPos(lua_State *L) {
|
||||
CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument");
|
||||
int pos = luaL_checkint(L, 2);
|
||||
@@ -223,9 +240,11 @@ static const struct luaL_Reg credocument_meth[] = {
|
||||
{"getPages", getNumberOfPages},
|
||||
{"getCurrentPage", getCurrentPage},
|
||||
{"getPos", getPos},
|
||||
{"GetFullHeight", getFullHeight},
|
||||
{"getPosPercent", getPosPercent},
|
||||
{"getFullHeight", getFullHeight},
|
||||
{"getToc", getTableOfContent},
|
||||
{"gotoPage", gotoPage},
|
||||
{"gotoPercent", gotoPercent},
|
||||
{"gotoPos", gotoPos},
|
||||
{"zoomFont", zoomFont},
|
||||
{"drawCurrentPage", drawCurrentPage},
|
||||
|
||||
@@ -3,6 +3,7 @@ require "inputbox"
|
||||
|
||||
CREReader = UniReader:new{
|
||||
pos = 0,
|
||||
percent = 0,
|
||||
pan_overlap_vertical = 0,
|
||||
}
|
||||
|
||||
@@ -26,11 +27,16 @@ function CREReader:open(filename)
|
||||
end
|
||||
|
||||
function CREReader:getLastPageOrPos()
|
||||
return self.settings:readSetting("last_pos") or 0
|
||||
local last_percent = self.settings:readSetting("last_percent")
|
||||
if last_percent then
|
||||
return (last_percent * self.doc:getFullHeight()) / 10000
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
function CREReader:saveLastPageOrPos()
|
||||
self.settings:savesetting("last_pos", self.pos)
|
||||
self.settings:savesetting("last_percent", self.percent)
|
||||
end
|
||||
|
||||
function CREReader:setzoom(page, preCache)
|
||||
@@ -41,12 +47,12 @@ function CREReader:addJump(pos, notes)
|
||||
end
|
||||
|
||||
function CREReader:goto(pos)
|
||||
local pos = math.min(pos, self.doc:GetFullHeight())
|
||||
local pos = math.min(pos, self.doc:getFullHeight())
|
||||
pos = math.max(pos, 0)
|
||||
|
||||
-- add to jump_stack, distinguish jump from normal page turn
|
||||
if self.pos and math.abs(self.pos - pos) > height then
|
||||
self:addJump(self.pos)
|
||||
self:addJump(self.percent)
|
||||
end
|
||||
|
||||
self.doc:gotoPos(pos)
|
||||
@@ -64,6 +70,7 @@ function CREReader:goto(pos)
|
||||
|
||||
self.pos = pos
|
||||
self.pageno = self.doc:getCurrentPage()
|
||||
self.percent = self.doc:getPosPercent()
|
||||
end
|
||||
|
||||
function CREReader:redrawCurrentPage()
|
||||
@@ -73,7 +80,7 @@ end
|
||||
-- used in CREReader:showMenu()
|
||||
function CREReader:_drawReadingInfo()
|
||||
local ypos = height - 50
|
||||
local load_percent = (self.pos / self.doc:GetFullHeight())
|
||||
local load_percent = self.percent/100
|
||||
|
||||
fb.bb:paintRect(0, ypos, width, 50, 0)
|
||||
|
||||
@@ -84,8 +91,7 @@ function CREReader:_drawReadingInfo()
|
||||
cur_section = "Section: "..cur_section
|
||||
end
|
||||
renderUtf8Text(fb.bb, 10, ypos+6, face, fhash,
|
||||
"Position: "..math.floor((load_percent*100)).."%"..
|
||||
" "..cur_section, true)
|
||||
"Position: "..load_percent.."%".." "..cur_section, true)
|
||||
|
||||
ypos = ypos + 15
|
||||
blitbuffer.progressBar(fb.bb, 10, ypos, width-20, 15,
|
||||
@@ -144,9 +150,9 @@ function CREReader:adjustCreReaderCommands()
|
||||
"jump to <key>*10% of document",
|
||||
function(cr, keydef)
|
||||
print('jump to position: '..
|
||||
math.floor(cr.doc:GetFullHeight()*(keydef.keycode-KEY_1)/9)..
|
||||
'/'..cr.doc:GetFullHeight())
|
||||
cr:goto(math.floor(cr.doc:GetFullHeight()*(keydef.keycode-KEY_1)/9))
|
||||
math.floor(cr.doc:getFullHeight()*(keydef.keycode-KEY_1)/9)..
|
||||
'/'..cr.doc:getFullHeight())
|
||||
cr:goto(math.floor(cr.doc:getFullHeight()*(keydef.keycode-KEY_1)/9))
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user