From 02eca2364947837c9945edd20e2fd9c7ce6f8a61 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Fri, 26 Oct 2018 08:29:07 -0700 Subject: [PATCH] decouple device from document modules --- frontend/cache.lua | 3 ++- frontend/device/generic/device.lua | 4 ---- frontend/document/document.lua | 3 +-- frontend/document/picdocument.lua | 4 ++-- .../ui/elements/screen_color_menu_table.lua | 7 +++++-- frontend/ui/rendertext.lua | 3 ++- .../ui/widget/container/inputcontainer.lua | 3 ++- .../ui/widget/container/widgetcontainer.lua | 3 ++- frontend/ui/widget/htmlboxwidget.lua | 4 ++-- frontend/ui/widget/textboxwidget.lua | 18 +++++++++++------- reader.lua | 19 ++++++++++++++++++- 11 files changed, 47 insertions(+), 24 deletions(-) diff --git a/frontend/cache.lua b/frontend/cache.lua index bb0749d23..7bc4a42dc 100644 --- a/frontend/cache.lua +++ b/frontend/cache.lua @@ -7,7 +7,8 @@ local lfs = require("libs/libkoreader-lfs") local logger = require("logger") local md5 = require("ffi/MD5") -if require("device"):isAndroid() then +local runtimectl = require("runtimectl") +if runtimectl.should_restrict_JIT then require("jit").off(true, true) end diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index 578abf066..5c98d7e0a 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -99,10 +99,6 @@ function Device:init() end self.screen.isColorScreen = self.hasColorScreen - self.screen.isColorEnabled = function() - if G_reader_settings:has("color_rendering") then return G_reader_settings:isTrue("color_rendering") end - return self.screen.isColorScreen() - end self.screen.isBGRFrameBuffer = self.hasBGRFrameBuffer diff --git a/frontend/document/document.lua b/frontend/document/document.lua index d25f9651c..0b0b4c9c1 100644 --- a/frontend/document/document.lua +++ b/frontend/document/document.lua @@ -5,7 +5,6 @@ local Configurable = require("configurable") local DrawContext = require("ffi/drawcontext") local Geom = require("ui/geometry") local Math = require("optmath") -local Screen = require("device").screen local TileCacheItem = require("document/tilecacheitem") local lfs = require("libs/libkoreader-lfs") local logger = require("logger") @@ -291,7 +290,7 @@ function Document:findText() end function Document:updateColorRendering() - if self.is_color_capable and Screen:isColorEnabled() then + if self.is_color_capable and Runtimectl.is_color_rendering_enabled then self.render_color = true else self.render_color = false diff --git a/frontend/document/picdocument.lua b/frontend/document/picdocument.lua index 06258cb02..8fee410e0 100644 --- a/frontend/document/picdocument.lua +++ b/frontend/document/picdocument.lua @@ -1,6 +1,6 @@ local Document = require("document/document") local DrawContext = require("ffi/drawcontext") -local Screen = require("device").screen +local Runtimectl = require("runtimectl") local pic = nil local PicDocument = Document:new{ @@ -15,7 +15,7 @@ function PicDocument:init() self:updateColorRendering() if not pic then pic = require("ffi/pic") end -- pic.color needs to be true before opening document to allow toggling color - pic.color = Screen.isColorScreen() + pic.color = Runtimectl.is_color_rendering_enabled local ok ok, self._document = pcall(pic.openDocument, self.file) if not ok then diff --git a/frontend/ui/elements/screen_color_menu_table.lua b/frontend/ui/elements/screen_color_menu_table.lua index d26f0c204..be9b38161 100644 --- a/frontend/ui/elements/screen_color_menu_table.lua +++ b/frontend/ui/elements/screen_color_menu_table.lua @@ -1,14 +1,17 @@ local Event = require("ui/event") local Screen = require("device").screen local UIManager = require("ui/uimanager") +local Runtimectl = require("runtimectl") local _ = require("gettext") return { text = _("Color rendering"), enabled_func = Screen.isColorScreen, - checked_func = Screen.isColorEnabled, + checked_func = function() return Runtimectl.is_color_rendering_enabled end, callback = function() - G_reader_settings:saveSetting("color_rendering", not Screen.isColorEnabled()) + Runtimectl:setColorRenderingEnabled(not Runtimectl.is_color_rendering_enabled) + G_reader_settings:saveSetting( + "color_rendering", Runtimectl.is_color_rendering_enabled) UIManager:broadcastEvent(Event:new("ColorRenderingUpdate")) end } diff --git a/frontend/ui/rendertext.lua b/frontend/ui/rendertext.lua index 2211bd4df..17ca6d049 100644 --- a/frontend/ui/rendertext.lua +++ b/frontend/ui/rendertext.lua @@ -8,7 +8,8 @@ local CacheItem = require("cacheitem") local BlitBuffer = require("ffi/blitbuffer") local logger = require("logger") -if require("device"):isAndroid() then +local runtimectl = require("runtimectl") +if runtimectl.should_restrict_JIT then require("jit").off(true, true) end diff --git a/frontend/ui/widget/container/inputcontainer.lua b/frontend/ui/widget/container/inputcontainer.lua index 781eda39e..25f9532d9 100644 --- a/frontend/ui/widget/container/inputcontainer.lua +++ b/frontend/ui/widget/container/inputcontainer.lua @@ -33,7 +33,8 @@ local WidgetContainer = require("ui/widget/container/widgetcontainer") local _ = require("gettext") local Screen = require("device").screen -if require("device"):isAndroid() then +local runtimectl = require("runtimectl") +if runtimectl.should_restrict_JIT then require("jit").off(true, true) end diff --git a/frontend/ui/widget/container/widgetcontainer.lua b/frontend/ui/widget/container/widgetcontainer.lua index 11d37a200..dec6fa682 100644 --- a/frontend/ui/widget/container/widgetcontainer.lua +++ b/frontend/ui/widget/container/widgetcontainer.lua @@ -16,7 +16,8 @@ It handles event propagation and painting (with different alignments) for its ch local Geom = require("ui/geometry") local Widget = require("ui/widget/widget") -if require("device"):isAndroid() then +local runtimectl = require("runtimectl") +if runtimectl.should_restrict_JIT then require("jit").off(true, true) end diff --git a/frontend/ui/widget/htmlboxwidget.lua b/frontend/ui/widget/htmlboxwidget.lua index 25df52753..691b8bb50 100644 --- a/frontend/ui/widget/htmlboxwidget.lua +++ b/frontend/ui/widget/htmlboxwidget.lua @@ -8,10 +8,10 @@ local Geom = require("ui/geometry") local GestureRange = require("ui/gesturerange") local InputContainer = require("ui/widget/container/inputcontainer") local Mupdf = require("ffi/mupdf") -local Screen = require("device").screen local TimeVal = require("ui/timeval") local logger = require("logger") local util = require("util") +local Runtimectl = require("runtimectl") local HtmlBoxWidget = InputContainer:new{ bb = nil, @@ -89,7 +89,7 @@ function HtmlBoxWidget:_render() -- In pdfdocument.lua, color is activated only at the moment of -- rendering and then immediately disabled, for safety with kopt. -- We do the same here. - Mupdf.color = Screen:isColorEnabled() + Mupdf.color = Runtimectl.is_color_rendering_enabled local page = self.document:openPage(self.page_number) local dc = DrawContext.new() diff --git a/frontend/ui/widget/textboxwidget.lua b/frontend/ui/widget/textboxwidget.lua index c442572bb..442ffb7b8 100644 --- a/frontend/ui/widget/textboxwidget.lua +++ b/frontend/ui/widget/textboxwidget.lua @@ -361,14 +361,18 @@ function TextBoxWidget:_renderText(start_row_idx, end_row_idx) if self._bb then self._bb:free() end local bbtype = nil if self.line_num_to_image and self.line_num_to_image[start_row_idx] then - -- Whether Screen:isColorEnabled() or not, it's best to always use BBRGB32 - -- and alphablitFrom() for the best display of various images: - -- With greyscale screen TYPE_BB8 (the default, and what we would - -- have chosen when not Screen:isColorEnabled()): - -- alphablitFrom: some images are all white (ex: flags on Milan, Ilkhanides on wiki.fr) - -- blitFrom: some images have a black background (ex: RDA, Allemagne on wiki.fr) + -- Whether Runtimectl.is_color_rendering_enabled or not, it's best to + -- always use BBRGB32 and alphablitFrom() for the best display of + -- various images: + -- With greyscale screen TYPE_BB8 (the default, and + -- what we would have chosen when not Runtimectl.is_color_rendering_enabled): + -- alphablitFrom: some images are all white (ex: flags on Milan, + -- Ilkhanides on wiki.fr) + -- blitFrom: some images have a black background (ex: RDA, + -- Allemagne on wiki.fr) -- With TYPE_BBRGB32: - -- blitFrom: some images have a black background (ex: RDA, Allemagne on wiki.fr) + -- blitFrom: some images have a black background (ex: RDA, + -- Allemagne on wiki.fr) -- alphablitFrom: all these images looks good, with a white background bbtype = Blitbuffer.TYPE_BBRGB32 end diff --git a/reader.lua b/reader.lua index b6e29e91f..4e50b659d 100755 --- a/reader.lua +++ b/reader.lua @@ -19,6 +19,7 @@ local DataStorage = require("datastorage") pcall(dofile, DataStorage:getDataDir() .. "/defaults.persistent.lua") require("setupkoenv") +Runtimectl = require("runtimectl") io.stdout:write(" [*] Version: ", require("version"):getCurrentRevision(), "\n\n") io.stdout:flush() @@ -34,6 +35,23 @@ if lang_locale then _.changeLang(lang_locale) end +-- setup various runtime control +local Device = require("device") +if Device:isAndroid() then + Runtimectl:restrictJIT() +end + +if G_reader_settings:has("color_rendering") then + Runtimectl:setColorRenderingEnabled(G_reader_settings:isTrue("color_rendering")) +else + Runtimectl:setColorRenderingEnabled(Device.screen.isColorScreen()) +end + +local dpi_override = G_reader_settings:readSetting("screen_dpi") +if dpi_override ~= nil then + Device.screen:setDPI(dpi_override) +end + -- option parsing: local longopts = { debug = "d", @@ -95,7 +113,6 @@ while argidx <= #ARGV do end local ConfirmBox = require("ui/widget/confirmbox") -local Device = require("device") local Font = require("ui/font") local QuickStart = require("ui/quickstart") local UIManager = require("ui/uimanager")