mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Startup: Move Device ctor/dtor shenanigans to the actual Device
constructors and destructors No need to leak implementation details in there.
This commit is contained in:
@@ -26,8 +26,6 @@ end
|
||||
|
||||
-- Okay, if we're here, it's basically because we're running on a Kindle on FW 5.x under KPV
|
||||
local EventListener = require("ui/widget/eventlistener")
|
||||
local util = require("ffi/util")
|
||||
-- lipc
|
||||
|
||||
ReaderActivityIndicator = EventListener:extend{
|
||||
lipc_handle = nil,
|
||||
|
||||
@@ -247,6 +247,42 @@ function Device:init()
|
||||
local rect = self.screen.getRawSize(self.screen)
|
||||
return Geom:new{ x = rect.x, y = rect.y, w = rect.w, h = rect.h }
|
||||
end
|
||||
|
||||
-- DPI
|
||||
local dpi_override = G_reader_settings:readSetting("screen_dpi")
|
||||
if dpi_override ~= nil then
|
||||
self:setScreenDPI(dpi_override)
|
||||
end
|
||||
|
||||
-- Night mode
|
||||
self.orig_hw_nightmode = self.screen:getHWNightmode()
|
||||
if G_reader_settings:isTrue("night_mode") then
|
||||
self.screen:toggleNightMode()
|
||||
end
|
||||
|
||||
-- Ensure the proper rotation on startup.
|
||||
-- We default to the rotation KOReader closed with.
|
||||
-- If the rotation is not locked it will be overridden by a book or the FM when opened.
|
||||
local rotation_mode = G_reader_settings:readSetting("closed_rotation_mode")
|
||||
if rotation_mode and rotation_mode ~= self.screen:getRotationMode() then
|
||||
self.screen:setRotationMode(rotation_mode)
|
||||
end
|
||||
|
||||
-- Dithering
|
||||
if self:hasEinkScreen() then
|
||||
self.screen:setupDithering()
|
||||
if self.screen.hw_dithering and G_reader_settings:isTrue("dev_no_hw_dither") then
|
||||
self.screen:toggleHWDithering(false)
|
||||
end
|
||||
if self.screen.sw_dithering and G_reader_settings:isTrue("dev_no_sw_dither") then
|
||||
self.screen:toggleSWDithering(false)
|
||||
end
|
||||
-- NOTE: If device can HW dither (i.e., after setupDithering(), hw_dithering is true, but sw_dithering is false),
|
||||
-- but HW dither is explicitly disabled, and SW dither enabled, don't leave SW dither disabled (i.e., re-enable sw_dithering)!
|
||||
if self:canHWDither() and G_reader_settings:isTrue("dev_no_hw_dither") and G_reader_settings:nilOrFalse("dev_no_sw_dither") then
|
||||
self.screen:toggleSWDithering(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Device:setScreenDPI(dpi_override)
|
||||
@@ -498,6 +534,16 @@ function Device:toggleKeyRepeat(toggle) end
|
||||
prepare for application shutdown
|
||||
--]]
|
||||
function Device:exit()
|
||||
-- Save any implementation-specific settings
|
||||
self:saveSettings()
|
||||
|
||||
-- Save current rotation (or the original rotation if ScreenSaver temporarily modified it) to remember it for next startup
|
||||
G_reader_settings:saveSetting("closed_rotation_mode", self.orig_rotation_mode or self.screen:getRotationMode())
|
||||
|
||||
-- Restore initial HW inversion state
|
||||
self.screen:setHWNightmode(self.orig_hw_nightmode)
|
||||
|
||||
-- I/O teardown
|
||||
self.screen:close()
|
||||
require("ffi/input"):closeAll()
|
||||
end
|
||||
|
||||
45
reader.lua
45
reader.lua
@@ -149,38 +149,6 @@ end
|
||||
|
||||
-- Setup device
|
||||
local Device = require("device")
|
||||
-- DPI
|
||||
local dpi_override = G_reader_settings:readSetting("screen_dpi")
|
||||
if dpi_override ~= nil then
|
||||
Device:setScreenDPI(dpi_override)
|
||||
end
|
||||
-- Night mode
|
||||
local hw_nightmode = Device.screen:getHWNightmode()
|
||||
if G_reader_settings:isTrue("night_mode") then
|
||||
Device.screen:toggleNightMode()
|
||||
end
|
||||
-- Ensure the proper rotation on startup.
|
||||
-- We default to the rotation KOReader closed with.
|
||||
-- If the rotation is not locked it will be overridden by a book or the FM when opened.
|
||||
local rotation_mode = G_reader_settings:readSetting("closed_rotation_mode")
|
||||
if rotation_mode and rotation_mode ~= Device.screen:getRotationMode() then
|
||||
Device.screen:setRotationMode(rotation_mode)
|
||||
end
|
||||
-- Dithering
|
||||
if Device:hasEinkScreen() then
|
||||
Device.screen:setupDithering()
|
||||
if Device.screen.hw_dithering and G_reader_settings:isTrue("dev_no_hw_dither") then
|
||||
Device.screen:toggleHWDithering(false)
|
||||
end
|
||||
if Device.screen.sw_dithering and G_reader_settings:isTrue("dev_no_sw_dither") then
|
||||
Device.screen:toggleSWDithering(false)
|
||||
end
|
||||
-- NOTE: If device can HW dither (i.e., after setupDithering(), hw_dithering is true, but sw_dithering is false),
|
||||
-- but HW dither is explicitly disabled, and SW dither enabled, don't leave SW dither disabled (i.e., re-enable sw_dithering)!
|
||||
if Device:canHWDither() and G_reader_settings:isTrue("dev_no_hw_dither") and G_reader_settings:nilOrFalse("dev_no_sw_dither") then
|
||||
Device.screen:toggleSWDithering(true)
|
||||
end
|
||||
end
|
||||
|
||||
-- Document renderers canvas
|
||||
local CanvasContext = require("document/canvascontext")
|
||||
@@ -324,19 +292,12 @@ end
|
||||
|
||||
-- Exit
|
||||
local function exitReader()
|
||||
-- Save any device settings before closing G_reader_settings
|
||||
Device:saveSettings()
|
||||
|
||||
-- Save current rotation (or the original rotation if ScreenSaver temporarily modified it) to remember it for next startup
|
||||
G_reader_settings:saveSetting("closed_rotation_mode", Device.orig_rotation_mode or Device.screen:getRotationMode())
|
||||
G_reader_settings:close()
|
||||
|
||||
-- Restore initial inversion state
|
||||
Device.screen:setHWNightmode(hw_nightmode)
|
||||
|
||||
-- Shutdown hardware abstraction
|
||||
Device:exit()
|
||||
|
||||
-- Flush settings to disk
|
||||
G_reader_settings:close()
|
||||
|
||||
if Profiler then Profiler.stop() end
|
||||
|
||||
if type(exit_code) == "number" then
|
||||
|
||||
Reference in New Issue
Block a user