diff --git a/frontend/ui/reader/readerflipping.lua b/frontend/ui/reader/readerflipping.lua index 14aad03c3..a6a3b9e70 100644 --- a/frontend/ui/reader/readerflipping.lua +++ b/frontend/ui/reader/readerflipping.lua @@ -41,17 +41,4 @@ function ReaderFlipping:onTap() return true end -function ReaderFlipping:onSetFlippingMode(flipping_mode) - if flipping_mode then - self.orig_reflow_mode = self.view.document.configurable.text_wrap - self.orig_scroll_mode = self.view.page_scroll - self.view.document.configurable.text_wrap = 0 - self.view.page_scroll = false - else - self.view.document.configurable.text_wrap = self.orig_reflow_mode - self.view.page_scroll = self.orig_scroll_mode - end - return true -end - return ReaderFlipping diff --git a/frontend/ui/reader/readerfooter.lua b/frontend/ui/reader/readerfooter.lua index 6d97a6802..9ff00ddb8 100644 --- a/frontend/ui/reader/readerfooter.lua +++ b/frontend/ui/reader/readerfooter.lua @@ -11,6 +11,7 @@ local UIManager = require("ui/uimanager") local Device = require("ui/device") local Screen = require("ui/screen") local Geom = require("ui/geometry") +local Event = require("ui/event") local Font = require("ui/font") local DEBUG = require("dbg") @@ -21,8 +22,8 @@ local ReaderFooter = InputContainer:new{ progress_percentage = 0.0, progress_text = "0 / 0", show_time = false, - bar_width = 0.88, - text_width = 0.12, + bar_width = 0.85, + text_width = 0.15, text_font_face = "ffont", text_font_size = 14, height = 19, @@ -90,8 +91,15 @@ function ReaderFooter:onPageUpdate(pageno) self:updateFooter() end -function ReaderFooter:onTapFooter(arg, gev) - self.show_time = not self.show_time +function ReaderFooter:onTapFooter(arg, ges) + if self.view.flipping_visible then + local pos = ges.pos + local dimen = self.progress_bar.dimen + local percentage = (pos.x - dimen.x)/dimen.w + self.ui:handleEvent(Event:new("GotoPercentage", percentage)) + else + self.show_time = not self.show_time + end self:updateFooter() UIManager:setDirty(self.view.dialog, "partial") -- consume this tap when footer is visible diff --git a/frontend/ui/reader/readerpaging.lua b/frontend/ui/reader/readerpaging.lua index 5c6647bbd..023d807bb 100644 --- a/frontend/ui/reader/readerpaging.lua +++ b/frontend/ui/reader/readerpaging.lua @@ -176,17 +176,37 @@ function ReaderPaging:onToggleFlipping() self.view.flipping_visible = not self.view.flipping_visible self.flipping_mode = self.view.flipping_visible self.flipping_page = self.current_page + if self.flipping_mode then self:updateOriginalPage(self.current_page) + self:enterFlippingMode() else self:updateOriginalPage(nil) + self:exitFlippingMode() end + self.view:resetLayout() self.ui:handleEvent(Event:new("SetFlippingMode", self.flipping_mode)) self.ui:handleEvent(Event:new("SetHinting", not self.flipping_mode)) self.ui:handleEvent(Event:new("ReZoom")) UIManager:setDirty(self.view.dialog, "partial") end +function ReaderPaging:enterFlippingMode() + self.orig_reflow_mode = self.view.document.configurable.text_wrap + self.orig_footer_mode = self.view.footer_visible + self.orig_scroll_mode = self.view.page_scroll + + self.view.document.configurable.text_wrap = 0 + self.view.page_scroll = false + self.view.footer_visible = true +end + +function ReaderPaging:exitFlippingMode() + self.view.document.configurable.text_wrap = self.orig_reflow_mode + self.view.page_scroll = self.orig_scroll_mode + self.view.footer_visible = self.orig_footer_mode +end + function ReaderPaging:updateOriginalPage(page) self.original_page = page end @@ -675,4 +695,11 @@ function ReaderPaging:onGotoPage(number) return true end +function ReaderPaging:onGotoPercentage(percentage) + if percentage < 0 then percentage = 0 end + if percentage > 1 then percentage = 1 end + self:gotoPage(math.floor(percentage*self.number_of_pages)) + return true +end + return ReaderPaging diff --git a/frontend/ui/reader/readerview.lua b/frontend/ui/reader/readerview.lua index 973994504..12573bf18 100644 --- a/frontend/ui/reader/readerview.lua +++ b/frontend/ui/reader/readerview.lua @@ -72,6 +72,7 @@ function ReaderView:resetLayout() } self.footer = ReaderFooter:new{ view = self, + ui = self.ui, visible = self.footer_visible, } self.flipping = ReaderFlipping:new{ diff --git a/frontend/ui/widget/progresswidget.lua b/frontend/ui/widget/progresswidget.lua index e93efb98c..9042d6a6d 100644 --- a/frontend/ui/widget/progresswidget.lua +++ b/frontend/ui/widget/progresswidget.lua @@ -1,4 +1,5 @@ local Widget = require("ui/widget/widget") +local Geom = require("ui/geometry") --[[ ProgressWidget shows a progress bar @@ -22,6 +23,11 @@ end function ProgressWidget:paintTo(bb, x, y) local my_size = self:getSize() + self.dimen = Geom:new{ + x = x, y = y, + w = my_size.w, + h = my_size.h + } bb:paintRoundedRect(x, y, my_size.w, my_size.h, self.bgcolor, self.radius) bb:paintBorder(x, y, my_size.w, my_size.h, self.bordersize, self.bordercolor, self.radius)