From 8b09ee7cf10e51d903c2c21bd5628c25a3177e35 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 12 Feb 2014 15:22:15 +0800 Subject: [PATCH 1/7] disable tap zone for config menu by default --- defaults.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults.lua b/defaults.lua index 245880f1d..4172ac7cf 100644 --- a/defaults.lua +++ b/defaults.lua @@ -59,7 +59,7 @@ DLANDSCAPE_CLOCKWISE_ROTATION = true -- w: width of tap zone in proportion of screen width -- h: height of tap zone in proportion of screen height DTAP_ZONE_MENU = {x = 1/8, y = 0, w = 3/4, h = 1/4} -DTAP_ZONE_CONFIG = {x = 0, y = 11/12, w = 1, h = 1/12} +DTAP_ZONE_CONFIG = {x = 0, y = 0, w = 0, h = 0} DTAP_ZONE_FORWARD = {x = 1/4, y = 0, w = 3/4, h = 1} DTAP_ZONE_BACKWARD = {x = 0, y = 0, w = 1/4, h = 1} DTAP_ZONE_BOOKMARK = {x = 7/8, y = 0, w = 1/8, h = 1/8} From 9f507e6447287c90fb2a1fd2184f65dd95ff350c Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 12 Feb 2014 15:26:56 +0800 Subject: [PATCH 2/7] add 'full/mini' options for progress bar of crereader --- frontend/document/credocument.lua | 5 ++++ frontend/ui/data/creoptions.lua | 10 +++++++ frontend/ui/data/koptoptions.lua | 18 ++++++------ frontend/ui/data/strings.lua | 9 ++++-- frontend/ui/reader/readercoptlistener.lua | 3 ++ frontend/ui/reader/readerfooter.lua | 36 ++++++++++++++++++++--- frontend/ui/reader/readerview.lua | 23 +++++---------- frontend/ui/readerui.lua | 2 -- 8 files changed, 73 insertions(+), 33 deletions(-) diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index ad106eab3..9899ebb38 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -362,6 +362,11 @@ function CreDocument:isXPointerInCurrentPage(xp) return self._document:isXPointerInCurrentPage(xp) end +function CreDocument:setStatusLineProp(prop) + DEBUG("CreDocument: set status line property", prop) + self._document:setStringProperty("window.status.line", prop) +end + function CreDocument:register(registry) registry:addProvider("txt", "application/txt", self) registry:addProvider("epub", "application/epub", self) diff --git a/frontend/ui/data/creoptions.lua b/frontend/ui/data/creoptions.lua index 22103eb5a..ab2f592fe 100644 --- a/frontend/ui/data/creoptions.lua +++ b/frontend/ui/data/creoptions.lua @@ -121,6 +121,16 @@ local CreOptions = { default_arg = "page", event = "SetViewMode", }, + { + name = "status_line", + name_text = S.PROGRESS_BAR, + toggle = {S.FULL, S.MINI}, + values = {0, 1}, + default_value = 0, + args = {0, 1}, + default_arg = 0, + event = "SetStatusLine", + }, { name = "embedded_css", name_text = S.EMBEDDED_STYLE, diff --git a/frontend/ui/data/koptoptions.lua b/frontend/ui/data/koptoptions.lua index 6e42c2ac6..3ef7ec97d 100644 --- a/frontend/ui/data/koptoptions.lua +++ b/frontend/ui/data/koptoptions.lua @@ -39,15 +39,6 @@ local KoptOptions = { { icon = "resources/icons/appbar.column.two.large.png", options = { - { - name = "full_screen", - name_text = S.FULL_SCREEN, - toggle = {S.ON, S.OFF}, - values = {1, 0}, - default_value = DFULL_SCREEN, - event = "SetFullScreen", - args = {true, false}, - }, { name = "page_scroll", name_text = S.SCROLL_MODE, @@ -57,6 +48,15 @@ local KoptOptions = { event = "ToggleScrollMode", args = {true, false}, }, + { + name = "full_screen", + name_text = S.PROGRESS_BAR, + toggle = {S.OFF, S.ON}, + values = {1, 0}, + default_value = DFULL_SCREEN, + event = "SetFullScreen", + args = {true, false}, + }, { name = "page_margin", name_text = S.PAGE_MARGIN, diff --git a/frontend/ui/data/strings.lua b/frontend/ui/data/strings.lua index 163a20362..a5ae01e8a 100644 --- a/frontend/ui/data/strings.lua +++ b/frontend/ui/data/strings.lua @@ -20,11 +20,12 @@ S.DEFECT_SIZE = _("Defect Size") S.RENDER_QUALITY = _("Render Quality") S.AUTO_STRAIGHTEN = _("Auto Straighten") S.INDENTATION = _("Indentation") -S.FONT_WEIGHT = _("Font weight") +S.FONT_WEIGHT = _("Font Weight") S.GAMMA = _("Gamma") -S.VIEW_MODE = _("View mode") -S.EMBEDDED_STYLE = _("Embedded style") +S.VIEW_MODE = _("View Mode") +S.EMBEDDED_STYLE = _("Embedded Style") S.WRITING_DIR = _("Writing Direction") +S.PROGRESS_BAR = _("Progress Bar") S.ON = _("on") S.OFF = _("off") @@ -55,5 +56,7 @@ S.LTR = _("LTR") S.RTL = _("RTL") S.TBRTL = _("TBRTL") S.TBLTR = _("TBLTR") +S.FULL = _("full") +S.MINI = _("mini") return S diff --git a/frontend/ui/reader/readercoptlistener.lua b/frontend/ui/reader/readercoptlistener.lua index b29b56c91..802914c2f 100644 --- a/frontend/ui/reader/readercoptlistener.lua +++ b/frontend/ui/reader/readercoptlistener.lua @@ -20,6 +20,9 @@ function ReaderCoptListener:onReadSettings(config) self.ui:handleEvent(Event:new("SetViewMode", "scroll")) end) end + + local status_line = config:readSetting("copt_status_line") or 0 + self.document:setStatusLineProp(status_line) end function ReaderCoptListener:onSetFontSize(font_size) diff --git a/frontend/ui/reader/readerfooter.lua b/frontend/ui/reader/readerfooter.lua index 7c078bbd1..a03608ac7 100644 --- a/frontend/ui/reader/readerfooter.lua +++ b/frontend/ui/reader/readerfooter.lua @@ -63,7 +63,7 @@ function ReaderFooter:init() self.dimen = self[1]:getSize() self.pageno = self.view.state.page self.pages = self.view.document.info.number_of_pages - self:updateFooter() + self:updateFooterPage() if Device:isTouchDevice() then self.ges_events = { TapFooter = { @@ -76,9 +76,10 @@ function ReaderFooter:init() end end -function ReaderFooter:updateFooter() +function ReaderFooter:updateFooterPage() if type(self.pageno) ~= "number" then return end self.progress_bar.percentage = self.pageno / self.pages + if self.show_time then self.progress_text.text = os.date("%H:%M") else @@ -86,10 +87,27 @@ function ReaderFooter:updateFooter() end end +function ReaderFooter:updateFooterPos() + if type(self.position) ~= "number" then return end + self.progress_bar.percentage = self.position / self.doc_height + + if self.show_time then + self.progress_text.text = os.date("%H:%M") + else + self.progress_text.text = string.format("%1.f", self.progress_bar.percentage*100).."%" + end +end + function ReaderFooter:onPageUpdate(pageno) self.pageno = pageno self.pages = self.view.document.info.number_of_pages - self:updateFooter() + self:updateFooterPage() +end + +function ReaderFooter:onPosUpdate(pos) + self.position = pos + self.doc_height = self.view.document.info.doc_height + self:updateFooterPos() end function ReaderFooter:onTapFooter(arg, ges) @@ -101,7 +119,11 @@ function ReaderFooter:onTapFooter(arg, ges) else self.show_time = not self.show_time end - self:updateFooter() + if self.pageno then + self:updateFooterPage() + else + self:updateFooterPos() + end UIManager:setDirty(self.view.dialog, "partial") -- consume this tap when footer is visible if self.visible then @@ -109,4 +131,10 @@ function ReaderFooter:onTapFooter(arg, ges) end end +function ReaderFooter:onSetStatusLine(status_line) + self.view.footer_visible = status_line == 1 and true or false + self.ui.document:setStatusLineProp(status_line) + self.ui:handleEvent(Event:new("UpdatePos")) +end + return ReaderFooter diff --git a/frontend/ui/reader/readerview.lua b/frontend/ui/reader/readerview.lua index 6dc0eb9b9..8fe98d89a 100644 --- a/frontend/ui/reader/readerview.lua +++ b/frontend/ui/reader/readerview.lua @@ -13,7 +13,7 @@ local ReaderView = OverlapGroup:new{ -- single page state state = { - page = 0, + page = nil, pos = 0, zoom = 1.0, rotation = 0, @@ -422,7 +422,7 @@ This method is supposed to be only used by ReaderPaging --]] function ReaderView:recalculate() local page_size = nil - if self.ui.document.info.has_pages then + if self.ui.document.info.has_pages and self.state.page then self.page_area = self:getPageArea( self.state.page, self.state.zoom, @@ -547,24 +547,17 @@ end function ReaderView:onReadSettings(config) self.render_mode = config:readSetting("render_mode") or 0 - local screen_mode = config:readSetting("screen_mode") + local screen_mode = config:readSetting("screen_mode") or "portrait" if screen_mode then Screen:setScreenMode(screen_mode) - table.insert(self.ui.postInitCallback, function() - self:onSetScreenMode(screen_mode, config:readSetting("rotation_mode")) - end) + self:onSetScreenMode(screen_mode, config:readSetting("rotation_mode")) end self.state.gamma = config:readSetting("gamma") or DGLOBALGAMMA - local full_screen = config:readSetting("kopt_full_screen") - if full_screen == nil then - full_screen = self.document.configurable.full_screen - end - self.footer_visible = full_screen == 0 and true or false + local full_screen = config:readSetting("kopt_full_screen") or self.document.configurable.full_screen + local status_line = config:readSetting("copt_status_line") or self.document.configurable.status_line + self.footer_visible = (full_screen == 0 or status_line == 1) and true or false self:resetLayout() - local page_scroll = config:readSetting("kopt_page_scroll") - if page_scroll == nil then - page_scroll = self.document.configurable.page_scroll - end + local page_scroll = config:readSetting("kopt_page_scroll") or self.document.configurable.page_scroll self.page_scroll = page_scroll == 1 and true or false self.highlight.saved = config:readSetting("highlight") or {} end diff --git a/frontend/ui/readerui.lua b/frontend/ui/readerui.lua index 4256d1eac..95ab3d1ea 100644 --- a/frontend/ui/readerui.lua +++ b/frontend/ui/readerui.lua @@ -264,8 +264,6 @@ function ReaderUI:init() --DEBUG(self.doc_settings) -- we only read settings after all the widgets are initialized self:handleEvent(Event:new("ReadSettings", self.doc_settings)) - -- notify childs of dimensions - self:handleEvent(Event:new("SetDimensions", self.dimen)) for _,v in ipairs(self.postInitCallback) do v() From 4fcb39494cbb6341d53361a226bdbd6529829f31 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 12 Feb 2014 15:43:38 +0800 Subject: [PATCH 3/7] use mini progress bar by default --- defaults.lua | 5 +++++ frontend/ui/data/creoptions.lua | 4 ++-- frontend/ui/reader/readercoptlistener.lua | 2 +- frontend/ui/reader/readerfooter.lua | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/defaults.lua b/defaults.lua index 4172ac7cf..26ec2f5c0 100644 --- a/defaults.lua +++ b/defaults.lua @@ -98,6 +98,11 @@ DCREREADER_CONFIG_MARGIN_SIZES_SMALL = {5, 10, 5, 10} DCREREADER_CONFIG_MARGIN_SIZES_MEDIUM = {10, 15, 10, 15} DCREREADER_CONFIG_MARGIN_SIZES_LARGE = {20, 20, 20, 20} +-- crereader progress bar +-- 0 for top "full" progress bar +-- 1 for bottom "mini" progress bar +DCREREADER_PROGRESS_BAR = 1 + -- gesture detector defaults DGESDETECT_DISABLE_DOUBLE_TAP = true diff --git a/frontend/ui/data/creoptions.lua b/frontend/ui/data/creoptions.lua index ab2f592fe..adbfbf1fd 100644 --- a/frontend/ui/data/creoptions.lua +++ b/frontend/ui/data/creoptions.lua @@ -126,9 +126,9 @@ local CreOptions = { name_text = S.PROGRESS_BAR, toggle = {S.FULL, S.MINI}, values = {0, 1}, - default_value = 0, + default_value = DCREREADER_PROGRESS_BAR, args = {0, 1}, - default_arg = 0, + default_arg = DCREREADER_PROGRESS_BAR, event = "SetStatusLine", }, { diff --git a/frontend/ui/reader/readercoptlistener.lua b/frontend/ui/reader/readercoptlistener.lua index 802914c2f..8e8bf894d 100644 --- a/frontend/ui/reader/readercoptlistener.lua +++ b/frontend/ui/reader/readercoptlistener.lua @@ -21,7 +21,7 @@ function ReaderCoptListener:onReadSettings(config) end) end - local status_line = config:readSetting("copt_status_line") or 0 + local status_line = config:readSetting("copt_status_line") or DCREREADER_PROGRESS_BAR self.document:setStatusLineProp(status_line) end diff --git a/frontend/ui/reader/readerfooter.lua b/frontend/ui/reader/readerfooter.lua index a03608ac7..a808f8097 100644 --- a/frontend/ui/reader/readerfooter.lua +++ b/frontend/ui/reader/readerfooter.lua @@ -126,7 +126,7 @@ function ReaderFooter:onTapFooter(arg, ges) end UIManager:setDirty(self.view.dialog, "partial") -- consume this tap when footer is visible - if self.visible then + if self.view.footer_visible then return true end end From f21d34f682ec5d42756cc790ab1501c1f9836cee Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 12 Feb 2014 20:32:23 +0800 Subject: [PATCH 4/7] add two finger swipe gestures for showing TOC and bookmarks two_finger_swipe to east is for TOC two_finger_swipe to west is for bookmarks --- frontend/ui/gesturerange.lua | 5 +++++ frontend/ui/reader/readerbookmark.lua | 17 ++++++++++++++++- frontend/ui/reader/readertoc.lua | 17 +++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/frontend/ui/gesturerange.lua b/frontend/ui/gesturerange.lua index 4b7d7363d..ed5ae7ab9 100644 --- a/frontend/ui/gesturerange.lua +++ b/frontend/ui/gesturerange.lua @@ -39,6 +39,11 @@ function GestureRange:match(gs) return false end end + if self.direction then + if self.direction ~= gs.direction then + return false + end + end return true end diff --git a/frontend/ui/reader/readerbookmark.lua b/frontend/ui/reader/readerbookmark.lua index f717d43b7..56132babd 100644 --- a/frontend/ui/reader/readerbookmark.lua +++ b/frontend/ui/reader/readerbookmark.lua @@ -18,11 +18,26 @@ local ReaderBookmark = InputContainer:new{ function ReaderBookmark:init() if Device:hasKeyboard() then self.key_events = { - ShowToc = { + ShowBookmark = { { "B" }, doc = _("show bookmarks") }, } end + if Device:isTouchDevice() then + self.ges_events = { + ShowBookmark = { + GestureRange:new{ + ges = "two_finger_swipe", + range = Geom:new{ + x = 0, y = 0, + w = Screen:getWidth(), + h = Screen:getHeight(), + }, + direction = "west" + } + }, + } + end self.ui.menu:registerToMainMenu(self) end diff --git a/frontend/ui/reader/readertoc.lua b/frontend/ui/reader/readertoc.lua index d74b2f165..9bd7d6794 100644 --- a/frontend/ui/reader/readertoc.lua +++ b/frontend/ui/reader/readertoc.lua @@ -1,6 +1,8 @@ local InputContainer = require("ui/widget/container/inputcontainer") local CenterContainer = require("ui/widget/container/centercontainer") +local GestureRange = require("ui/gesturerange") local Menu = require("ui/widget/menu") +local Geom = require("ui/geometry") local Screen = require("ui/screen") local Device = require("ui/device") local UIManager = require("ui/uimanager") @@ -20,6 +22,21 @@ function ReaderToc:init() doc = _("show Table of Content menu") }, } end + if Device:isTouchDevice() then + self.ges_events = { + ShowToc = { + GestureRange:new{ + ges = "two_finger_swipe", + range = Geom:new{ + x = 0, y = 0, + w = Screen:getWidth(), + h = Screen:getHeight(), + }, + direction = "east" + } + }, + } + end self.ui.menu:registerToMainMenu(self) end From 0b2cc17b692a6a6d02014a0d3bc764233407c886 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 12 Feb 2014 20:41:16 +0800 Subject: [PATCH 5/7] hold progress bar to show goto dialog --- frontend/ui/reader/readerfooter.lua | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/frontend/ui/reader/readerfooter.lua b/frontend/ui/reader/readerfooter.lua index a808f8097..1a69c4ed5 100644 --- a/frontend/ui/reader/readerfooter.lua +++ b/frontend/ui/reader/readerfooter.lua @@ -72,6 +72,12 @@ function ReaderFooter:init() range = self[1]:contentRange(), }, }, + HoldFooter = { + GestureRange:new{ + ges = "hold", + range = self[1]:contentRange(), + }, + }, } end end @@ -131,6 +137,11 @@ function ReaderFooter:onTapFooter(arg, ges) end end +function ReaderFooter:onHoldFooter(arg, ges) + self.ui:handleEvent(Event:new("ShowGotoDialog")) + return true +end + function ReaderFooter:onSetStatusLine(status_line) self.view.footer_visible = status_line == 1 and true or false self.ui.document:setStatusLineProp(status_line) From b26f040403f91a6d30ce4ab310a0a4f74f93f901 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 12 Feb 2014 21:47:58 +0800 Subject: [PATCH 6/7] fix hinting beyond page range --- frontend/ui/reader/readerhinting.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/ui/reader/readerhinting.lua b/frontend/ui/reader/readerhinting.lua index 2e68a82c9..ce6a1d0f4 100644 --- a/frontend/ui/reader/readerhinting.lua +++ b/frontend/ui/reader/readerhinting.lua @@ -7,7 +7,7 @@ local ReaderHinting = EventListener:new{ 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 + if self.view.state.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), From 8e11a5bf6d3104d7e93d57a0f9c6bd640c107e13 Mon Sep 17 00:00:00 2001 From: chrox Date: Wed, 12 Feb 2014 22:34:44 +0800 Subject: [PATCH 7/7] fix page states not updated in scroll mode --- frontend/ui/reader/readerzooming.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/ui/reader/readerzooming.lua b/frontend/ui/reader/readerzooming.lua index e00e31acb..57194ddc5 100644 --- a/frontend/ui/reader/readerzooming.lua +++ b/frontend/ui/reader/readerzooming.lua @@ -107,7 +107,7 @@ function ReaderZooming:onReadSettings(config) if not zoom_mode then zoom_mode = self.DEFAULT_ZOOM_MODE end - self.ui:handleEvent(Event:new("SetZoomMode", zoom_mode)) + self:setZoomMode(zoom_mode) end function ReaderZooming:onSaveSettings()