mirror of
https://github.com/koreader/koreader
synced 2024-11-02 15:40:16 +00:00
6baa2af5fb
It might be slower, but is needed to properly display books in arabic, indic... Also bump crengine: use FreeType "light" hinting algorithm, which hints on the y-axis only (and so avoid messing with advances and kerning on the x-axis).
501 lines
23 KiB
Lua
501 lines
23 KiB
Lua
local Device = require("device")
|
||
local S = require("ui/data/strings")
|
||
local optionsutil = require("ui/data/optionsutil")
|
||
local _ = require("gettext")
|
||
|
||
-- add multiply operator to Aa dict
|
||
local Aa = setmetatable({"Aa"}, {
|
||
__mul = function(t, mul)
|
||
local new = {}
|
||
for i = 1, mul do
|
||
for _, v in ipairs(t) do table.insert(new, v) end
|
||
end
|
||
return new
|
||
end
|
||
})
|
||
|
||
local CreOptions = {
|
||
prefix = 'copt',
|
||
{
|
||
icon = "resources/icons/appbar.transform.rotate.right.large.png",
|
||
options = {
|
||
{
|
||
name = "screen_mode",
|
||
name_text = S.SCREEN_MODE,
|
||
toggle = {S.PORTRAIT, S.LANDSCAPE},
|
||
alternate = false,
|
||
args = {"portrait", "landscape"},
|
||
default_arg = "portrait",
|
||
current_func = function() return Device.screen:getScreenMode() end,
|
||
event = "ChangeScreenMode",
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
},
|
||
{
|
||
name = "visible_pages",
|
||
name_text = S.DUAL_PAGES,
|
||
toggle = {S.OFF, S.ON},
|
||
values = {1, 2},
|
||
default_value = 1,
|
||
args = {1, 2},
|
||
default_arg = 1,
|
||
event = "SetVisiblePages",
|
||
current_func = function()
|
||
-- If not in landscape mode, shows "1" as selected
|
||
if Device.screen:getScreenMode() ~= "landscape" then
|
||
return 1
|
||
end
|
||
-- if we return nil, ConfigDialog will pick the one from the
|
||
-- configurable as if we hadn't provided this 'current_func'
|
||
end,
|
||
enabled_func = function(configurable)
|
||
return Device.screen:getScreenMode() == "landscape" and
|
||
optionsutil.enableIfEquals(configurable, "view_mode", 0) -- "page"
|
||
end,
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
help_text = _([[In landscape mode, you can choose to display one or two pages of the book on the screen.
|
||
Note that this may not be ensured under some conditions: in scroll mode, when a very big font size is used, or on devices with a very low aspect ratio.]]),
|
||
},
|
||
}
|
||
},
|
||
{
|
||
icon = "resources/icons/appbar.crop.large.png",
|
||
options = {
|
||
{
|
||
name = "h_page_margins",
|
||
name_text = S.H_PAGE_MARGINS,
|
||
buttonprogress = true,
|
||
fine_tune = 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,
|
||
},
|
||
delay_repaint = true,
|
||
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,
|
||
event = "SyncPageTopBottomMargins",
|
||
args = {false, true},
|
||
default_arg = false,
|
||
delay_repaint = true,
|
||
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,
|
||
},
|
||
delay_repaint = true,
|
||
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,
|
||
},
|
||
delay_repaint = true,
|
||
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 = "block_rendering_mode",
|
||
name_text = S.BLOCK_RENDERING_MODE,
|
||
toggle = {S.LEGACY, S.FLAT, S.BOOK, S.WEB},
|
||
values = {0, 1, 2, 3},
|
||
default_value = 2,
|
||
args = {0, 1, 2, 3},
|
||
default_arg = 2,
|
||
event = "SetBlockRenderingMode",
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
help_text = _([[
|
||
- 'legacy' uses original CR3 block rendering code.
|
||
- 'flat' ensures flat rendering with collapsing margins and accurate page breaks.
|
||
- 'book' additionally allows floats, but limits style support to avoid blank spaces and overflows.
|
||
- 'web' renders as web browsers do, allowing negative margins and possible page overflow.]]),
|
||
},
|
||
{
|
||
name = "render_dpi",
|
||
name_text = S.ZOOM_DPI,
|
||
more_options = true,
|
||
more_options_param = {
|
||
value_hold_step = 20,
|
||
},
|
||
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,
|
||
more_options = true,
|
||
more_options_param = {
|
||
value_min = 70,
|
||
value_max = 130,
|
||
value_step = 1,
|
||
value_hold_step = 5,
|
||
},
|
||
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.text.size.large.png",
|
||
options = {
|
||
{
|
||
name = "font_size",
|
||
item_text = Aa * #DCREREADER_CONFIG_FONT_SIZES,
|
||
item_align_center = 1.0,
|
||
spacing = 15,
|
||
item_font_size = DCREREADER_CONFIG_FONT_SIZES,
|
||
values = DCREREADER_CONFIG_FONT_SIZES,
|
||
default_value = DCREREADER_CONFIG_DEFAULT_FONT_SIZE,
|
||
args = DCREREADER_CONFIG_FONT_SIZES,
|
||
event = "SetFontSize",
|
||
},
|
||
{
|
||
name = "font_fine_tune",
|
||
name_text = S.FONTSIZE_FINE_TUNING,
|
||
toggle = Device:isTouchDevice() and {S.DECREASE, S.INCREASE} or nil,
|
||
item_text = not Device:isTouchDevice() and {S.DECREASE, S.INCREASE} or nil,
|
||
more_options = true,
|
||
more_options_param = {
|
||
value_min = 12,
|
||
value_max = 255,
|
||
value_step = 0.5,
|
||
precision = "%.1f",
|
||
value_hold_step = 4,
|
||
name = "font_size",
|
||
name_text = _("Font Size"),
|
||
event = "SetFontSize",
|
||
},
|
||
values = {},
|
||
event = "ChangeSize",
|
||
args = {"decrease", "increase"},
|
||
alternate = false,
|
||
name_text_hold_callback = function(configurable, __, prefix)
|
||
local opt = {
|
||
name = "font_size",
|
||
name_text = _("Font Size"),
|
||
}
|
||
optionsutil.showValues(configurable, opt, prefix)
|
||
end,
|
||
}
|
||
}
|
||
},
|
||
{
|
||
icon = "resources/icons/appbar.grade.b.large.png",
|
||
options = {
|
||
{
|
||
name = "font_weight",
|
||
name_text = S.FONT_WEIGHT,
|
||
toggle = {S.REGULAR, S.BOLD},
|
||
values = {0, 1},
|
||
default_value = 0,
|
||
args = {0, 1},
|
||
event = "ToggleFontBolder",
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
},
|
||
{
|
||
name = "font_gamma",
|
||
name_text = S.CONTRAST,
|
||
buttonprogress = true,
|
||
default_value = 15, -- gamma = 1.0
|
||
default_pos = 2,
|
||
values = {10, 15, 25, 30, 36, 43, 49, 56},
|
||
event = "SetFontGamma",
|
||
args = {10, 15, 25, 30, 36, 43, 49, 56},
|
||
-- gamma values for these indexes are:
|
||
labels = {0.8, 1.0, 1.45, 1.90, 2.50, 4.0, 8.0, 15.0},
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
more_options = true,
|
||
more_options_param = {
|
||
-- values table taken from crengine/crengine/Tools/GammaGen/gammagen.cpp
|
||
value_table = { 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9,
|
||
0.95, 0.98, 1, 1.02, 1.05, 1.1, 1.15, 1.2, 1.25, 1.3, 1.35, 1.4, 1.45,
|
||
1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9,
|
||
3, 3.5, 4, 4.5, 5, 5.5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
|
||
args_table = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
|
||
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
|
||
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 29, 40,
|
||
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 };
|
||
value_step = 1,
|
||
},
|
||
},
|
||
{
|
||
name = "font_hinting",
|
||
name_text = S.FONT_HINT,
|
||
toggle = {S.OFF, S.NATIVE, S.AUTO},
|
||
values = {0, 1, 2},
|
||
default_value = 2,
|
||
args = {0, 1, 2},
|
||
event = "SetFontHinting",
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
help_text = _([[Font hinting is the process by which fonts are adjusted for maximum readability on the screen's pixel grid.
|
||
|
||
- off: no hinting.
|
||
- native: use the font internal hinting instructions.
|
||
- auto: use FreeType's hinting algorithm, ignoring font instructions.]]),
|
||
},
|
||
{
|
||
name = "font_kerning",
|
||
name_text = S.FONT_KERNING,
|
||
toggle = {S.OFF, S.FAST, S.GOOD, S.BEST},
|
||
values = {0, 1, 2, 3},
|
||
default_value = 3,
|
||
args = {0, 1, 2, 3},
|
||
event = "SetFontKerning",
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
help_text = _([[Font kerning is the process of adjusting the spacing between individual letter forms, to achieve a visually pleasing result.
|
||
|
||
- off: no kerning.
|
||
- fast: use FreeType's kerning implementation (no ligatures).
|
||
- good: use HarfBuzz's light kerning implementation (faster than full but no ligatures and limited support for non-western scripts)
|
||
- best: use HarfBuzz's full kerning implementation (slower, but may support ligatures with some fonts; also needed to properly display joined arabic glyphs and some other scripts).
|
||
|
||
(Font Hinting may need to be adjusted for the best result with either kerning implementation.)]]),
|
||
},
|
||
{
|
||
name = "space_condensing",
|
||
name_text = S.WORD_GAP,
|
||
toggle = {S.SMALL, S.MEDIUM, S.LARGE},
|
||
values = {
|
||
DCREREADER_CONFIG_WORD_GAP_SMALL,
|
||
DCREREADER_CONFIG_WORD_GAP_MEDIUM,
|
||
DCREREADER_CONFIG_WORD_GAP_LARGE,
|
||
},
|
||
default_value = DCREREADER_CONFIG_WORD_GAP_MEDIUM,
|
||
args = {
|
||
DCREREADER_CONFIG_WORD_GAP_SMALL,
|
||
DCREREADER_CONFIG_WORD_GAP_MEDIUM,
|
||
DCREREADER_CONFIG_WORD_GAP_LARGE,
|
||
},
|
||
event = "SetSpaceCondensing",
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
-- used by showValues
|
||
name_text_suffix = "%",
|
||
name_text_true_values = true,
|
||
help_text = _([[Tells the rendering engine how much each 'space' character in the text can be reduced from its regular width to make words fit on a line (100% means no reduction).]]),
|
||
}
|
||
}
|
||
},
|
||
{
|
||
icon = "resources/icons/appbar.settings.large.png",
|
||
options = {
|
||
{
|
||
name = "status_line",
|
||
name_text = S.PROGRESS_BAR,
|
||
toggle = {S.FULL, S.MINI},
|
||
values = {0, 1},
|
||
default_value = DCREREADER_PROGRESS_BAR,
|
||
args = {0, 1},
|
||
default_arg = DCREREADER_PROGRESS_BAR,
|
||
event = "SetStatusLine",
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
help_text = _([[- 'full' displays a status bar at the top of the screen (this status bar can't be customized).
|
||
- 'mini' displays a status bar at the bottom of the screen, which can be toggled by tapping. The items displayed can be customized via the main menu.]]),
|
||
},
|
||
{
|
||
name = "embedded_css",
|
||
name_text = S.EMBEDDED_STYLE,
|
||
toggle = {S.ON, S.OFF},
|
||
values = {1, 0},
|
||
default_value = 1,
|
||
args = {true, false},
|
||
default_arg = nil,
|
||
event = "ToggleEmbeddedStyleSheet",
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
help_text = _([[Enable or disable publisher stylesheets embedded in the book.
|
||
(Note that less radical changes can be achieved via Style Tweaks in the main menu.)]]),
|
||
},
|
||
{
|
||
name = "embedded_fonts",
|
||
name_text = S.EMBEDDED_FONTS,
|
||
toggle = {S.ON, S.OFF},
|
||
values = {1, 0},
|
||
default_value = 1,
|
||
args = {true, false},
|
||
default_arg = nil,
|
||
event = "ToggleEmbeddedFonts",
|
||
enabled_func = function(configurable)
|
||
return optionsutil.enableIfEquals(configurable, "embedded_css", 1)
|
||
end,
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
help_text = _([[Enable or disable the use of the fonts embedded in the book.
|
||
(Disabling the fonts specified in the publisher stylesheets can also be achieved via Style Tweaks in the main menu.)]]),
|
||
},
|
||
{
|
||
name = "smooth_scaling",
|
||
name_text = S.IMAGE_SCALING,
|
||
toggle = {S.FAST, S.BEST},
|
||
values = {0, 1},
|
||
default_value = 0,
|
||
args = {false, true},
|
||
default_arg = nil,
|
||
event = "ToggleImageScaling",
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
help_text = _([[- 'fast' uses a fast but inaccurate scaling algorithm when scaling images.
|
||
- 'best' switches to a more costly but vastly more pleasing and accurate algorithm.]]),
|
||
},
|
||
{
|
||
name = "nightmode_images",
|
||
name_text = S.NIGHTMODE_IMAGES,
|
||
toggle = {S.ON, S.OFF},
|
||
values = {1, 0},
|
||
default_value = 1,
|
||
args = {true, false},
|
||
default_arg = nil,
|
||
event = "ToggleNightmodeImages",
|
||
show_func = function() return Device.screen.night_mode end,
|
||
name_text_hold_callback = optionsutil.showValues,
|
||
help_text = _([[Disable the automagic inversion of images when nightmode is enabled. Useful if your book contains mainly inlined mathematical content or scene break art.]]),
|
||
},
|
||
},
|
||
},
|
||
}
|
||
|
||
return CreOptions
|