mirror of
https://github.com/koreader/koreader.git
synced 2025-12-13 20:36:53 +01:00
decouple UI definitions from document modules
This commit is contained in:
committed by
Frans de Jonge
parent
02eca23649
commit
9e57e56f95
@@ -4,6 +4,8 @@ local Event = require("ui/event")
|
||||
local Geom = require("ui/geometry")
|
||||
local InputContainer = require("ui/widget/container/inputcontainer")
|
||||
local UIManager = require("ui/uimanager")
|
||||
local CreOptions = require("ui/data/creoptions")
|
||||
local KoptOptions = require("ui/data/koptoptions")
|
||||
local _ = require("gettext")
|
||||
|
||||
local ReaderConfig = InputContainer:new{
|
||||
@@ -11,6 +13,13 @@ local ReaderConfig = InputContainer:new{
|
||||
}
|
||||
|
||||
function ReaderConfig:init()
|
||||
if self.document.koptinterface ~= nil then
|
||||
self.options = KoptOptions
|
||||
else
|
||||
self.options = CreOptions
|
||||
end
|
||||
self.configurable:loadDefaults(self.options)
|
||||
|
||||
if not self.dimen then self.dimen = Geom:new{} end
|
||||
if Device:hasKeys() then
|
||||
self.key_events = {
|
||||
|
||||
@@ -197,10 +197,10 @@ function ReaderUI:init()
|
||||
-- config panel controller
|
||||
self:registerModule("config", ReaderConfig:new{
|
||||
configurable = self.document.configurable,
|
||||
options = self.document.options,
|
||||
dialog = self.dialog,
|
||||
view = self.view,
|
||||
ui = self
|
||||
ui = self,
|
||||
document = self.document,
|
||||
})
|
||||
if self.document.info.has_pages then
|
||||
-- kopt option controller
|
||||
|
||||
@@ -9,7 +9,8 @@ end
|
||||
|
||||
function Configurable:reset()
|
||||
for key,value in pairs(self) do
|
||||
if type(value) == "number" or type(value) == "string" then
|
||||
local value_type = type(value)
|
||||
if value_type == "number" or value_type == "string" then
|
||||
self[key] = nil
|
||||
end
|
||||
end
|
||||
@@ -18,7 +19,8 @@ end
|
||||
function Configurable:hash(sep)
|
||||
local hash = ""
|
||||
for key,value in pairs(self) do
|
||||
if type(value) == "number" or type(value) == "string" then
|
||||
local value_type = type(value)
|
||||
if value_type == "number" or value_type == "string" then
|
||||
hash = hash..sep..value
|
||||
end
|
||||
end
|
||||
@@ -28,11 +30,12 @@ end
|
||||
function Configurable:loadDefaults(config_options)
|
||||
-- reset configurable before loading new options
|
||||
self:reset()
|
||||
local prefix = config_options.prefix.."_"
|
||||
for i=1,#config_options do
|
||||
local options = config_options[i].options
|
||||
for j=1,#options do
|
||||
local key = options[j].name
|
||||
local settings_key = config_options.prefix.."_"..key
|
||||
local settings_key = prefix..key
|
||||
local default = G_reader_settings:readSetting(settings_key)
|
||||
self[key] = default or options[j].default_value
|
||||
if not self[key] then
|
||||
@@ -44,21 +47,22 @@ end
|
||||
|
||||
function Configurable:loadSettings(settings, prefix)
|
||||
for key,value in pairs(self) do
|
||||
if type(value) == "number" or type(value) == "string"
|
||||
or type(value) == "table" then
|
||||
local value_type = type(value)
|
||||
if value_type == "number" or value_type == "string"
|
||||
or value_type == "table" then
|
||||
local saved_value = settings:readSetting(prefix..key)
|
||||
self[key] = (saved_value == nil) and self[key] or saved_value
|
||||
--Debug("Configurable:loadSettings", "key", key, "saved value",
|
||||
--saved_value,"Configurable.key", self[key])
|
||||
if saved_value ~= nil then
|
||||
self[key] = saved_value
|
||||
end
|
||||
end
|
||||
end
|
||||
--Debug("loaded config:", dump(Configurable))
|
||||
end
|
||||
|
||||
function Configurable:saveSettings(settings, prefix)
|
||||
for key,value in pairs(self) do
|
||||
if type(value) == "number" or type(value) == "string"
|
||||
or type(value) == "table" then
|
||||
local value_type = type(value)
|
||||
if value_type == "number" or value_type == "string"
|
||||
or value_type == "table" then
|
||||
settings:saveSetting(prefix..key, value)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
local Blitbuffer = require("ffi/blitbuffer")
|
||||
local CreOptions = require("ui/data/creoptions")
|
||||
local DataStorage = require("datastorage")
|
||||
local Document = require("document/document")
|
||||
local Font = require("ui/font")
|
||||
@@ -28,7 +27,6 @@ local CreDocument = Document:new{
|
||||
header_font = "Noto Sans",
|
||||
fallback_font = "Noto Sans CJK SC",
|
||||
default_css = "./data/cr3.css",
|
||||
options = CreOptions,
|
||||
provider = "crengine",
|
||||
provider_name = "Cool Reader Engine",
|
||||
}
|
||||
@@ -94,7 +92,6 @@ end
|
||||
function CreDocument:init()
|
||||
self:updateColorRendering()
|
||||
self:engineInit()
|
||||
self.configurable:loadDefaults(self.options)
|
||||
|
||||
local file_type = string.lower(string.match(self.file, ".+%.([^.]+)"))
|
||||
if file_type == "zip" then
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
local Blitbuffer = require("ffi/blitbuffer")
|
||||
local Document = require("document/document")
|
||||
local DrawContext = require("ffi/drawcontext")
|
||||
local KoptOptions = require("ui/data/koptoptions")
|
||||
|
||||
local DjvuDocument = Document:new{
|
||||
_document = false,
|
||||
@@ -9,7 +8,6 @@ local DjvuDocument = Document:new{
|
||||
is_djvu = true,
|
||||
djvulibre_cache_size = nil,
|
||||
dc_null = DrawContext.new(),
|
||||
options = KoptOptions,
|
||||
koptinterface = nil,
|
||||
color_bb_type = Blitbuffer.TYPE_BBRGB24,
|
||||
provider = "djvulibre",
|
||||
@@ -30,7 +28,7 @@ function DjvuDocument:init()
|
||||
self:updateColorRendering()
|
||||
local djvu = require("libs/libkoreader-djvu")
|
||||
self.koptinterface = require("document/koptinterface")
|
||||
self.configurable:loadDefaults(self.options)
|
||||
self.koptinterface:setDefaultConfigurable(self.configurable)
|
||||
if not validDjvuFile(self.file) then
|
||||
error("Not a valid DjVu file")
|
||||
end
|
||||
|
||||
@@ -54,6 +54,24 @@ function OCREngine:onFree()
|
||||
end
|
||||
end
|
||||
|
||||
function KoptInterface:setDefaultConfigurable(configurable)
|
||||
configurable.doc_language = DKOPTREADER_CONFIG_DOC_DEFAULT_LANG_CODE
|
||||
configurable.trim_page = DKOPTREADER_CONFIG_TRIM_PAGE
|
||||
configurable.text_wrap = DKOPTREADER_CONFIG_TEXT_WRAP
|
||||
configurable.detect_indent = DKOPTREADER_CONFIG_DETECT_INDENT
|
||||
configurable.max_columns = DKOPTREADER_CONFIG_MAX_COLUMNS
|
||||
configurable.auto_straighten = DKOPTREADER_CONFIG_AUTO_STRAIGHTEN
|
||||
configurable.justification = DKOPTREADER_CONFIG_JUSTIFICATION
|
||||
configurable.writing_direction = 0
|
||||
configurable.font_size = DKOPTREADER_CONFIG_FONT_SIZE
|
||||
configurable.page_margin = DKOPTREADER_CONFIG_PAGE_MARGIN
|
||||
configurable.quality = DKOPTREADER_CONFIG_RENDER_QUALITY
|
||||
configurable.contrast = DKOPTREADER_CONFIG_CONTRAST
|
||||
configurable.defect_size = DKOPTREADER_CONFIG_DEFECT_SIZE
|
||||
configurable.line_spacing = DKOPTREADER_CONFIG_LINE_SPACING
|
||||
configurable.word_spacing = DKOPTREADER_CONFIG_DEFAULT_WORD_SPACING
|
||||
end
|
||||
|
||||
function KoptInterface:waitForContext(kc)
|
||||
-- if koptcontext is being processed in background thread
|
||||
-- the isPreCache will return 1.
|
||||
@@ -421,7 +439,7 @@ returned boxes are in native page coordinates zoomed at 1.0
|
||||
--]]
|
||||
function KoptInterface:getTextBoxes(doc, pageno)
|
||||
local text = doc:getPageTextBoxes(pageno)
|
||||
if text and #text > 1 and doc.configurable.forced_ocr == 0 then
|
||||
if text and #text > 1 and doc.configurable.forced_ocr ~= 1 then
|
||||
return text
|
||||
-- if we have no text in original page then we will reuse native word boxes
|
||||
-- in reflow mode and find text boxes from scratch in non-reflow mode
|
||||
|
||||
@@ -3,7 +3,6 @@ local CacheItem = require("cacheitem")
|
||||
local Device = require("device")
|
||||
local Document = require("document/document")
|
||||
local DrawContext = require("ffi/drawcontext")
|
||||
local KoptOptions = require("ui/data/koptoptions")
|
||||
local logger = require("logger")
|
||||
local util = require("util")
|
||||
local ffi = require("ffi")
|
||||
@@ -16,7 +15,6 @@ local PdfDocument = Document:new{
|
||||
_document = false,
|
||||
is_pdf = true,
|
||||
dc_null = DrawContext.new(),
|
||||
options = KoptOptions,
|
||||
epub_font_size = G_reader_settings:readSetting("copt_font_size")
|
||||
or DCREREADER_CONFIG_DEFAULT_FONT_SIZE or 22,
|
||||
koptinterface = nil,
|
||||
@@ -39,7 +37,7 @@ function PdfDocument:init()
|
||||
end
|
||||
end
|
||||
self.koptinterface = require("document/koptinterface")
|
||||
self.configurable:loadDefaults(self.options)
|
||||
self.koptinterface:setDefaultConfigurable(self.configurable)
|
||||
local ok
|
||||
ok, self._document = pcall(pdf.openDocument, self.file)
|
||||
if not ok then
|
||||
|
||||
25
frontend/runtimectl.lua
Normal file
25
frontend/runtimectl.lua
Normal file
@@ -0,0 +1,25 @@
|
||||
local Runtimectl = {
|
||||
should_restrict_JIT = false,
|
||||
is_color_rendering_enabled = false,
|
||||
}
|
||||
|
||||
--[[
|
||||
Disable jit on some modules on android to make koreader on Android more stable.
|
||||
|
||||
The strategy here is that we only use precious mcode memory (jitting)
|
||||
on deep loops like the several blitting methods in blitbuffer.lua and
|
||||
the pixel-copying methods in mupdf.lua. So that a small amount of mcode
|
||||
memory (64KB) allocated when koreader is launched in the android.lua
|
||||
is enough for the program and it won't need to jit other parts of lua
|
||||
code and thus won't allocate mcode memory any more which by our
|
||||
observation will be harder and harder as we run koreader.
|
||||
]]--
|
||||
function Runtimectl:restrictJIT()
|
||||
self.should_restrict_JIT = true
|
||||
end
|
||||
|
||||
function Runtimectl:setColorRenderingEnabled(val)
|
||||
self.is_color_rendering_enabled = val
|
||||
end
|
||||
|
||||
return Runtimectl
|
||||
@@ -1,8 +1,8 @@
|
||||
local Device = require("device")
|
||||
local Screen = Device.screen
|
||||
local S = require("ui/data/strings")
|
||||
local optionsutil = require("ui/data/optionsutil")
|
||||
local _ = require("gettext")
|
||||
local Screen = Device.screen
|
||||
|
||||
-- add multiply operator to Aa dict
|
||||
local Aa = setmetatable({"Aa"}, {
|
||||
|
||||
Reference in New Issue
Block a user