2
0
mirror of https://github.com/koreader/koreader synced 2024-11-10 01:10:34 +00:00

CRe margins: add toggle to sync top and bottom margins (#4990)

Also fix DogEar size update on margin change.
Also re-order cre bottom tabs to be like with kopt.
This commit is contained in:
poire-z 2019-05-01 22:18:50 +02:00 committed by GitHub
parent 4515a36059
commit bf07c44009
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 155 additions and 103 deletions

View File

@ -3,6 +3,7 @@ local Event = require("ui/event")
local InfoMessage = require("ui/widget/infomessage")
local InputContainer = require("ui/widget/container/inputcontainer")
local UIManager = require("ui/uimanager")
local Math = require("optmath")
local lfs = require("libs/libkoreader-lfs")
local _ = require("gettext")
local Screen = require("device").screen
@ -71,6 +72,9 @@ function ReaderTypeset:onReadSettings(config)
DCREREADER_CONFIG_B_MARGIN_SIZES_LARGE
self.unscaled_margins = { h_margins[1], t_margin, h_margins[2], b_margin }
self:onSetPageMargins(self.unscaled_margins, true)
self.sync_t_b_page_margins = config:readSetting("copt_sync_t_b_page_margins") or
G_reader_settings:readSetting("copt_sync_t_b_page_margins") or 0
self.sync_t_b_page_margins = self.sync_t_b_page_margins == 1 and true or false
-- default to disable floating punctuation
-- the floating punctuation should not be boolean value for the following
@ -347,17 +351,47 @@ end
function ReaderTypeset:onSetPageHorizMargins(h_margins)
self.unscaled_margins = { h_margins[1], self.unscaled_margins[2], h_margins[2], self.unscaled_margins[4] }
self:onSetPageMargins(self.unscaled_margins)
self.ui:handleEvent(Event:new("SetPageMargins", self.unscaled_margins))
end
function ReaderTypeset:onSetPageTopMargin(t_margin)
self.unscaled_margins = { self.unscaled_margins[1], t_margin, self.unscaled_margins[3], self.unscaled_margins[4] }
self:onSetPageMargins(self.unscaled_margins)
if self.sync_t_b_page_margins then
self.unscaled_margins[4] = t_margin
-- Let ConfigDialog know so it can update it on screen and have it saved on quit
self.ui.document.configurable.b_page_margin = t_margin
end
self.ui:handleEvent(Event:new("SetPageMargins", self.unscaled_margins))
end
function ReaderTypeset:onSetPageBottomMargin(b_margin)
self.unscaled_margins = { self.unscaled_margins[1], self.unscaled_margins[2], self.unscaled_margins[3], b_margin }
self:onSetPageMargins(self.unscaled_margins)
if self.sync_t_b_page_margins then
self.unscaled_margins[2] = b_margin
-- Let ConfigDialog know so it can update it on screen and have it saved on quit
self.ui.document.configurable.t_page_margin = b_margin
end
self.ui:handleEvent(Event:new("SetPageMargins", self.unscaled_margins))
end
function ReaderTypeset:onSyncPageTopBottomMargins(toggle)
self.sync_t_b_page_margins = not self.sync_t_b_page_margins
if self.sync_t_b_page_margins then
-- Adjust current top and bottom margins if needed
if self.unscaled_margins[2] ~= self.unscaled_margins[4] then
-- Taking the rounded mean can change the vertical page height,
-- and so the previous lines layout. We could have used the mean
-- for the top, and the delta from the mean for the bottom (and
-- have them possibly not equal), but as these are unscaled here,
-- and later scaled, the end result could still be different.
-- So just take the mean and make them equal.
local mean_margin = Math.round((self.unscaled_margins[2] + self.unscaled_margins[4]) / 2)
self.ui.document.configurable.t_page_margin = mean_margin
self.ui.document.configurable.b_page_margin = mean_margin
self.unscaled_margins = { self.unscaled_margins[1], mean_margin, self.unscaled_margins[3], mean_margin }
self.ui:handleEvent(Event:new("SetPageMargins", self.unscaled_margins))
end
end
end
function ReaderTypeset:onSetPageMargins(margins, silent)

View File

@ -57,6 +57,123 @@ Note that this may not be ensured under some conditions: in scroll mode, when a
},
}
},
{
icon = "resources/icons/appbar.crop.large.png",
options = {
{
name = "h_page_margins",
name_text = S.H_PAGE_MARGINS,
buttonprogress = true,
values = {
DCREREADER_CONFIG_H_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_H_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_H_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XX_HUGE,
},
default_pos = 2,
default_value = DCREREADER_CONFIG_H_MARGIN_SIZES_MEDIUM,
event = "SetPageHorizMargins",
args = {
DCREREADER_CONFIG_H_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_H_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_H_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XX_HUGE,
},
name_text_hold_callback = optionsutil.showValuesHMargins,
},
{
name = "sync_t_b_page_margins",
name_text = S.SYNC_T_B_PAGE_MARGINS,
toggle = {S.OFF, S.ON},
values = {0, 1},
default_value = 0,
args = {false, true},
default_arg = false,
event = "SyncPageTopBottomMargins",
name_text_hold_callback = optionsutil.showValues,
help_text = _([[Keep top and bottom margins synchronized.
- 'off' allows different top and bottom margins.
- 'on' keeps top and bottom margins locked, ensuring text is vertically centered in the page.
In the top menu Settings Status bar, you can choose whether the bottom margin applies from the bottom of the screen, or from above the status bar.]]),
},
{
name = "t_page_margin",
name_text = S.T_PAGE_MARGIN,
buttonprogress = true,
fine_tune = true,
values = {
DCREREADER_CONFIG_T_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_T_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_T_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XX_HUGE,
},
default_pos = 3,
default_value = DCREREADER_CONFIG_T_MARGIN_SIZES_LARGE,
event = "SetPageTopMargin",
args = {
DCREREADER_CONFIG_T_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_T_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_T_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XX_HUGE,
},
name_text_hold_callback = optionsutil.showValues,
},
{
name = "b_page_margin",
name_text = S.B_PAGE_MARGIN,
buttonprogress = true,
fine_tune = true,
values = {
DCREREADER_CONFIG_B_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_B_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_B_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XX_HUGE,
},
default_pos = 3,
default_value = DCREREADER_CONFIG_B_MARGIN_SIZES_LARGE,
event = "SetPageBottomMargin",
args = {
DCREREADER_CONFIG_B_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_B_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_B_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XX_HUGE,
},
name_text_hold_callback = optionsutil.showValues,
help_text = _([[In the top menu → Settings → Status bar, you can choose whether the bottom margin applies from the bottom of the screen, or from above the status bar.]]),
},
}
},
{
icon = "resources/icons/appbar.column.two.large.png",
options = {
@ -133,106 +250,6 @@ Note that your selected font size is not affected by this setting.]]),
},
}
},
{
icon = "resources/icons/appbar.crop.large.png",
options = {
{
name = "h_page_margins",
name_text = S.H_PAGE_MARGINS,
buttonprogress = true,
values = {
DCREREADER_CONFIG_H_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_H_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_H_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XX_HUGE,
},
default_pos = 2,
default_value = DCREREADER_CONFIG_H_MARGIN_SIZES_MEDIUM,
event = "SetPageHorizMargins",
args = {
DCREREADER_CONFIG_H_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_H_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_H_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_H_MARGIN_SIZES_XX_HUGE,
},
name_text_hold_callback = optionsutil.showValuesHMargins,
},
{
name = "t_page_margin",
name_text = S.T_PAGE_MARGIN,
buttonprogress = true,
fine_tune = true,
values = {
DCREREADER_CONFIG_T_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_T_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_T_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XX_HUGE,
},
default_pos = 3,
default_value = DCREREADER_CONFIG_T_MARGIN_SIZES_LARGE,
event = "SetPageTopMargin",
args = {
DCREREADER_CONFIG_T_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_T_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_T_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_T_MARGIN_SIZES_XX_HUGE,
},
name_text_hold_callback = optionsutil.showValues,
},
{
name = "b_page_margin",
name_text = S.B_PAGE_MARGIN,
buttonprogress = true,
fine_tune = true,
values = {
DCREREADER_CONFIG_B_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_B_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_B_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XX_HUGE,
},
default_pos = 3,
default_value = DCREREADER_CONFIG_B_MARGIN_SIZES_LARGE,
event = "SetPageBottomMargin",
args = {
DCREREADER_CONFIG_B_MARGIN_SIZES_SMALL,
DCREREADER_CONFIG_B_MARGIN_SIZES_MEDIUM,
DCREREADER_CONFIG_B_MARGIN_SIZES_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_X_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XX_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XXX_LARGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_HUGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_X_HUGE,
DCREREADER_CONFIG_B_MARGIN_SIZES_XX_HUGE,
},
name_text_hold_callback = optionsutil.showValues,
},
}
},
{
icon = "resources/icons/appbar.text.size.large.png",
options = {

View File

@ -11,6 +11,7 @@ S.ZOOM_DPI = _("Zoom (dpi)")
S.H_PAGE_MARGINS = _("L/R Margins")
S.T_PAGE_MARGIN = _("Top Margin")
S.B_PAGE_MARGIN = _("Bottom Margin")
S.SYNC_T_B_PAGE_MARGINS = _("Sync T/B Margins")
S.LINE_SPACING = _("Line Spacing")
S.COLUMNS = _("Columns")
S.TEXT_ALIGN = _("Text Align")