From ccc2f7e134558bd88409ecf1a982dbd2d94eedba Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 16:17:43 +0100 Subject: [PATCH 01/18] cleanup old files before fetching new versions --- Makefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 5f9de89ee..141af1b03 100644 --- a/Makefile +++ b/Makefile @@ -90,9 +90,11 @@ lfs.o: $(LFSDIR)/src/lfs.c $(CC) -c $(CFLAGS) -I$(LUADIR)/src -I$(LFSDIR)/src $(LFSDIR)/src/lfs.c -o $@ fetchthirdparty: - -rmdir mupdf - -rmdir lua - -rm lua + -rm -Rf mupdf + -rm -Rf lua lua-5.1.4* + -rm -Rf lsqlite3_svn08* + -rm -Rf sqlite-amalgamation-3070900* + -rm -Rf luafilesystem* git clone git://git.ghostscript.com/mupdf.git ( cd mupdf ; wget http://www.mupdf.com/download/mupdf-thirdparty.zip && unzip mupdf-thirdparty.zip ) wget http://www.lua.org/ftp/lua-5.1.4.tar.gz && tar xvzf lua-5.1.4.tar.gz && ln -s lua-5.1.4 lua From 9a90b4d599a578d9137f4408770f261227edcea1 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 16:53:40 +0100 Subject: [PATCH 02/18] move FW_PRESS to End in emulation --- keys.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keys.lua b/keys.lua index 7e3f5aec7..adac1aa32 100644 --- a/keys.lua +++ b/keys.lua @@ -115,7 +115,7 @@ function set_emu_keycodes() KEY_FW_DOWN = 116 KEY_FW_LEFT = 113 KEY_FW_RIGHT = 114 - KEY_FW_PRESS = 36 -- enter for now + KEY_FW_PRESS = 115 -- end for now (above arrows) KEY_SPACE = 65 KEY_ENTER = 36 From ffc411096ed8941ca415621580126903dc2e1ca6 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 16:54:06 +0100 Subject: [PATCH 03/18] fix pan by one screen in manual zoom mode --- pdfreader.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pdfreader.lua b/pdfreader.lua index bc8b0b37d..49ed164bf 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -437,8 +437,8 @@ function PDFReader:inputloop() x = self.shift_x / 5 y = self.shift_y / 5 elseif self.pan_by_page then - x = self.width - 5; -- small overlap when moving by page - y = self.height - 5; + x = width - 5; -- small overlap when moving by page + y = height - 5; else x = self.shift_x y = self.shift_y From 12fee4f7c5c98f1579edb6b9093c2bb74521098b Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 18:55:58 +0100 Subject: [PATCH 04/18] reset y panning when moving left or right This makes this pan mode really useful, because you don't need to go all the way to top of page when you get to bottom of first column. --- pdfreader.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pdfreader.lua b/pdfreader.lua index 49ed164bf..5b700fdaa 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -453,11 +453,17 @@ function PDFReader:inputloop() if self.offset_x > 0 then self.offset_x = 0 end + if self.pan_by_page then + self.offset_y = 0 + end elseif ev.code == KEY_FW_RIGHT then self.offset_x = self.offset_x - x if self.offset_x < self.min_offset_x then self.offset_x = self.min_offset_x end + if self.pan_by_page then + self.offset_y = 0 + end elseif ev.code == KEY_FW_UP then self.offset_y = self.offset_y + y if self.offset_y > 0 then From ba13e6b4104c8e7c54d3a5455a393afc903a4024 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 19:32:00 +0100 Subject: [PATCH 05/18] make up/down levels same I use addition and substraction instead of multipiciation with factor to make zoom deterministic (and this, one zoom up too many can be undone with simple zoom out which wasn't the case). --- pdfreader.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pdfreader.lua b/pdfreader.lua index 5b700fdaa..f89646055 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -361,17 +361,17 @@ function PDFReader:inputloop() self.altmode = true elseif ev.code == KEY_PGFWD or ev.code == KEY_LPGFWD then if self.shiftmode then - self:setglobalzoom(self.globalzoom*1.2) + self:setglobalzoom(self.globalzoom+0.2) elseif self.altmode then - self:setglobalzoom(self.globalzoom*1.1) + self:setglobalzoom(self.globalzoom+0.1) else self:goto(self.pageno + 1) end elseif ev.code == KEY_PGBCK or ev.code == KEY_LPGBCK then if self.shiftmode then - self:setglobalzoom(self.globalzoom*0.8) + self:setglobalzoom(self.globalzoom-0.2) elseif self.altmode then - self:setglobalzoom(self.globalzoom*0.9) + self:setglobalzoom(self.globalzoom-0.1) else self:goto(self.pageno - 1) end From 4481fc517899b42c28bcedc4a5178666e067744e Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 19:39:03 +0100 Subject: [PATCH 06/18] reset x and y position when moving between pages in pan_by_page mode --- pdfreader.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pdfreader.lua b/pdfreader.lua index f89646055..c1f6e387d 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -365,6 +365,10 @@ function PDFReader:inputloop() elseif self.altmode then self:setglobalzoom(self.globalzoom+0.1) else + if self.pan_by_page then + self.offset_x = 0 + self.offset_y = 0 + end self:goto(self.pageno + 1) end elseif ev.code == KEY_PGBCK or ev.code == KEY_LPGBCK then @@ -373,6 +377,10 @@ function PDFReader:inputloop() elseif self.altmode then self:setglobalzoom(self.globalzoom-0.1) else + if self.pan_by_page then + self.offset_x = 0 + self.offset_y = 0 + end self:goto(self.pageno - 1) end elseif ev.code == KEY_BACK then From 33829e18155569c4afab1fd025f5c29fed275314 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 29 Feb 2012 20:47:02 +0100 Subject: [PATCH 07/18] 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 08/18] 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 09/18] 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 10/18] 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 11/18] 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 12/18] 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 13/18] 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 From e42f4ae38eb915bcad21bd6a15bc7dadb5dfb6c1 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Fri, 2 Mar 2012 13:27:44 +0800 Subject: [PATCH 14/18] mod: bug fix in reading TOC change misplaced carriage ret characters (0x0d) in toc entry to white space (0x20) to avoid displaying empty boxes. --- pdf.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pdf.c b/pdf.c index 15c6d3f8a..c375f93e1 100644 --- a/pdf.c +++ b/pdf.c @@ -104,6 +104,17 @@ static int walkTableOfContent(lua_State *L, fz_outline* ol, int *count, int dept lua_pushnumber(L, depth); lua_settable(L, -3); lua_pushstring(L, "title"); + + /* workaround for misplaced carriage ret in toc entry */ + int i = 0; + while (ol->title[i]) { + if (ol->title[i] == 0x0d) { + ol->title[i] = ' '; + } + /*printf("%x|", ol->title[i]);*/ + i++; + } + lua_pushstring(L, ol->title); lua_settable(L, -3); From 53d4016c649dc371d9239e889dd39ee1f6309833 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Fri, 2 Mar 2012 13:46:15 +0800 Subject: [PATCH 15/18] fix: move shiftmode and altmode to global now shiftmode and altmode is recoreded in Keys module. So all the UIs are sharing these two mode instead of remembering their own. These fix the bug in UI switchings. For instance, you use combo 'Alt'+'b' to fire up some menu in pdfreader, the altmode is set, but the alt key was released after the menu show up. Then the key release event will only be captured by the menu. So after you exit from the menu, the altmode is still set in pdfreader, which is not what we want. --- filechooser.lua | 14 ++++++++++++-- filesearcher.lua | 12 +++++++++++- inputbox.lua | 8 ++++---- keys.lua | 24 ++++++++++++++++++++---- pdfreader.lua | 30 +++++++++++++++--------------- selectmenu.lua | 12 +++++++++++- 6 files changed, 73 insertions(+), 27 deletions(-) diff --git a/filechooser.lua b/filechooser.lua index 04f4db7dc..631ccf885 100644 --- a/filechooser.lua +++ b/filechooser.lua @@ -146,9 +146,13 @@ function FileChooser:choose(ypos, height) end local ev = input.waitForEvent() if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then - --print("key code:"..ev.code) + print("key code:"..ev.code) ev.code = adjustFWKey(ev.code) - if ev.code == KEY_FW_UP then + if ev.code == KEY_SHIFT then + Keys.shiftmode = true + elseif ev.code == KEY_ALT then + Keys.altmode = true + elseif ev.code == KEY_FW_UP then prevItem() elseif ev.code == KEY_FW_DOWN then nextItem() @@ -214,6 +218,12 @@ function FileChooser:choose(ypos, height) elseif ev.code == KEY_BACK then return nil end + elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE + and ev.code == KEY_SHIFT then + Keys.shiftmode = false + elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE + and ev.code == KEY_ALT then + Keys.altmode = false end end end diff --git a/filesearcher.lua b/filesearcher.lua index 6466b2098..9af4b2cbe 100644 --- a/filesearcher.lua +++ b/filesearcher.lua @@ -216,7 +216,11 @@ function FileSearcher:choose(ypos, height, keywords) local ev = input.waitForEvent() if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then ev.code = adjustFWKey(ev.code) - if ev.code == KEY_FW_UP then + if ev.code == KEY_SHIFT then + Keys.shiftmode = true + elseif ev.code == KEY_ALT then + Keys.altmode = true + elseif ev.code == KEY_FW_UP then prevItem() elseif ev.code == KEY_FW_DOWN then nextItem() @@ -272,6 +276,12 @@ function FileSearcher:choose(ypos, height, keywords) elseif ev.code == KEY_BACK then return nil end + elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE + and ev.code == KEY_SHIFT then + Keys.shiftmode = false + elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE + and ev.code == KEY_ALT then + Keys.altmode = false end end end diff --git a/inputbox.lua b/inputbox.lua index 3408567c7..4eab4f95e 100644 --- a/inputbox.lua +++ b/inputbox.lua @@ -102,9 +102,9 @@ function InputBox:input(ypos, height, title, d_text) ev.code = adjustFWKey(ev.code) --local secs, usecs = util.gettime() if ev.code == KEY_SHIFT then - self.shiftmode = true + Keys.shiftmode = true elseif ev.code == KEY_ALT then - self.altmode = true + Keys.altmode = true elseif ev.code == KEY_FW_UP then elseif ev.code == KEY_FW_DOWN then elseif ev.code == KEY_A then @@ -200,10 +200,10 @@ function InputBox:input(ypos, height, title, d_text) --print("E: T="..ev.type.." V="..ev.value.." C="..ev.code.." DUR="..dur) elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE and ev.code == KEY_SHIFT then - self.shiftmode = false + Keys.shiftmode = false elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE and ev.code == KEY_ALT then - self.altmode = false + Keys.altmode = false end end end diff --git a/keys.lua b/keys.lua index 7e3f5aec7..fb520c643 100644 --- a/keys.lua +++ b/keys.lua @@ -24,6 +24,11 @@ and was licensed under the GPLv2 ]]-- +Keys = { + altmode = false, + shiftmode = false, +} + KEY_1 = 2 KEY_2 = 3 KEY_3 = 4 @@ -120,6 +125,17 @@ function set_emu_keycodes() KEY_ENTER = 36 + KEY_1 = 10 + KEY_2 = 11 + KEY_3 = 12 + KEY_4 = 13 + KEY_5 = 14 + KEY_6 = 15 + KEY_7 = 16 + KEY_8 = 17 + KEY_9 = 18 + KEY_0 = 19 + KEY_Q = 24 KEY_W = 25 KEY_E = 26 @@ -163,17 +179,17 @@ function getRotationMode() 1 for landscape with bottom on the right side of screen, etc. 2 - ----------- - | ------- | + +-----------+ + | +-------+ | | | | | | | | | | | | | 3 | | | | 1 | | | | | | | | - | ------- | + | +-------+ | | | - ----------- + +-----------+ 0 --]] if KEY_FW_DOWN == 116 then -- in EMU mode always return 0 diff --git a/pdfreader.lua b/pdfreader.lua index ef9a7ab58..ec98dd1a9 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -356,27 +356,27 @@ function PDFReader:inputloop() if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then local secs, usecs = util.gettime() if ev.code == KEY_SHIFT then - self.shiftmode = true + Keys.shiftmode = true elseif ev.code == KEY_ALT then - self.altmode = true + Keys.altmode = true elseif ev.code == KEY_PGFWD or ev.code == KEY_LPGFWD then - if self.shiftmode then + if Keys.shiftmode then self:setglobalzoom(self.globalzoom*1.2) - elseif self.altmode then + elseif Keys.altmode then self:setglobalzoom(self.globalzoom*1.1) else self:goto(self.pageno + 1) end elseif ev.code == KEY_PGBCK or ev.code == KEY_LPGBCK then - if self.shiftmode then + if Keys.shiftmode then self:setglobalzoom(self.globalzoom*0.8) - elseif self.altmode then + elseif Keys.altmode then self:setglobalzoom(self.globalzoom*0.9) else self:goto(self.pageno - 1) end elseif ev.code == KEY_BACK then - if self.altmode then + if Keys.altmode then -- altmode, exit pdfreader self:clearcache() if self.doc ~= nil then @@ -399,19 +399,19 @@ function PDFReader:inputloop() elseif ev.code == KEY_VMINUS then self:modify_gamma( 0.8 ) elseif ev.code == KEY_A then - if self.shiftmode then + if Keys.shiftmode then self:setglobalzoommode(self.ZOOM_FIT_TO_CONTENT) else self:setglobalzoommode(self.ZOOM_FIT_TO_PAGE) end elseif ev.code == KEY_S then - if self.shiftmode then + if Keys.shiftmode then self:setglobalzoommode(self.ZOOM_FIT_TO_CONTENT_WIDTH) else self:setglobalzoommode(self.ZOOM_FIT_TO_PAGE_WIDTH) end elseif ev.code == KEY_D then - if self.shiftmode then + if Keys.shiftmode then self:setglobalzoommode(self.ZOOM_FIT_TO_CONTENT_HEIGHT) else self:setglobalzoommode(self.ZOOM_FIT_TO_PAGE_HEIGHT) @@ -430,10 +430,10 @@ function PDFReader:inputloop() local x local y - if self.shiftmode then -- shift always moves in small steps + if Keys.shiftmode then -- shift always moves in small steps x = self.shift_x / 2 y = self.shift_y / 2 - elseif self.altmode then + elseif Keys.altmode then x = self.shift_x / 5 y = self.shift_y / 5 elseif self.pan_by_page then @@ -469,7 +469,7 @@ function PDFReader:inputloop() self.offset_y = self.min_offset_y end elseif ev.code == KEY_FW_PRESS then - if self.shiftmode then + if Keys.shiftmode then self.offset_x = 0 self.offset_y = 0 else @@ -487,9 +487,9 @@ function PDFReader:inputloop() print("E: T="..ev.type.." V="..ev.value.." C="..ev.code.." DUR="..dur) elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE and ev.code == KEY_SHIFT then print "shift haha" - self.shiftmode = false + Keys.shiftmode = false elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE and ev.code == KEY_ALT then - self.altmode = false + Keys.altmode = false end end end diff --git a/selectmenu.lua b/selectmenu.lua index 8c6219f60..9057ca9b1 100644 --- a/selectmenu.lua +++ b/selectmenu.lua @@ -169,7 +169,11 @@ function SelectMenu:choose(ypos, height) local ev = input.waitForEvent() if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then ev.code = adjustFWKey(ev.code) - if ev.code == KEY_FW_UP then + if ev.code == KEY_SHIFT then + Keys.shiftmode = true + elseif ev.code == KEY_ALT then + Keys.altmode = true + elseif ev.code == KEY_FW_UP then prevItem() elseif ev.code == KEY_FW_DOWN then nextItem() @@ -201,6 +205,12 @@ function SelectMenu:choose(ypos, height) elseif ev.code == KEY_BACK then return nil end + elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE + and ev.code == KEY_SHIFT then + Keys.shiftmode = false + elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE + and ev.code == KEY_ALT then + Keys.altmode = false end end end From 1713e2ab0b055706c956eab5539a54715b7f4df5 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Fri, 2 Mar 2012 14:21:15 +0800 Subject: [PATCH 16/18] fix: refresh screen more elegantly after reader exit --- reader.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/reader.lua b/reader.lua index cdc5983f6..c25ea7ec0 100755 --- a/reader.lua +++ b/reader.lua @@ -117,4 +117,7 @@ reader_settings:savesetting("cfont", FontChooser.cfont) reader_settings:close() input.closeAll() -os.execute('test -e /proc/keypad && echo "send '..KEY_HOME..'" > /proc/keypad ') +--os.execute('test -e /proc/keypad && echo "send '..KEY_HOME..'" > /proc/keypad ') +if optarg["d"] ~= "emu" then + os.execute('echo "send '..KEY_MENU..'" > /proc/keypad;echo "send '..KEY_MENU..'" > /proc/keypad') +end From 6614bbe33d80a55c4907fd845dac1a50b3256df8 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Fri, 2 Mar 2012 18:38:34 +0800 Subject: [PATCH 17/18] mod: handle shift and alt key events in adjustKeyEvents() --- filechooser.lua | 17 ++++------------- filesearcher.lua | 14 ++------------ inputbox.lua | 14 ++------------ keys.lua | 18 +++++++++++++++++- pdfreader.lua | 27 +++++++-------------------- selectmenu.lua | 14 ++------------ 6 files changed, 34 insertions(+), 70 deletions(-) diff --git a/filechooser.lua b/filechooser.lua index 93a022e64..d2ca88b5c 100644 --- a/filechooser.lua +++ b/filechooser.lua @@ -144,15 +144,12 @@ function FileChooser:choose(ypos, height) fb:refresh(0, 0, ypos, fb.bb:getWidth(), height) pagedirty = false end + local ev = input.waitForEvent() + print("key code:"..ev.code) + ev.code = adjustKeyEvents(ev) if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then - print("key code:"..ev.code) - ev.code = adjustFWKey(ev.code) - if ev.code == KEY_SHIFT then - Keys.shiftmode = true - elseif ev.code == KEY_ALT then - Keys.altmode = true - elseif ev.code == KEY_FW_UP then + if ev.code == KEY_FW_UP then prevItem() elseif ev.code == KEY_FW_DOWN then nextItem() @@ -211,12 +208,6 @@ function FileChooser:choose(ypos, height) elseif ev.code == KEY_BACK then return nil end - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE - and ev.code == KEY_SHIFT then - Keys.shiftmode = false - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE - and ev.code == KEY_ALT then - Keys.altmode = false end end end diff --git a/filesearcher.lua b/filesearcher.lua index 9af4b2cbe..25c2a4e2a 100644 --- a/filesearcher.lua +++ b/filesearcher.lua @@ -214,13 +214,9 @@ function FileSearcher:choose(ypos, height, keywords) end local ev = input.waitForEvent() + ev.code = adjustKeyEvents(ev) if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then - ev.code = adjustFWKey(ev.code) - if ev.code == KEY_SHIFT then - Keys.shiftmode = true - elseif ev.code == KEY_ALT then - Keys.altmode = true - elseif ev.code == KEY_FW_UP then + if ev.code == KEY_FW_UP then prevItem() elseif ev.code == KEY_FW_DOWN then nextItem() @@ -276,12 +272,6 @@ function FileSearcher:choose(ypos, height, keywords) elseif ev.code == KEY_BACK then return nil end - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE - and ev.code == KEY_SHIFT then - Keys.shiftmode = false - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE - and ev.code == KEY_ALT then - Keys.altmode = false end end end diff --git a/inputbox.lua b/inputbox.lua index 4eab4f95e..ef5cdfc4a 100644 --- a/inputbox.lua +++ b/inputbox.lua @@ -98,14 +98,10 @@ function InputBox:input(ypos, height, title, d_text) end local ev = input.waitForEvent() + ev.code = adjustKeyEvents(ev) 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 - Keys.shiftmode = true - elseif ev.code == KEY_ALT then - Keys.altmode = true - elseif ev.code == KEY_FW_UP then + if ev.code == KEY_FW_UP then elseif ev.code == KEY_FW_DOWN then elseif ev.code == KEY_A then self:addChar("a") @@ -198,12 +194,6 @@ function InputBox:input(ypos, height, title, d_text) --local nsecs, nusecs = util.gettime() --local dur = (nsecs - secs) * 1000000 + nusecs - usecs --print("E: T="..ev.type.." V="..ev.value.." C="..ev.code.." DUR="..dur) - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE - and ev.code == KEY_SHIFT then - Keys.shiftmode = false - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE - and ev.code == KEY_ALT then - Keys.altmode = false end end end diff --git a/keys.lua b/keys.lua index a503498e6..3c4c25568 100644 --- a/keys.lua +++ b/keys.lua @@ -201,7 +201,23 @@ function getRotationMode() return mode end -function adjustFWKey(code) +function adjustKeyEvents(ev) + if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then + if ev.code == KEY_SHIFT then + Keys.shiftmode = true + elseif ev.code == KEY_ALT then + Keys.altmode = true + end + elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE then + if ev.code == KEY_SHIFT then + Keys.shiftmode = false + elseif ev.code == KEY_ALT then + Keys.altmode = false + end + end + + -- adjust five way key according to rotation mode + local code = ev.code if getRotationMode() == 0 then return code elseif getRotationMode() == 1 then diff --git a/pdfreader.lua b/pdfreader.lua index 7380c99f6..850637a68 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -45,10 +45,6 @@ PDFReader = { pan_y = 0, pan_margin = 20, - -- keep track of input state: - shiftmode = false, -- shift pressed - altmode = false, -- alt pressed - -- the pdf document: doc = nil, -- the document's setting store: @@ -369,17 +365,13 @@ end function PDFReader:inputloop() while 1 do local ev = input.waitForEvent() + ev.code = adjustKeyEvents(ev) 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 - Keys.shiftmode = true - elseif ev.code == KEY_ALT then - Keys.altmode = true - elseif ev.code == KEY_PGFWD or ev.code == KEY_LPGFWD then - if self.shiftmode then + if ev.code == KEY_PGFWD or ev.code == KEY_LPGFWD then + if Keys.shiftmode then self:setglobalzoom(self.globalzoom+0.2) - elseif self.altmode then + elseif Keys.altmode then self:setglobalzoom(self.globalzoom+0.1) else if self.pan_by_page then @@ -389,9 +381,9 @@ function PDFReader:inputloop() self:goto(self.pageno + 1) end elseif ev.code == KEY_PGBCK or ev.code == KEY_LPGBCK then - if self.shiftmode then + if Keys.shiftmode then self:setglobalzoom(self.globalzoom-0.2) - elseif self.altmode then + elseif Keys.altmode then self:setglobalzoom(self.globalzoom-0.1) else if self.pan_by_page then @@ -512,7 +504,7 @@ function PDFReader:inputloop() self.offset_y = self.min_offset_y end elseif ev.code == KEY_FW_PRESS then - if self.shiftmode then + if Keys.shiftmode then if self.pan_by_page then self.offset_x = self.pan_x self.offset_y = self.pan_y @@ -537,11 +529,6 @@ function PDFReader:inputloop() local nsecs, nusecs = util.gettime() local dur = (nsecs - secs) * 1000000 + nusecs - usecs print("E: T="..ev.type.." V="..ev.value.." C="..ev.code.." DUR="..dur) - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE and ev.code == KEY_SHIFT then - print "shift haha" - Keys.shiftmode = false - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE and ev.code == KEY_ALT then - Keys.altmode = false end end end diff --git a/selectmenu.lua b/selectmenu.lua index 9057ca9b1..42be614c7 100644 --- a/selectmenu.lua +++ b/selectmenu.lua @@ -167,13 +167,9 @@ function SelectMenu:choose(ypos, height) end local ev = input.waitForEvent() + ev.code = adjustKeyEvents(ev) if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then - ev.code = adjustFWKey(ev.code) - if ev.code == KEY_SHIFT then - Keys.shiftmode = true - elseif ev.code == KEY_ALT then - Keys.altmode = true - elseif ev.code == KEY_FW_UP then + if ev.code == KEY_FW_UP then prevItem() elseif ev.code == KEY_FW_DOWN then nextItem() @@ -205,12 +201,6 @@ function SelectMenu:choose(ypos, height) elseif ev.code == KEY_BACK then return nil end - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE - and ev.code == KEY_SHIFT then - Keys.shiftmode = false - elseif ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_RELEASE - and ev.code == KEY_ALT then - Keys.altmode = false end end end From 8a03358139fecac412e7e8135acb4171bfb86747 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Fri, 2 Mar 2012 20:27:53 +0800 Subject: [PATCH 18/18] fix: fail to set search path correctly in readdir() --- filesearcher.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/filesearcher.lua b/filesearcher.lua index 25c2a4e2a..55ef1892e 100644 --- a/filesearcher.lua +++ b/filesearcher.lua @@ -43,7 +43,7 @@ function FileSearcher:readdir() for __, d in pairs(self.dirs) do -- handle files in d for f in lfs.dir(d) do - if lfs.attributes(self.path.."/"..f, "mode") == "directory" + if lfs.attributes(d.."/"..f, "mode") == "directory" and f ~= "." and f~= ".." and not string.match(f, "^%.[^.]") then table.insert(new_dirs, d.."/"..f) elseif string.match(f, ".+%.[pP][dD][fF]$") then