From ee3c5525f971525b2025e722a5b54a680e761837 Mon Sep 17 00:00:00 2001 From: chrox Date: Mon, 17 Nov 2014 21:44:13 +0800 Subject: [PATCH] add an option to show an arrow to indicate page overlap --- frontend/apps/reader/modules/readerpaging.lua | 29 ++++++++--- .../apps/reader/modules/readerrolling.lua | 29 ++++++++--- frontend/apps/reader/modules/readerview.lua | 50 ++++++++++++++++--- 3 files changed, 86 insertions(+), 22 deletions(-) diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index e77ea3541..d2343648c 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -136,19 +136,32 @@ function ReaderPaging:onSaveSettings() end function ReaderPaging:addToMainMenu(tab_item_table) + -- FIXME: repeated code with page overlap menu for readerrolling + -- needs to keep only one copy of the logic as for the DRY principle. + -- The difference between the two menus is only the enabled func. + local page_overlap_menu = { + { + text_func = function() + return self.show_overlap_enable and _("Disable") or _("Enable") + end, + callback = function() + self.show_overlap_enable = not self.show_overlap_enable + if not self.show_overlap_enable then + self.view:resetDimArea() + end + end + }, + } + for _, menu_entry in ipairs(self.view:genOverlapStyleMenu()) do + table.insert(page_overlap_menu, menu_entry) + end table.insert(tab_item_table.typeset, { - text = _("Show page overlap"), + text = _("Page overlap"), enabled_func = function() return not self.view.page_scroll and self.zoom_mode ~= "page" and not self.zoom_mode:find("height") end, - checked_func = function() return self.show_overlap_enable end, - callback = function() - self.show_overlap_enable = not self.show_overlap_enable - if not self.show_overlap_enable then - self.view:resetDimArea() - end - end + sub_item_table = page_overlap_menu, }) end diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 4398a2d62..25ad6b4a8 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -209,16 +209,29 @@ function ReaderRolling:onSaveSettings() end function ReaderRolling:addToMainMenu(tab_item_table) + -- FIXME: repeated code with page overlap menu for readerpaging + -- needs to keep only one copy of the logic as for the DRY principle. + -- The difference between the two menus is only the enabled func. + local page_overlap_menu = { + { + text_func = function() + return self.show_overlap_enable and _("Disable") or _("Enable") + end, + callback = function() + self.show_overlap_enable = not self.show_overlap_enable + if not self.show_overlap_enable then + self.view:resetDimArea() + end + end + }, + } + for _, menu_entry in ipairs(self.view:genOverlapStyleMenu()) do + table.insert(page_overlap_menu, menu_entry) + end table.insert(tab_item_table.typeset, { - text = _("Show page overlap"), + text = _("Page overlap"), enabled_func = function() return self.view.view_mode ~= "page" end, - checked_func = function() return self.show_overlap_enable end, - callback = function() - self.show_overlap_enable = not self.show_overlap_enable - if not self.show_overlap_enable then - self.view:resetDimArea() - end - end + sub_item_table = page_overlap_menu, }) end diff --git a/frontend/apps/reader/modules/readerview.lua b/frontend/apps/reader/modules/readerview.lua index e9e693c75..94ce574a8 100644 --- a/frontend/apps/reader/modules/readerview.lua +++ b/frontend/apps/reader/modules/readerview.lua @@ -1,7 +1,9 @@ +local AlphaContainer = require("ui/widget/container/alphacontainer") local ReaderFlipping = require("apps/reader/modules/readerflipping") local ReaderFooter = require("apps/reader/modules/readerfooter") local ReaderDogear = require("apps/reader/modules/readerdogear") local OverlapGroup = require("ui/widget/overlapgroup") +local ImageWidget = require("ui/widget/imagewidget") local UIManager = require("ui/uimanager") local Screen = require("device").screen local Geom = require("ui/geometry") @@ -92,6 +94,12 @@ function ReaderView:resetLayout() view = self, ui = self.ui, } + self.arrow = AlphaContainer:new{ + alpha = 0.6, + ImageWidget:new{ + file = "resources/icons/appbar.control.expand.png", + } + } self[1] = self.dogear self[2] = self.footer self[3] = self.flipping @@ -121,12 +129,16 @@ function ReaderView:paintTo(bb, x, y) end -- dim last read area - if self.document.view_mode ~= "page" - and self.dim_area.w ~= 0 and self.dim_area.h ~= 0 then - bb:dimRect( - self.dim_area.x, self.dim_area.y, - self.dim_area.w, self.dim_area.h - ) + if self.dim_area.w ~= 0 and self.dim_area.h ~= 0 then + --DEBUG("dim area", self.dim_area) + if self.page_overlap_style == "dim" then + bb:dimRect( + self.dim_area.x, self.dim_area.y, + self.dim_area.w, self.dim_area.h + ) + elseif self.page_overlap_style == "arrow" then + self.arrow:paintTo(bb, 0, self.dim_area.h) + end end -- draw saved highlight if self.highlight_visible then @@ -599,6 +611,7 @@ function ReaderView:onReadSettings(config) 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 {} + self.page_overlap_style = config:readSetting("page_overlap_style") or "dim" end function ReaderView:onPageUpdate(new_page_no) @@ -666,6 +679,7 @@ function ReaderView:onSaveSettings() self.ui.doc_settings:saveSetting("rotation_mode", self.cur_rotation_mode) self.ui.doc_settings:saveSetting("gamma", self.state.gamma) self.ui.doc_settings:saveSetting("highlight", self.highlight.saved) + self.ui.doc_settings:saveSetting("page_overlap_style", self.page_overlap_style) end function ReaderView:autoSaveSettings() @@ -701,4 +715,28 @@ function ReaderView:getRenderModeMenuTable() } end +local page_overlap_styles = { + arrow = _("Arrow"), + dim = _("Gray out"), +} + +function ReaderView:genOverlapStyleMenu() + local view = self + local get_overlap_style = function(style) + return { + text = page_overlap_styles[style], + checked_func = function() + return view.page_overlap_style == style + end, + callback = function() + view.page_overlap_style = style + end + } + end + return { + get_overlap_style("arrow"), + get_overlap_style("dim"), + } +end + return ReaderView