ReaderZooming: Fix defaults handling (#7463)

It appears the fancy split settings from #6885 were not being honored at all.

Also:

* Made sure "pagewidth" is actually the default zoom mode again, "full" had sneaked in as the default state of the zoom type toggle).
* Display human-readable values in the "Make as default" popup, instead of the raw, meaningless numerical setting.
* Disable zoom options when reflow is enabled, and restore 'em properly when it's disabled.

Fix #7461, #7228, #7192
This commit is contained in:
NiLuJe
2021-03-30 18:47:52 +02:00
committed by GitHub
parent b9ffc3d05b
commit f0f69e9a7a
5 changed files with 87 additions and 23 deletions

View File

@@ -28,6 +28,18 @@ local ReaderZooming = InputContainer:new{
"rows",
"manual",
},
zoom_mode_genus_map = {
[4] = "page",
[3] = "content",
[2] = "columns",
[1] = "rows",
[0] = "manual",
},
zoom_mode_type_map = {
[2] = "",
[1] = "width",
[0] = "height",
},
-- default to nil so we can trigger ZoomModeUpdate events on start up
zoom_mode = nil,
DEFAULT_ZOOM_MODE = "pagewidth",
@@ -110,13 +122,32 @@ function ReaderZooming:init()
end
function ReaderZooming:onReadSettings(config)
-- If we have a composite zoom_mode stored, use that
local zoom_mode = config:readSetting("zoom_mode")
or G_reader_settings:readSetting("zoom_mode")
or self.DEFAULT_ZOOM_MODE
or G_reader_settings:readSetting("zoom_mode")
-- Otherwise, build it from the split genus & type settings
if not zoom_mode then
local zoom_mode_genus = config:readSetting("kopt_zoom_mode_genus")
or G_reader_settings:readSetting("kopt_zoom_mode_genus")
local zoom_mode_type = config:readSetting("kopt_zoom_mode_type")
or G_reader_settings:readSetting("kopt_zoom_mode_type")
if zoom_mode_genus or zoom_mode_type then
-- Handle defaults
zoom_mode_genus = zoom_mode_genus or 4 -- "page"
zoom_mode_type = zoom_mode_type or 1 -- "width"
zoom_mode_genus = self.zoom_mode_genus_map[zoom_mode_genus]
zoom_mode_type = self.zoom_mode_type_map[zoom_mode_type]
zoom_mode = zoom_mode_genus .. zoom_mode_type
end
end
zoom_mode = util.arrayContains(self.available_zoom_modes, zoom_mode)
and zoom_mode
or self.DEFAULT_ZOOM_MODE
self:setZoomMode(zoom_mode, true) -- avoid informative message on load
-- Don't stomp on normal_zoom_mode in ReaderKoptListener if we're reflowed...
local is_reflowed = config:has("kopt_text_wrap") and config:readSetting("kopt_text_wrap") == 1
self:setZoomMode(zoom_mode, true, is_reflowed) -- avoid informative message on load
for _, setting in ipairs(self.zoom_pan_settings) do
self[setting] = config:readSetting(setting)
or G_reader_settings:readSetting(setting)
@@ -214,18 +245,8 @@ function ReaderZooming:onDefineZoom(btn, when_applied_callback)
})[config.zoom_direction]
local zoom_range_number = config.zoom_range_number
local zoom_factor = config.zoom_factor
local zoom_mode_genus = ({
[4] = "page",
[3] = "content",
[2] = "columns",
[1] = "rows",
[0] = "manual",
})[config.zoom_mode_genus]
local zoom_mode_type = ({
[2] = "",
[1] = "width",
[0] = "height",
})[config.zoom_mode_type]
local zoom_mode_genus = self.zoom_mode_genus_map[config.zoom_mode_genus]
local zoom_mode_type = self.zoom_mode_type_map[config.zoom_mode_type]
settings.zoom_overlap_h = config.zoom_overlap_h
settings.zoom_overlap_v = config.zoom_overlap_v
if btn == "set_zoom_overlap_h" then
@@ -491,7 +512,7 @@ function ReaderZooming:genSetZoomModeCallBack(mode)
end
end
function ReaderZooming:setZoomMode(mode, no_warning)
function ReaderZooming:setZoomMode(mode, no_warning, is_reflowed)
if not no_warning and self.ui.view.page_scroll then
local message
if self.paged_modes[mode] then
@@ -511,7 +532,8 @@ Please enable page view instead of continuous view (scroll mode).]])
end
end
self.ui:handleEvent(Event:new("SetZoomMode", mode))
-- Dirty hack to prevent ReaderKoptListener from stomping on normal_zoom_mode...
self.ui:handleEvent(Event:new("SetZoomMode", mode, is_reflowed and "koptlistener"))
self.ui:handleEvent(Event:new("InitScrollPageStates"))
end