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.
pull/4993/head
poire-z 5 years ago committed by GitHub
parent 4515a36059
commit bf07c44009
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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)

@ -57,82 +57,6 @@ Note that this may not be ensured under some conditions: in scroll mode, when a
},
}
},
{
icon = "resources/icons/appbar.column.two.large.png",
options = {
{
name = "view_mode",
name_text = S.VIEW_MODE,
toggle = {S.VIEW_SCROLL, S.VIEW_PAGE},
values = {1, 0},
default_value = 0,
args = {"scroll", "page"},
default_arg = "page",
event = "SetViewMode",
name_text_hold_callback = optionsutil.showValues,
help_text = _([[- 'scroll' mode allows you to scroll the text like you would in a web browser (the 'Page Overlap' setting is only available in this mode).
- 'page' mode splits the text into pages, at the most acceptable places (page numbers and the number of pages may change when you change fonts, margins, styles, etc.).]]),
},
{
name = "render_dpi",
name_text = S.ZOOM_DPI,
toggle = {S.OFF, "48", "96¹¹", "167", "212", "300"},
values = {0, 48, 96, 167, 212, 300},
default_value = 96,
args = {0, 48, 96, 167, 212, 300},
event = "SetRenderDPI",
name_text_hold_callback = optionsutil.showValues,
help_text = _([[Sets the DPI used to scale absolute CSS units and images:
- off: ignore absolute units (old engine behavior).
- 96¹¹: at 96 DPI, 1 CSS pixel = 1 screen pixel and images are rendered at their original dimensions.
- other values scale CSS absolute units and images by a factor (300 DPI = x3, 48 DPI = x0.5)
Using your device's actual DPI will ensure 1 cm in CSS actually translates to 1 cm on screen.
Note that your selected font size is not affected by this setting.]]),
},
{
name = "line_spacing",
name_text = S.LINE_SPACING,
buttonprogress = true,
values = {
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_TINY,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_TINY,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XX_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_L_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_L_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XL_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XXL_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_LARGE,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_LARGE,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XX_LARGE,
},
default_pos = 7,
default_value = DCREREADER_CONFIG_LINE_SPACE_PERCENT_MEDIUM,
event = "SetLineSpace",
args = {
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_TINY,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_TINY,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XX_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_L_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_L_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XL_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XXL_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_LARGE,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_LARGE,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XX_LARGE,
},
name_text_hold_callback = optionsutil.showValues,
-- used by showValues
name_text_suffix = "%",
name_text_true_values = true,
},
}
},
{
icon = "resources/icons/appbar.crop.large.png",
options = {
@ -167,6 +91,22 @@ Note that your selected font size is not affected by this setting.]]),
},
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,
@ -230,6 +170,83 @@ Note that your selected font size is not affected by this setting.]]),
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 = {
{
name = "view_mode",
name_text = S.VIEW_MODE,
toggle = {S.VIEW_SCROLL, S.VIEW_PAGE},
values = {1, 0},
default_value = 0,
args = {"scroll", "page"},
default_arg = "page",
event = "SetViewMode",
name_text_hold_callback = optionsutil.showValues,
help_text = _([[- 'scroll' mode allows you to scroll the text like you would in a web browser (the 'Page Overlap' setting is only available in this mode).
- 'page' mode splits the text into pages, at the most acceptable places (page numbers and the number of pages may change when you change fonts, margins, styles, etc.).]]),
},
{
name = "render_dpi",
name_text = S.ZOOM_DPI,
toggle = {S.OFF, "48", "96¹¹", "167", "212", "300"},
values = {0, 48, 96, 167, 212, 300},
default_value = 96,
args = {0, 48, 96, 167, 212, 300},
event = "SetRenderDPI",
name_text_hold_callback = optionsutil.showValues,
help_text = _([[Sets the DPI used to scale absolute CSS units and images:
- off: ignore absolute units (old engine behavior).
- 96¹¹: at 96 DPI, 1 CSS pixel = 1 screen pixel and images are rendered at their original dimensions.
- other values scale CSS absolute units and images by a factor (300 DPI = x3, 48 DPI = x0.5)
Using your device's actual DPI will ensure 1 cm in CSS actually translates to 1 cm on screen.
Note that your selected font size is not affected by this setting.]]),
},
{
name = "line_spacing",
name_text = S.LINE_SPACING,
buttonprogress = true,
values = {
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_TINY,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_TINY,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XX_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_L_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_L_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XL_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XXL_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_LARGE,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_LARGE,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XX_LARGE,
},
default_pos = 7,
default_value = DCREREADER_CONFIG_LINE_SPACE_PERCENT_MEDIUM,
event = "SetLineSpace",
args = {
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_TINY,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_TINY,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XX_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_L_SMALL,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_L_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XL_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XXL_MEDIUM,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_LARGE,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_X_LARGE,
DCREREADER_CONFIG_LINE_SPACE_PERCENT_XX_LARGE,
},
name_text_hold_callback = optionsutil.showValues,
-- used by showValues
name_text_suffix = "%",
name_text_true_values = true,
},
}
},

@ -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")

Loading…
Cancel
Save