From a6609119eca027bd1375bc54bc5a530a8ad3aa18 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 12 Mar 2013 20:28:01 +0800 Subject: [PATCH] disable hinting temporarily in config dialog and flipping mode and cropping dialog Since hinting is of little use in these situations. --- frontend/ui/reader/readerconfig.lua | 5 ++++- frontend/ui/reader/readercropping.lua | 4 ++++ frontend/ui/reader/readerhinting.lua | 19 +++++++++++++++++++ frontend/ui/reader/readerpaging.lua | 1 + frontend/ui/reader/readerview.lua | 11 ++++++++--- frontend/ui/reader/readerzooming.lua | 1 + frontend/ui/readerui.lua | 9 +++++++++ 7 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 frontend/ui/reader/readerhinting.lua diff --git a/frontend/ui/reader/readerconfig.lua b/frontend/ui/reader/readerconfig.lua index 794d5da12..f40e60222 100644 --- a/frontend/ui/reader/readerconfig.lua +++ b/frontend/ui/reader/readerconfig.lua @@ -82,8 +82,11 @@ function ReaderConfig:onShowConfigMenu() ui = self.ui, configurable = self.configurable, config_options = self.options, + close_callback = function() + self.ui:handleEvent(Event:new("RestoreHinting")) + end, } - + self.ui:handleEvent(Event:new("DisableHinting")) UIManager:show(self.config_dialog) return true diff --git a/frontend/ui/reader/readercropping.lua b/frontend/ui/reader/readercropping.lua index 0dd9fd571..396380257 100644 --- a/frontend/ui/reader/readercropping.lua +++ b/frontend/ui/reader/readercropping.lua @@ -63,6 +63,8 @@ function ReaderCropping:onPageCrop(mode) -- backup original page scroll self.orig_page_scroll = self.view.page_scroll self.view.page_scroll = false + -- backup and disable original hinting state + self.ui:handleEvent(Event:new("DisableHinting")) -- backup original reflow mode as cropping use non-reflow mode self.orig_reflow_mode = self.document.configurable.text_wrap if self.orig_reflow_mode == 1 then @@ -110,6 +112,8 @@ function ReaderCropping:onCancelPageCrop() end function ReaderCropping:exitPageCrop(confirmed) + -- restore hinting state + self.ui:handleEvent(Event:new("RestoreHinting")) -- restore page scroll self.view.page_scroll = self.orig_page_scroll -- restore view bgcolor diff --git a/frontend/ui/reader/readerhinting.lua b/frontend/ui/reader/readerhinting.lua new file mode 100644 index 000000000..1fad17ba1 --- /dev/null +++ b/frontend/ui/reader/readerhinting.lua @@ -0,0 +1,19 @@ + +ReaderHinting = EventListener:new{ + hinting_states = {} +} + +function ReaderHinting:onSetHinting(hinting) + self.view.hinting = hinting +end + +function ReaderHinting:onDisableHinting() + table.insert(self.hinting_states, self.view.hinting) + self.view.hinting = false + return true +end + +function ReaderHinting:onRestoreHinting() + self.view.hinting = table.remove(self.hinting_states) + return true +end \ No newline at end of file diff --git a/frontend/ui/reader/readerpaging.lua b/frontend/ui/reader/readerpaging.lua index 5709a3390..22cc3efbc 100644 --- a/frontend/ui/reader/readerpaging.lua +++ b/frontend/ui/reader/readerpaging.lua @@ -143,6 +143,7 @@ function ReaderPaging:onToggleFlipping() if self.flipping_mode then self:updateOriginalPage(self.current_page) end + self.ui:handleEvent(Event:new("SetHinting", not self.flipping_mode)) UIManager:setDirty(self.view.dialog, "partial") end diff --git a/frontend/ui/reader/readerview.lua b/frontend/ui/reader/readerview.lua index e5f2f913f..c868568b5 100644 --- a/frontend/ui/reader/readerview.lua +++ b/frontend/ui/reader/readerview.lua @@ -31,7 +31,8 @@ ReaderView = OverlapGroup:new{ render_mode = 0, -- default to COLOR -- Crengine view mode view_mode = "page", -- default to page mode - + hinting = true, + -- visible area within current viewing page visible_area = Geom:new{x = 0, y = 0}, -- dimen for current viewing page @@ -148,7 +149,9 @@ function ReaderView:drawScrollPages(bb, x, y) pos.y = pos.y + self.page_gap.height end end - UIManager:scheduleIn(0, function() self.ui:handleEvent(Event:new("HintPage")) end) + UIManager:scheduleIn(0, function() + self.ui:handleEvent(Event:new("HintPage", self.hinting)) + end) end function ReaderView:drawPageGap(bb, x, y) @@ -170,7 +173,9 @@ function ReaderView:drawSinglePage(bb, x, y) self.state.rotation, self.state.gamma, self.render_mode) - UIManager:scheduleIn(0, function() self.ui:handleEvent(Event:new("HintPage")) end) + UIManager:scheduleIn(0, function() + self.ui:handleEvent(Event:new("HintPage", self.hinting)) + end) end function ReaderView:drawPageView(bb, x, y) diff --git a/frontend/ui/reader/readerzooming.lua b/frontend/ui/reader/readerzooming.lua index 3528c5ac2..df31cf29a 100644 --- a/frontend/ui/reader/readerzooming.lua +++ b/frontend/ui/reader/readerzooming.lua @@ -110,6 +110,7 @@ function ReaderZooming:onPageUpdate(new_page_no) 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, diff --git a/frontend/ui/readerui.lua b/frontend/ui/readerui.lua index ea69f128e..3a6dd54a2 100644 --- a/frontend/ui/readerui.lua +++ b/frontend/ui/readerui.lua @@ -15,6 +15,7 @@ require "ui/reader/readercropping" require "ui/reader/readerkopt" require "ui/reader/readercopt" require "ui/reader/readerscreenshot" +require "ui/reader/readerhinting" --[[ This is an abstraction for a reader interface @@ -132,6 +133,14 @@ function ReaderUI:init() document = self.document, } table.insert(self, cropper) + -- hinting controller + local hinter = ReaderHinting:new{ + dialog = self.dialog, + view = self[1], + ui = self, + document = self.document, + } + table.insert(self, hinter) else -- make sure we load document first before calling any callback table.insert(self.postInitCallback, function()