diff --git a/defaults.lua b/defaults.lua index 1eefe2292..396bf842e 100644 --- a/defaults.lua +++ b/defaults.lua @@ -1,7 +1,11 @@ -- number of page turns between full screen refresh --- default to full refresh on every page turn +-- default to do a full refresh on every 6 page turns DRCOUNTMAX = 6 +-- number of pages for hinting +-- default to pre-rendering 2 pages +DHINTCOUNT = 2 + -- full screen mode, 1 for true, 0 for false DFULL_SCREEN = 1 @@ -26,6 +30,10 @@ DOUTER_PAGE_COLOR = 0 -- supported view mode includes: "scroll" and "page" DCREREADER_VIEW_MODE = "page" +-- show dimmed area to indicate page overlap in "page" view mode, +-- default to false +DSHOWOVERLAP = false + -- koptreader config defaults DKOPTREADER_CONFIG_FONT_SIZE = 1.0 -- range from 0.1 to 3.0 DKOPTREADER_CONFIG_TEXT_WRAP = 0 -- 1 = on, 0 = off @@ -34,7 +42,7 @@ DKOPTREADER_CONFIG_DETECT_INDENT = 1 -- 1 = enable, 0 = disable DKOPTREADER_CONFIG_DEFECT_SIZE = 1.0 -- range from 0.0 to 3.0 DKOPTREADER_CONFIG_PAGE_MARGIN = 0.10 -- range from 0.0 to 1.0 DKOPTREADER_CONFIG_LINE_SPACING = 1.2 -- range from 0.5 to 2.0 -DKOPTREADER_CONFIG_RENDER_QUALITY = 0.8 -- range from 0.5 to 1.0 +DKOPTREADER_CONFIG_RENDER_QUALITY = 1.0 -- range from 0.5 to 2.0 DKOPTREADER_CONFIG_AUTO_STRAIGHTEN = 0 -- range from 0 to 10 DKOPTREADER_CONFIG_JUSTIFICATION = -1 -- -1 = auto, 0 = left, 1 = center, 2 = right, 3 = full DKOPTREADER_CONFIG_MAX_COLUMNS = 2 -- range from 1 to 4 diff --git a/frontend/document/koptinterface.lua b/frontend/document/koptinterface.lua index 50422d185..1fa2f01a1 100644 --- a/frontend/document/koptinterface.lua +++ b/frontend/document/koptinterface.lua @@ -46,6 +46,12 @@ function KoptInterface:createContext(doc, pageno, bbox) -- So there is no need to check background context when creating new context. local kc = KOPTContext.new() local screen_size = Screen:getSize() + local lang = doc.configurable.doc_language + if lang == "chi_sim" or lang == "chi_tra" or + lang == "jpn" or lang == "kor" then + kc:setCJKChar() + end + kc:setLanguage(lang) kc:setTrim(doc.configurable.trim_page) kc:setWrap(doc.configurable.text_wrap) kc:setIndent(doc.configurable.detect_indent) @@ -62,8 +68,7 @@ function KoptInterface:createContext(doc, pageno, bbox) kc:setDefectSize(doc.configurable.defect_size) kc:setLineSpacing(doc.configurable.line_spacing) kc:setWordSpacing(doc.configurable.word_spacing) - kc:setLanguage(doc.configurable.doc_language) - kc:setBBox(bbox.x0, bbox.y0, bbox.x1, bbox.y1) + if bbox then kc:setBBox(bbox.x0, bbox.y0, bbox.x1, bbox.y1) end if Dbg.is_on then kc:setDebug() end return kc end @@ -133,12 +138,6 @@ function KoptInterface:getReflewTextBoxes(doc, pageno) if cached then local kc = self:waitForContext(cached.kctx) --kc:setDebug() - local lang = doc.configurable.doc_language - if lang == "chi_sim" or lang == "chi_tra" or - lang == "jpn" or lang == "kor" then - kc:setCJKChar() - end - kc:setLanguage(lang) local fullwidth, fullheight = kc:getPageDim() local boxes = kc:getWordBoxes(0, 0, fullwidth, fullheight) Cache:insert(hash, CacheItem:new{ rfpgboxes = boxes }) @@ -154,14 +153,8 @@ function KoptInterface:getTextBoxes(doc, pageno) local cached = Cache:check(hash) if not cached then local kc_hash = "kctx|"..doc.file.."|"..pageno - local kc = KOPTContext.new() + local kc = self:createContext(doc, pageno) kc:setDebug() - local lang = doc.configurable.doc_language - if lang == "chi_sim" or lang == "chi_tra" or - lang == "jpn" or lang == "kor" then - kc:setCJKChar() - end - kc:setLanguage(lang) local page = doc._document:openPage(pageno) page:getPagePix(kc) local fullwidth, fullheight = kc:getPageDim() diff --git a/frontend/ui/reader/readerhinting.lua b/frontend/ui/reader/readerhinting.lua index 1fad17ba1..cc16c0c6e 100644 --- a/frontend/ui/reader/readerhinting.lua +++ b/frontend/ui/reader/readerhinting.lua @@ -3,6 +3,21 @@ ReaderHinting = EventListener:new{ hinting_states = {} } +function ReaderHinting:onHintPage() + if not self.view.hinting then return true end + for i=1, DHINTCOUNT do + if self.zoom.current_page + i <= self.ui.document.info.number_of_pages then + self.ui.document:hintPage( + self.view.state.page + i, + self.zoom:getZoom(self.view.state.page + i), + self.view.state.rotation, + self.view.state.gamma, + self.view.render_mode) + end + end + return true +end + function ReaderHinting:onSetHinting(hinting) self.view.hinting = hinting end @@ -16,4 +31,4 @@ end function ReaderHinting:onRestoreHinting() self.view.hinting = table.remove(self.hinting_states) return true -end \ No newline at end of file +end diff --git a/frontend/ui/reader/readerpaging.lua b/frontend/ui/reader/readerpaging.lua index 0ce9c14ee..0df23431c 100644 --- a/frontend/ui/reader/readerpaging.lua +++ b/frontend/ui/reader/readerpaging.lua @@ -5,7 +5,7 @@ ReaderPaging = InputContainer:new{ number_of_pages = 0, visible_area = nil, page_area = nil, - show_overlap_enable = true, + show_overlap_enable = DSHOWOVERLAP, overlap = scaleByDPI(20), flip_steps = {0,1,2,5,10,20,50,100} } diff --git a/frontend/ui/reader/readerzooming.lua b/frontend/ui/reader/readerzooming.lua index d9618f1c8..073818e39 100644 --- a/frontend/ui/reader/readerzooming.lua +++ b/frontend/ui/reader/readerzooming.lua @@ -161,19 +161,6 @@ function ReaderZooming:onReZoom() return true end -function ReaderZooming:onHintPage() - if not self.view.hinting then return true end - if self.current_page < self.ui.document.info.number_of_pages then - self.ui.document:hintPage( - self.view.state.page + 1, - self:getZoom(self.view.state.page + 1), - self.view.state.rotation, - self.view.state.gamma, - self.view.render_mode) - end - return true -end - function ReaderZooming:getZoom(pageno) -- check if we're in bbox mode and work on bbox if that's the case local zoom = nil diff --git a/frontend/ui/readerui.lua b/frontend/ui/readerui.lua index 171283245..699470024 100644 --- a/frontend/ui/readerui.lua +++ b/frontend/ui/readerui.lua @@ -173,6 +173,7 @@ function ReaderUI:init() -- hinting controller local hinter = ReaderHinting:new{ dialog = self.dialog, + zoom = zoomer, view = self[1], ui = self, document = self.document, diff --git a/frontend/ui/widget/text.lua b/frontend/ui/widget/text.lua index c063cc1ac..f29a6273b 100644 --- a/frontend/ui/widget/text.lua +++ b/frontend/ui/widget/text.lua @@ -153,11 +153,13 @@ function TextBoxWidget:_getVerticalList(alg) -- build horizontal list local h_list = {} for words in self.text:gmatch("[\32-\127\192-\255]+[\128-\191]*") do - for w in words:gsplit("%s+", true) do - local word_box = {} - word_box.word = w - word_box.width = sizeUtf8Text(0, Screen:getWidth(), self.face, w, true).x - table.insert(h_list, word_box) + for word in words:gsplit("%s+", true) do + for w in word:gsplit("%p+", true) do + local word_box = {} + word_box.word = w + word_box.width = sizeUtf8Text(0, Screen:getWidth(), self.face, w, true).x + table.insert(h_list, word_box) + end end end diff --git a/koreader-base b/koreader-base index 7266a9276..88c26d984 160000 --- a/koreader-base +++ b/koreader-base @@ -1 +1 @@ -Subproject commit 7266a9276b7cb62b44b31291ce54c58cf96005a1 +Subproject commit 88c26d984c3232cdd6d03b19a0da5f6c49351810