From 4f35834b2ecddc8a78f424f2b0a0de4cf0034627 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 3 Dec 2014 11:01:07 +0800 Subject: [PATCH 1/8] wrap computation intensive functions in hook free env when makeing coverage test so that Travis CI job won't fail because of timeout. --- .luacov | 4 ++++ spec/unit/commonrequire.lua | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/.luacov b/.luacov index a6b55357a..41ee69a79 100644 --- a/.luacov +++ b/.luacov @@ -2,6 +2,10 @@ -- project folder as '.luacov' for project specific configuration -- @class module -- @name luacov.defaults + +-- global flag to indicate coverage test +LUACOV = true + return { -- default filename to load for config options if not provided diff --git a/spec/unit/commonrequire.lua b/spec/unit/commonrequire.lua index e9aedbf65..67c8ef4a4 100644 --- a/spec/unit/commonrequire.lua +++ b/spec/unit/commonrequire.lua @@ -21,3 +21,25 @@ Input.dummy = true -- turn on debug local DEBUG = require("dbg") --DEBUG:turnOn() + +-- remove debug hooks in wrapped function for better luacov performance +if LUACOV then + local function hook_free_call(callback) + local hook, mask, count = debug.gethook() + debug.sethook() + local res = callback() + debug.sethook(hook, mask) + return res + end + + local UIManager = require("ui/uimanager") + local uimanager_run = UIManager.run + function UIManager:run() + hook_free_call(function() return uimanager_run(UIManager) end) + end + + local screen_shot = Screen.shot + function Screen:shot(filename) + hook_free_call(function() return screen_shot(Screen, filename) end) + end +end From 6c9b7facbe46703660822c01e6f29399d6424380 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 3 Dec 2014 11:12:15 +0800 Subject: [PATCH 2/8] fix crash when removing highlighted bookmarks in PDF --- frontend/apps/reader/modules/readerhighlight.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 06af6cb26..aefcf7ddf 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -480,7 +480,7 @@ function ReaderHighlight:deleteHighlight(page, i) DEBUG("delete highlight") local removed = table.remove(self.view.highlight.saved[page], i) self.ui.bookmark:removeBookmark({ - page = self.ui.document.info.has_pages and removed.page or removed.pos0, + page = self.ui.document.info.has_pages and page or removed.pos0, datetime = removed.datetime, }) end From ef6235e4ae90b7d5320ed505ecf3f9796eead01a Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 3 Dec 2014 11:33:54 +0800 Subject: [PATCH 3/8] fix #1305 --- frontend/apps/reader/modules/readerpaging.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 24fd3e964..ad4c5ac04 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -345,7 +345,7 @@ function ReaderPaging:onPanRelease(arg, ges) else self.last_pan_relative_y = 0 -- trigger partial refresh - UIManager:setDirty(nil, "partial") + UIManager:setDirty(nil, "full") end end From b767394fc2075829c93f6b3479c6c8fb2fac505b Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 3 Dec 2014 12:55:53 +0800 Subject: [PATCH 4/8] fix #1150 by adding FOLLOW_LINK_TIMEOUT variable --- defaults.lua | 5 +++++ frontend/apps/reader/modules/readerlink.lua | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/defaults.lua b/defaults.lua index 5bb771b53..9f46d0de8 100644 --- a/defaults.lua +++ b/defaults.lua @@ -58,6 +58,11 @@ DCREREADER_TWO_PAGE_THRESHOLD = 7 -- page overlap pixels DOVERLAPPIXELS = 30 +-- timeout to show link rectangle around links +-- default to 0.5 second +-- set to 0 to disable showing rectangle and follow link immediately +FOLLOW_LINK_TIMEOUT = 0.5 + -- customizable tap zones(rectangles) -- x: x coordinate of top left corner in proportion of screen width -- y: y coordinate of top left corner in proportion of screen height diff --git a/frontend/apps/reader/modules/readerlink.lua b/frontend/apps/reader/modules/readerlink.lua index fa1d2d855..b4972ad88 100644 --- a/frontend/apps/reader/modules/readerlink.lua +++ b/frontend/apps/reader/modules/readerlink.lua @@ -90,7 +90,7 @@ function ReaderLink:onTap(arg, ges) if sbox then UIManager:show(LinkBox:new{ box = sbox, - timeout = 0.5, + timeout = FOLLOW_LINK_TIMEOUT, callback = function() self:onGotoLink(link) end }) return true From 846836dceb77002536baf31bf79897d5e2d165d7 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 3 Dec 2014 14:06:43 +0800 Subject: [PATCH 5/8] fix #1275 Full refresh when highlighting text is quite annoying, I fixed it by using 'ui' refresh type. And this patch also fixed a bug that after cleaning temporary highlights the screen is not refreshed. --- frontend/apps/reader/modules/readerhighlight.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index aefcf7ddf..f3ba54439 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -123,6 +123,7 @@ function ReaderHighlight:clear() if self.hold_pos then self.hold_pos = nil self.selected_text = nil + UIManager:setDirty(self.dialog, "partial") return true end end @@ -278,7 +279,7 @@ function ReaderHighlight:onHoldPan(arg, ges) self.selected_word = nil end end - UIManager:setDirty(self.dialog, "partial") + UIManager:setDirty(self.dialog, "ui") end function ReaderHighlight:lookup(selected_word) From c43885b917f177e0cfe37996f35e65bc32e3d8e4 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 3 Dec 2014 14:26:00 +0800 Subject: [PATCH 6/8] show debug info when JSON data cannot be decoded --- frontend/apps/reader/modules/readerdictionary.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/apps/reader/modules/readerdictionary.lua b/frontend/apps/reader/modules/readerdictionary.lua index 2c4bd6ac9..4ce6ed0ea 100644 --- a/frontend/apps/reader/modules/readerdictionary.lua +++ b/frontend/apps/reader/modules/readerdictionary.lua @@ -76,6 +76,7 @@ function ReaderDictionary:stardictLookup(word, box) --DEBUG("lookup result table:", word, results) self:showDict(word, tidy_markup(results), box) else + DEBUG("JSON data cannot be decoded", results) -- dummy results results = { { From 35545169a62acfefd5e567ecf4c4992010a17248 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 3 Dec 2014 16:32:38 +0800 Subject: [PATCH 7/8] zoom mode is meaningless when reflowing, so disable zoom mode options in reflow mode --- frontend/apps/reader/modules/readercropping.lua | 4 +++- frontend/apps/reader/modules/readerzooming.lua | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/apps/reader/modules/readercropping.lua b/frontend/apps/reader/modules/readercropping.lua index 57c65184f..36c5e964e 100644 --- a/frontend/apps/reader/modules/readercropping.lua +++ b/frontend/apps/reader/modules/readercropping.lua @@ -85,7 +85,9 @@ function ReaderCropping:onPageCrop(mode) -- backup original zoom mode as cropping use "page" zoom mode self.orig_zoom_mode = self.view.zoom_mode if mode == "auto" then - self:setCropZoomMode(true) + if self.document.configurable.text_wrap ~= 1 then + self:setCropZoomMode(true) + end return end -- backup original view dimen diff --git a/frontend/apps/reader/modules/readerzooming.lua b/frontend/apps/reader/modules/readerzooming.lua index 8e4611251..de6e1a845 100644 --- a/frontend/apps/reader/modules/readerzooming.lua +++ b/frontend/apps/reader/modules/readerzooming.lua @@ -295,6 +295,9 @@ function ReaderZooming:addToMainMenu(tab_item_table) if self.ui.document.info.has_pages then table.insert(tab_item_table.typeset, { text = _("Switch zoom mode"), + enabled_func = function() + return self.ui.document.configurable.text_wrap ~= 1 + end, sub_item_table = { { text = _("Zoom to fit content width"), From b0e2ce2a8b30dc1bbd4c1dcef66c69393d9e07f9 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 3 Dec 2014 18:37:00 +0800 Subject: [PATCH 8/8] update comment about reverting full refresh in onPanRelease --- frontend/apps/reader/modules/readerpaging.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index ad4c5ac04..a5cbaa447 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -344,7 +344,7 @@ function ReaderPaging:onPanRelease(arg, ges) end else self.last_pan_relative_y = 0 - -- trigger partial refresh + -- trigger full refresh to clear ghosting generated by previous fast refresh UIManager:setDirty(nil, "full") end end