mirror of
https://github.com/koreader/koreader
synced 2024-11-13 19:11:25 +00:00
7018853940
Avoids requring Device direction in Document. The method needs complete access to the Device object, though, so it's just another layer of indirection, with an extra reference on the Device object stashed in CanvasContext... (much like it already does for Screen)
86 lines
2.2 KiB
Lua
86 lines
2.2 KiB
Lua
--[[
|
|
CanvasContext is introduced to abstract out screen hardware code from document
|
|
render module. This abstraction makes it possible to use core document module
|
|
in headless mode.
|
|
|
|
You can think of canvas as a virtual screen. It provides render related
|
|
settings like canvas dimension and DPI. User of document module need to
|
|
initialize CanvasContext with settings from the actual hardware screen before
|
|
calling renderPage/drawPage.
|
|
|
|
Note: CanvasContext is a singleton and it is not thread safe.
|
|
]]--
|
|
|
|
local Mupdf = require("ffi/mupdf")
|
|
|
|
local CanvasContext = {
|
|
should_restrict_JIT = false,
|
|
is_color_rendering_enabled = false,
|
|
is_bgr = false,
|
|
}
|
|
|
|
--[[
|
|
Initialize CanvasContext with settings from device.
|
|
|
|
The following key is required for a device object:
|
|
|
|
* should_restrict_JIT: bool
|
|
* hasBGRFrameBuffer: function() -> boolean
|
|
* screen: object with following methods:
|
|
* getWidth() -> int
|
|
* getHeight() -> int
|
|
* getDPI() -> int
|
|
* getSize() -> Rect
|
|
* scaleBySize(int) -> int
|
|
* isColorEnabled() -> boolean
|
|
]]--
|
|
function CanvasContext:init(device)
|
|
self.device = device
|
|
self.screen = device.screen
|
|
self.isAndroid = device.isAndroid
|
|
self.isDesktop = device.isDesktop
|
|
self.isEmulator = device.isEmulator
|
|
self.isKindle = device.isKindle
|
|
self.isPocketBook = device.isPocketBook
|
|
self.should_restrict_JIT = device.should_restrict_JIT
|
|
self.hasSystemFonts = device.hasSystemFonts
|
|
self:setColorRenderingEnabled(device.screen.isColorEnabled())
|
|
|
|
-- NOTE: At 32bpp, Kobo's fb is BGR, not RGB. Handle the conversion in MuPDF if needed.
|
|
if device:hasBGRFrameBuffer() then
|
|
self.is_bgr = true
|
|
Mupdf.bgr = true
|
|
end
|
|
end
|
|
|
|
|
|
function CanvasContext:setColorRenderingEnabled(val)
|
|
self.is_color_rendering_enabled = val
|
|
end
|
|
|
|
function CanvasContext:getWidth()
|
|
return self.screen:getWidth()
|
|
end
|
|
|
|
function CanvasContext:getHeight()
|
|
return self.screen:getHeight()
|
|
end
|
|
|
|
function CanvasContext:getDPI()
|
|
return self.screen:getDPI()
|
|
end
|
|
|
|
function CanvasContext:getSize()
|
|
return self.screen:getSize()
|
|
end
|
|
|
|
function CanvasContext:scaleBySize(px)
|
|
return self.screen:scaleBySize(px)
|
|
end
|
|
|
|
function CanvasContext:enableCPUCores(amount)
|
|
return self.device:enableCPUCores(amount)
|
|
end
|
|
|
|
return CanvasContext
|