From 912a8a496b0b2fb61952d4ec91c1158acd1110ec Mon Sep 17 00:00:00 2001 From: chrox Date: Sun, 15 Dec 2013 17:02:52 +0800 Subject: [PATCH 1/3] add customizable tap zones for tap forward/backward and config --- defaults.lua | 9 +++++++++ frontend/ui/reader/readerconfig.lua | 8 ++++---- frontend/ui/reader/readerpaging.lua | 16 ++++++++-------- frontend/ui/reader/readerrolling.lua | 16 ++++++++-------- frontend/ui/readerui.lua | 26 +++++++++++++------------- 5 files changed, 42 insertions(+), 33 deletions(-) diff --git a/defaults.lua b/defaults.lua index 9fdce7758..0b75ca58a 100644 --- a/defaults.lua +++ b/defaults.lua @@ -38,6 +38,15 @@ DSHOWOVERLAP = false -- default to false DSHOWHIDDENFILES = false +-- 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 +-- w: width of tap zone in proportion of screen width +-- h: height of tap zone in proportion of screen height +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_CONFIG = {x = 0, y = 11/12, w = 1, h = 1/12} + -- 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 diff --git a/frontend/ui/reader/readerconfig.lua b/frontend/ui/reader/readerconfig.lua index 693148882..ecc255a72 100644 --- a/frontend/ui/reader/readerconfig.lua +++ b/frontend/ui/reader/readerconfig.lua @@ -29,10 +29,10 @@ function ReaderConfig:initGesListener() GestureRange:new{ ges = "tap", range = Geom:new{ - x = 0, - y = 11*Screen:getHeight()/12, - w = Screen:getWidth(), - h = Screen:getHeight()/12, + x = Screen:getWidth()*DTAP_ZONE_CONFIG.x, + y = Screen:getHeight()*DTAP_ZONE_CONFIG.y, + w = Screen:getWidth()*DTAP_ZONE_CONFIG.w, + h = Screen:getHeight()*DTAP_ZONE_CONFIG.h, } } } diff --git a/frontend/ui/reader/readerpaging.lua b/frontend/ui/reader/readerpaging.lua index fcf551ec6..28f632ef0 100644 --- a/frontend/ui/reader/readerpaging.lua +++ b/frontend/ui/reader/readerpaging.lua @@ -62,10 +62,10 @@ function ReaderPaging:initGesListener() GestureRange:new{ ges = "tap", range = Geom:new{ - x = Screen:getWidth()/4, - y = Screen:getHeight()/4, - w = 3*Screen:getWidth()/4, - h = 2*Screen:getHeight()/3, + x = Screen:getWidth()*DTAP_ZONE_FORWARD.x, + y = Screen:getHeight()*DTAP_ZONE_FORWARD.y, + w = Screen:getWidth()*DTAP_ZONE_FORWARD.w, + h = Screen:getHeight()*DTAP_ZONE_FORWARD.h, } } }, @@ -73,10 +73,10 @@ function ReaderPaging:initGesListener() GestureRange:new{ ges = "tap", range = Geom:new{ - x = 0, - y = Screen:getHeight()/4, - w = Screen:getWidth()/4, - h = 2*Screen:getHeight()/3, + x = Screen:getWidth()*DTAP_ZONE_BACKWARD.x, + y = Screen:getHeight()*DTAP_ZONE_BACKWARD.y, + w = Screen:getWidth()*DTAP_ZONE_BACKWARD.w, + h = Screen:getHeight()*DTAP_ZONE_BACKWARD.h, } } }, diff --git a/frontend/ui/reader/readerrolling.lua b/frontend/ui/reader/readerrolling.lua index 1b3b5dfc5..1f8e4aec0 100644 --- a/frontend/ui/reader/readerrolling.lua +++ b/frontend/ui/reader/readerrolling.lua @@ -81,10 +81,10 @@ function ReaderRolling:initGesListener() GestureRange:new{ ges = "tap", range = Geom:new{ - x = Screen:getWidth()/4, - y = Screen:getHeight()/4, - w = 3*Screen:getWidth()/4, - h = 5*Screen:getHeight()/8, + x = Screen:getWidth()*DTAP_ZONE_FORWARD.x, + y = Screen:getHeight()*DTAP_ZONE_FORWARD.y, + w = Screen:getWidth()*DTAP_ZONE_FORWARD.w, + h = Screen:getHeight()*DTAP_ZONE_FORWARD.h, } } }, @@ -92,10 +92,10 @@ function ReaderRolling:initGesListener() GestureRange:new{ ges = "tap", range = Geom:new{ - x = 0, - y = Screen:getHeight()/4, - w = Screen:getWidth()/4, - h = 5*Screen:getHeight()/8, + x = Screen:getWidth()*DTAP_ZONE_BACKWARD.x, + y = Screen:getHeight()*DTAP_ZONE_BACKWARD.y, + w = Screen:getWidth()*DTAP_ZONE_BACKWARD.w, + h = Screen:getHeight()*DTAP_ZONE_BACKWARD.h, } } }, diff --git a/frontend/ui/readerui.lua b/frontend/ui/readerui.lua index 80120da6d..50e97ba04 100644 --- a/frontend/ui/readerui.lua +++ b/frontend/ui/readerui.lua @@ -138,18 +138,27 @@ function ReaderUI:init() ui = self } table.insert(self.active_widgets, reader_ss) + -- frontlight controller if Device:getFrontlight() then - -- frontlight controller table.insert(self, ReaderFrontLight:new{ dialog = self.dialog, view = self[1], ui = self }) end - + -- config panel controller + if self.document.info.configurable then + local config_dialog = ReaderConfig:new{ + configurable = self.document.configurable, + options = self.document.options, + dialog = self.dialog, + view = self[1], + ui = self + } + table.insert(self, config_dialog) + end + -- for page specific controller if self.document.info.has_pages then - -- for page specific controller - -- if needed, insert a paging container local pager = ReaderPaging:new{ dialog = self.dialog, @@ -225,15 +234,6 @@ function ReaderUI:init() }) end if self.document.info.configurable then - -- configurable controller - local config_dialog = ReaderConfig:new{ - configurable = self.document.configurable, - options = self.document.options, - dialog = self.dialog, - view = self[1], - ui = self - } - table.insert(self, config_dialog) -- kopt option controller local koptlistener = ReaderKoptListener:new{ dialog = self.dialog, From 90d91d567a7113ff0b7a5c0efd4dd59221aa76a0 Mon Sep 17 00:00:00 2001 From: chrox Date: Sun, 15 Dec 2013 20:18:10 +0800 Subject: [PATCH 2/3] add content range method in BottomContainer --- frontend/ui/widget/container/bottomcontainer.lua | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/frontend/ui/widget/container/bottomcontainer.lua b/frontend/ui/widget/container/bottomcontainer.lua index e9cfe97c8..26f3b9085 100644 --- a/frontend/ui/widget/container/bottomcontainer.lua +++ b/frontend/ui/widget/container/bottomcontainer.lua @@ -1,4 +1,5 @@ local WidgetContainer = require("ui/widget/container/widgetcontainer") +local Geom = require("ui/geometry") --[[ BottomContainer contains its content (1 widget) at the bottom of its own @@ -17,4 +18,14 @@ function BottomContainer:paintTo(bb, x, y) y + (self.dimen.h - contentSize.h)) end +function BottomContainer:contentRange() + local contentSize = self[1]:getSize() + return Geom:new{ + x = (self.dimen.x or 0) + math.floor((self.dimen.w - contentSize.w)/2), + y = (self.dimen.y or 0) + self.dimen.h - contentSize.h, + w = contentSize.w, + h = contentSize.h + } +end + return BottomContainer From 5dd96b87565d758414771ebfa553a20b7aa04fcd Mon Sep 17 00:00:00 2001 From: chrox Date: Sun, 15 Dec 2013 20:19:06 +0800 Subject: [PATCH 3/3] tap on reader footer will toggle time display --- frontend/ui/reader/readerfooter.lua | 38 ++++++++++++++++++++++++----- frontend/ui/reader/readerview.lua | 1 + 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/frontend/ui/reader/readerfooter.lua b/frontend/ui/reader/readerfooter.lua index 286901965..a3b4abe23 100644 --- a/frontend/ui/reader/readerfooter.lua +++ b/frontend/ui/reader/readerfooter.lua @@ -4,17 +4,23 @@ local RightContainer = require("ui/widget/container/rightcontainer") local BottomContainer = require("ui/widget/container/bottomcontainer") local FrameContainer = require("ui/widget/container/framecontainer") local ProgressWidget = require("ui/widget/progresswidget") +local HorizontalGroup = require("ui/widget/horizontalgroup") local TextWidget = require("ui/widget/textwidget") +local GestureRange = require("ui/gesturerange") +local UIManager = require("ui/uimanager") +local Device = require("ui/device") local Screen = require("ui/screen") local Geom = require("ui/geometry") local Font = require("ui/font") -local HorizontalGroup = require("ui/widget/horizontalgroup") +local DEBUG = require("dbg") local ReaderFooter = InputContainer:new{ + visible = true, pageno = nil, pages = nil, progress_percentage = 0.0, progress_text = "0 / 0", + show_time = false, bar_width = 0.88, text_width = 0.12, text_font_face = "ffont", @@ -57,15 +63,25 @@ function ReaderFooter:init() self.pageno = self.view.state.page self.pages = self.view.document.info.number_of_pages self:updateFooter() -end - -function ReaderFooter:paintTo(bb, x, y) - self[1]:paintTo(bb, x, y) + if Device:isTouchDevice() then + self.ges_events = { + TapFooter = { + GestureRange:new{ + ges = "tap", + range = self[1]:contentRange(), + }, + }, + } + end end function ReaderFooter:updateFooter() self.progress_bar.percentage = self.pageno / self.pages - self.progress_text.text = string.format("%d / %d", self.pageno, self.pages) + if self.show_time then + self.progress_text.text = os.date("%H:%M") + else + self.progress_text.text = string.format("%d / %d", self.pageno, self.pages) + end end function ReaderFooter:onPageUpdate(pageno) @@ -74,4 +90,14 @@ function ReaderFooter:onPageUpdate(pageno) self:updateFooter() end +function ReaderFooter:onTapFooter(arg, gev) + self.show_time = not self.show_time + self:updateFooter() + UIManager:setDirty(self.view.dialog) + -- consume this tap when footer is visible + if self.visible then + return true + end +end + return ReaderFooter diff --git a/frontend/ui/reader/readerview.lua b/frontend/ui/reader/readerview.lua index 162a65163..e56ac0b65 100644 --- a/frontend/ui/reader/readerview.lua +++ b/frontend/ui/reader/readerview.lua @@ -71,6 +71,7 @@ function ReaderView:resetLayout() } self.footer = ReaderFooter:new{ view = self, + visible = self.footer_visible, } self.flipping = ReaderFlipping:new{ view = self,