mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
[fix] ReaderZooming: Deal with some more zoom_mode shenanigans (#7780)
Migrate *global* zoom_mode settings to genus/type, too. Nothing can actually set this as a global anymore, but we still honored it nonetheless. Fix #7778
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
local ConfirmBox = require("ui/widget/confirmbox")
|
||||
local Device = require("device")
|
||||
local DocCache = require("document/doccache")
|
||||
local Event = require("ui/event")
|
||||
@@ -28,18 +27,30 @@ local ReaderZooming = InputContainer:new{
|
||||
"rows",
|
||||
"manual",
|
||||
},
|
||||
zoom_mode_genus_map = {
|
||||
zoom_genus_to_mode = {
|
||||
[4] = "page",
|
||||
[3] = "content",
|
||||
[2] = "columns",
|
||||
[1] = "rows",
|
||||
[0] = "manual",
|
||||
},
|
||||
zoom_mode_type_map = {
|
||||
zoom_mode_to_genus = {
|
||||
page = 4,
|
||||
content = 3,
|
||||
columns = 2,
|
||||
rows = 1,
|
||||
manual = 0,
|
||||
},
|
||||
zoom_type_to_mode = {
|
||||
[2] = "",
|
||||
[1] = "width",
|
||||
[0] = "height",
|
||||
},
|
||||
zoom_mode_to_type = {
|
||||
[""] = 2,
|
||||
width = 1,
|
||||
height = 0,
|
||||
},
|
||||
-- default to nil so we can trigger ZoomModeUpdate events on start up
|
||||
zoom_mode = nil,
|
||||
DEFAULT_ZOOM_MODE = "pagewidth",
|
||||
@@ -119,26 +130,13 @@ function ReaderZooming:init()
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
-- Build the reverse zoom_mode -> genus/type mappings
|
||||
self.zoom_mode_to_genus = {}
|
||||
for k, v in pairs(self.zoom_mode_genus_map) do
|
||||
self.zoom_mode_to_genus[v] = k
|
||||
end
|
||||
self.zoom_mode_to_type = {}
|
||||
for k, v in pairs(self.zoom_mode_type_map) do
|
||||
self.zoom_mode_to_type[v] = k
|
||||
end
|
||||
end
|
||||
|
||||
-- Update the genus/type Configurables given a specific zoom_mode...
|
||||
function ReaderZooming:_updateConfigurable(zoom_mode)
|
||||
-- We may need to poke at the Configurable directly, because ReaderConfig is instantiated before us,
|
||||
-- so simply updating the DocSetting doesn't cut it...
|
||||
-- Technically ought to be conditional,
|
||||
-- because this is an optional engine feature (only if self.document.info.configurable is true).
|
||||
-- But the rest of the code (as well as most other modules) assumes this is supported on all paged engines (it is).
|
||||
local configurable = self.document.configurable
|
||||
-- Conversions between genus/type combos and zoom_mode...
|
||||
function ReaderZooming:mode_to_combo(zoom_mode)
|
||||
if not zoom_mode then
|
||||
zoom_mode = self.DEFAULT_ZOOM_MODE
|
||||
end
|
||||
|
||||
-- Quick'n dirty zoom_mode to genus/type conversion...
|
||||
local zgenus, ztype = zoom_mode:match("^(page)(%l*)$")
|
||||
@@ -154,6 +152,43 @@ function ReaderZooming:_updateConfigurable(zoom_mode)
|
||||
|
||||
local zoom_mode_genus = self.zoom_mode_to_genus[zgenus]
|
||||
local zoom_mode_type = self.zoom_mode_to_type[ztype]
|
||||
|
||||
return zoom_mode_genus, zoom_mode_type
|
||||
end
|
||||
|
||||
function ReaderZooming:combo_to_mode(zoom_mode_genus, zoom_mode_type)
|
||||
local default_genus, default_type = self:mode_to_combo(self.DEFAULT_ZOOM_MODE)
|
||||
if not zoom_mode_genus then
|
||||
zoom_mode_genus = default_genus
|
||||
end
|
||||
if not zoom_mode_type then
|
||||
zoom_mode_type = default_type
|
||||
end
|
||||
|
||||
local zoom_genus = self.zoom_genus_to_mode[zoom_mode_genus]
|
||||
local zoom_type = self.zoom_type_to_mode[zoom_mode_type]
|
||||
|
||||
local zoom_mode
|
||||
if zoom_genus == "page" or zoom_genus == "content" then
|
||||
zoom_mode = zoom_genus .. zoom_type
|
||||
else
|
||||
zoom_mode = zoom_genus
|
||||
end
|
||||
|
||||
return zoom_mode
|
||||
end
|
||||
|
||||
-- Update the genus/type Configurables given a specific zoom_mode...
|
||||
function ReaderZooming:_updateConfigurable(zoom_mode)
|
||||
-- We may need to poke at the Configurable directly, because ReaderConfig is instantiated before us,
|
||||
-- so simply updating the DocSetting doesn't cut it...
|
||||
-- Technically ought to be conditional,
|
||||
-- because this is an optional engine feature (only if self.document.info.configurable is true).
|
||||
-- But the rest of the code (as well as most other modules) assumes this is supported on all paged engines (it is).
|
||||
local configurable = self.document.configurable
|
||||
|
||||
local zoom_mode_genus, zoom_mode_type = self:mode_to_combo(zoom_mode)
|
||||
|
||||
-- Configurable keys aren't prefixed, unlike the actual settings...
|
||||
configurable.zoom_mode_genus = zoom_mode_genus
|
||||
configurable.zoom_mode_type = zoom_mode_type
|
||||
@@ -164,7 +199,6 @@ 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")
|
||||
if zoom_mode then
|
||||
-- Validate it first
|
||||
zoom_mode = util.arrayContains(self.available_zoom_modes, zoom_mode)
|
||||
@@ -182,12 +216,7 @@ function ReaderZooming:onReadSettings(config)
|
||||
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
|
||||
zoom_mode = self:combo_to_mode(zoom_mode_genus, zoom_mode_type)
|
||||
end
|
||||
|
||||
-- Validate it
|
||||
@@ -306,8 +335,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 = self.zoom_mode_genus_map[config.zoom_mode_genus]
|
||||
local zoom_mode_type = self.zoom_mode_type_map[config.zoom_mode_type]
|
||||
local zoom_mode_genus = self.zoom_genus_to_mode[config.zoom_mode_genus]
|
||||
local zoom_mode_type = self.zoom_type_to_mode[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
|
||||
@@ -320,7 +349,7 @@ function ReaderZooming:onDefineZoom(btn, when_applied_callback)
|
||||
|
||||
local zoom_mode
|
||||
if zoom_mode_genus == "page" or zoom_mode_genus == "content" then
|
||||
zoom_mode = zoom_mode_genus..zoom_mode_type
|
||||
zoom_mode = zoom_mode_genus .. zoom_mode_type
|
||||
else
|
||||
zoom_mode = zoom_mode_genus
|
||||
self.ui:handleEvent(Event:new("SetScrollMode", false))
|
||||
@@ -685,17 +714,4 @@ function ReaderZooming:onBBoxUpdate()
|
||||
self:onDefineZoom()
|
||||
end
|
||||
|
||||
function ReaderZooming:makeDefault(zoom_mode, touchmenu_instance)
|
||||
UIManager:show(ConfirmBox:new{
|
||||
text = T(
|
||||
_("Set default zoom mode to %1?"),
|
||||
zoom_mode
|
||||
),
|
||||
ok_callback = function()
|
||||
G_reader_settings:saveSetting("zoom_mode", zoom_mode)
|
||||
if touchmenu_instance then touchmenu_instance:updateItems() end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
return ReaderZooming
|
||||
|
||||
Reference in New Issue
Block a user