mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Merge pull request #1197 from chrox/fix_864
add an option to show an arrow to indicate page overlap
This commit is contained in:
@@ -160,7 +160,7 @@ function ReaderMenu:setUpdateItemTable()
|
||||
return self.ui.doc_settings:readSetting("proportional_screensaver") or false
|
||||
end
|
||||
table.insert(self.tab_item_table.typeset, {
|
||||
text = "Screensaver",
|
||||
text = _("Screensaver"),
|
||||
sub_item_table = {
|
||||
{
|
||||
text = _("Use this book's cover as screensaver"),
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -209,16 +209,29 @@ function ReaderRolling:onSaveSettings()
|
||||
end
|
||||
|
||||
function ReaderRolling:addToMainMenu(tab_item_table)
|
||||
table.insert(tab_item_table.typeset, {
|
||||
text = _("Show 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()
|
||||
-- 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
|
||||
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 = _("Page overlap"),
|
||||
enabled_func = function() return self.view.view_mode ~= "page" end,
|
||||
sub_item_table = page_overlap_menu,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user