From 33829e18155569c4afab1fd025f5c29fed275314 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 20:47:02 +0100 Subject: [PATCH 1/7] save pan position when entering pan_by_page --- pdfreader.lua | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/pdfreader.lua b/pdfreader.lua index c1f6e387d..7574d12b4 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -40,6 +40,8 @@ PDFReader = { shift_x = 100, shift_y = 50, pan_by_page = false, -- using shift_[xy] or width/height + pan_x = 0, -- top-left offset of page when pan activated + pan_y = 0, -- keep track of input state: shiftmode = false, -- shift pressed @@ -366,8 +368,8 @@ function PDFReader:inputloop() self:setglobalzoom(self.globalzoom+0.1) else if self.pan_by_page then - self.offset_x = 0 - self.offset_y = 0 + self.offset_x = self.pan_x + self.offset_y = self.pan_y end self:goto(self.pageno + 1) end @@ -378,8 +380,8 @@ function PDFReader:inputloop() self:setglobalzoom(self.globalzoom-0.1) else if self.pan_by_page then - self.offset_x = 0 - self.offset_y = 0 + self.offset_x = self.pan_x + self.offset_y = self.pan_y end self:goto(self.pageno - 1) end @@ -462,7 +464,7 @@ function PDFReader:inputloop() self.offset_x = 0 end if self.pan_by_page then - self.offset_y = 0 + self.offset_y = self.pan_y end elseif ev.code == KEY_FW_RIGHT then self.offset_x = self.offset_x - x @@ -470,7 +472,7 @@ function PDFReader:inputloop() self.offset_x = self.min_offset_x end if self.pan_by_page then - self.offset_y = 0 + self.offset_y = self.pan_y end elseif ev.code == KEY_FW_UP then self.offset_y = self.offset_y + y @@ -484,10 +486,19 @@ function PDFReader:inputloop() end elseif ev.code == KEY_FW_PRESS then if self.shiftmode then - self.offset_x = 0 - self.offset_y = 0 + if self.pan_by_page then + self.offset_x = self.pan_x + self.offset_y = self.pan_y + else + self.offset_x = 0 + self.offset_y = 0 + end else self.pan_by_page = not self.pan_by_page + if self.pan_by_page then + self.pan_x = self.offset_x + self.pan_y = self.offset_y + end end end if old_offset_x ~= self.offset_x From 03be0680c5bcf8112a4d42a3c26bb557b810e93f Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 20:56:37 +0100 Subject: [PATCH 2/7] correctly pass path to FileSearcher --- filechooser.lua | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/filechooser.lua b/filechooser.lua index d7007f9ee..8e29abb1d 100644 --- a/filechooser.lua +++ b/filechooser.lua @@ -163,14 +163,7 @@ function FileChooser:choose(ypos, height) elseif ev.code == KEY_S then -- invoke search input keywords = InputBox:input(height-100, 100, "Search:") if keywords then -- display search result according to keywords - --[[ - ---------------------------------------------------------------- - || uncomment following line and set the correct path if you want - || to test search feature in EMU mode - ---------------------------------------------------------------- - --]] - --FileSearcher:init("/home/dave/documents/kindle/backup/documents") - FileSearcher:init() + FileSearcher:init( self.path ) file = FileSearcher:choose(ypos, height, keywords) if file then return file From 54e7ae3296e4af60eaaee1d8f4955c3d123d0b05 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 23:19:31 +0100 Subject: [PATCH 3/7] implement new zoom mode (F) for two-colum layout It zooms to left column and turns on panning mode, so simple sequence of down,down...,right,down,down... will get you through whole page --- pdfreader.lua | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pdfreader.lua b/pdfreader.lua index 7574d12b4..e706e8e77 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -12,6 +12,7 @@ PDFReader = { ZOOM_FIT_TO_CONTENT = -4, ZOOM_FIT_TO_CONTENT_WIDTH = -5, ZOOM_FIT_TO_CONTENT_HEIGHT = -6, + ZOOM_FIT_TO_CONTENT_HALF_WIDTH = -7, GAMMA_NO_GAMMA = 1.0, @@ -42,6 +43,7 @@ PDFReader = { pan_by_page = false, -- using shift_[xy] or width/height pan_x = 0, -- top-left offset of page when pan activated pan_y = 0, + pan_margin = 20, -- keep track of input state: shiftmode = false, -- shift pressed @@ -191,6 +193,18 @@ function PDFReader:setzoom(page) self.offset_x = -1 * x0 * self.globalzoom + (width - (self.globalzoom * (x1 - x0))) / 2 self.offset_y = -1 * y0 * self.globalzoom end + elseif self.globalzoommode == self.ZOOM_FIT_TO_CONTENT_HALF_WIDTH then + local x0, y0, x1, y1 = page:getUsedBBox() + self.globalzoom = width / (x1 - x0 + self.pan_margin) + self.offset_x = -1 * x0 * self.globalzoom * 2 + self.pan_margin + self.globalzoom = height / (y1 - y0) + self.offset_y = -1 * y0 * self.globalzoom * 2 + self.globalzoom = width / (x1 - x0 + self.pan_margin) * 2 + print("column mode offset:"..self.offset_x.."*"..self.offset_y.." zoom:"..self.globalzoom); + self.globalzoommode = self.ZOOM_BY_VALUE -- enable pan mode + self.pan_x = self.offset_x + self.pan_y = self.offset_y + self.pan_by_page = true end dc:setZoom(self.globalzoom) dc:setRotate(self.globalrotate); @@ -426,6 +440,8 @@ function PDFReader:inputloop() else self:setglobalzoommode(self.ZOOM_FIT_TO_PAGE_HEIGHT) end + elseif ev.code == KEY_F then + self:setglobalzoommode(self.ZOOM_FIT_TO_CONTENT_HALF_WIDTH) elseif ev.code == KEY_T then self:showTOC() elseif ev.code == KEY_B then From 321181052aea76bf406e5ce2b759969e4d2b7ee0 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 23:37:13 +0100 Subject: [PATCH 4/7] fine-tune offsets and panning It's better to leave small margin at top, and remove margin when panning left-right since we have margins anyway --- pdfreader.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pdfreader.lua b/pdfreader.lua index e706e8e77..b35803b98 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -198,7 +198,7 @@ function PDFReader:setzoom(page) self.globalzoom = width / (x1 - x0 + self.pan_margin) self.offset_x = -1 * x0 * self.globalzoom * 2 + self.pan_margin self.globalzoom = height / (y1 - y0) - self.offset_y = -1 * y0 * self.globalzoom * 2 + self.offset_y = -1 * y0 * self.globalzoom * 2 + self.pan_margin self.globalzoom = width / (x1 - x0 + self.pan_margin) * 2 print("column mode offset:"..self.offset_x.."*"..self.offset_y.." zoom:"..self.globalzoom); self.globalzoommode = self.ZOOM_BY_VALUE -- enable pan mode @@ -463,8 +463,8 @@ function PDFReader:inputloop() x = self.shift_x / 5 y = self.shift_y / 5 elseif self.pan_by_page then - x = width - 5; -- small overlap when moving by page - y = height - 5; + x = width; + y = height - self.pan_margin; -- overlap for lines which didn't fit else x = self.shift_x y = self.shift_y From a839f82bac707f93f168558f6fe89e7a3f380fcc Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 23:48:27 +0100 Subject: [PATCH 5/7] change pages with just left/right fiveway --- pdfreader.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pdfreader.lua b/pdfreader.lua index b35803b98..670b2c86d 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -478,6 +478,11 @@ function PDFReader:inputloop() self.offset_x = self.offset_x + x if self.offset_x > 0 then self.offset_x = 0 + if self.pan_by_page and self.pageno > 1 then + self.offset_x = self.pan_x + self.offset_y = self.pan_y + self:goto(self.pageno - 1) + end end if self.pan_by_page then self.offset_y = self.pan_y @@ -486,6 +491,11 @@ function PDFReader:inputloop() self.offset_x = self.offset_x - x if self.offset_x < self.min_offset_x then self.offset_x = self.min_offset_x + if self.pan_by_page and self.pageno < self.doc:getPages() then + self.offset_x = self.pan_x + self.offset_y = self.pan_y + self:goto(self.pageno + 1) + end end if self.pan_by_page then self.offset_y = self.pan_y From de1725d39593080b9b3822cfa9d3260ba2928f34 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Thu, 1 Mar 2012 00:20:46 +0100 Subject: [PATCH 6/7] fiveway left in pan mode with position to bottom of column --- pdfreader.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pdfreader.lua b/pdfreader.lua index 670b2c86d..c3305de58 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -480,12 +480,12 @@ function PDFReader:inputloop() self.offset_x = 0 if self.pan_by_page and self.pageno > 1 then self.offset_x = self.pan_x - self.offset_y = self.pan_y + self.offset_y = self.min_offset_y -- bottom self:goto(self.pageno - 1) end end if self.pan_by_page then - self.offset_y = self.pan_y + self.offset_y = self.min_offset_y end elseif ev.code == KEY_FW_RIGHT then self.offset_x = self.offset_x - x From 5de749f457f16b60b7d3f42b3e496d690e96d435 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Thu, 1 Mar 2012 23:04:17 +0100 Subject: [PATCH 7/7] adjust fiveway rotation --- pdfreader.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/pdfreader.lua b/pdfreader.lua index c3305de58..327e41bee 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -370,6 +370,7 @@ function PDFReader:inputloop() while 1 do local ev = input.waitForEvent() if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then + ev.code = adjustFWKey(ev.code) local secs, usecs = util.gettime() if ev.code == KEY_SHIFT then self.shiftmode = true