mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Allow for colored rendering (#3276)
* Allow for colored rendering Available with all engines (CRE, PDF, Images). Needs to manually add setting: "color_rendering" = true * Disable color for djvudocument * Use Screen:isColorEnabled() * Bump base
This commit is contained in:
2
base
2
base
Submodule base updated: e88f453933...7a5ca10031
@@ -57,6 +57,11 @@ function Device:init()
|
||||
error("screen/framebuffer must be implemented")
|
||||
end
|
||||
|
||||
self.screen.isColorEnabled = function()
|
||||
if G_reader_settings:has("color_rendering") then return G_reader_settings:isTrue("color_rendering") end
|
||||
return self.screen.color
|
||||
end
|
||||
|
||||
local is_eink = G_reader_settings:readSetting("eink")
|
||||
self.screen.eink = (is_eink == nil) or is_eink
|
||||
|
||||
|
||||
@@ -239,10 +239,15 @@ function CreDocument:drawCurrentView(target, x, y, rect, pos)
|
||||
self.buffer:free()
|
||||
self.buffer = nil
|
||||
end
|
||||
local color = Screen:isColorEnabled()
|
||||
if not self.buffer then
|
||||
self.buffer = Blitbuffer.new(rect.w, rect.h)
|
||||
-- If we use TYPE_BBRGB32 (and LVColorDrawBuf drawBuf(..., 32) in cre.cpp),
|
||||
-- we get inverted Red and Blue in the blitbuffer (could be that
|
||||
-- crengine/src/lvdrawbuf.cpp treats our 32bits not as RGBA).
|
||||
-- But it is all fine if we use TYPE_BBRGB16.
|
||||
self.buffer = Blitbuffer.new(rect.w, rect.h, color and Blitbuffer.TYPE_BBRGB16 or nil)
|
||||
end
|
||||
self._document:drawCurrentPage(self.buffer)
|
||||
self._document:drawCurrentPage(self.buffer, color)
|
||||
target:blitFrom(self.buffer, x, y, 0, 0, rect.w, rect.h)
|
||||
end
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local KoptOptions = require("ui/data/koptoptions")
|
||||
local Document = require("document/document")
|
||||
local DrawContext = require("ffi/drawcontext")
|
||||
local KoptOptions = require("ui/data/koptoptions")
|
||||
|
||||
local DjvuDocument = Document:new{
|
||||
_document = false,
|
||||
@@ -10,6 +10,7 @@ local DjvuDocument = Document:new{
|
||||
dc_null = DrawContext.new(),
|
||||
options = KoptOptions,
|
||||
koptinterface = nil,
|
||||
is_color_capable = false,
|
||||
}
|
||||
|
||||
-- check DjVu magic string to validate
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
local TileCacheItem = require("document/tilecacheitem")
|
||||
local DrawContext = require("ffi/drawcontext")
|
||||
local Configurable = require("configurable")
|
||||
local Blitbuffer = require("ffi/blitbuffer")
|
||||
local lfs = require("libs/libkoreader-lfs")
|
||||
local Cache = require("cache")
|
||||
local CacheItem = require("cacheitem")
|
||||
local Configurable = require("configurable")
|
||||
local DrawContext = require("ffi/drawcontext")
|
||||
local Geom = require("ui/geometry")
|
||||
local Math = require("optmath")
|
||||
local Cache = require("cache")
|
||||
local Screen = require("device").screen
|
||||
local TileCacheItem = require("document/tilecacheitem")
|
||||
local lfs = require("libs/libkoreader-lfs")
|
||||
local logger = require("logger")
|
||||
|
||||
--[[
|
||||
@@ -31,6 +32,10 @@ local Document = {
|
||||
|
||||
-- flag to show that the document is edited and needs to write back to disk
|
||||
is_edited = false,
|
||||
|
||||
-- whether this document can be rendered in color
|
||||
is_color_capable = true,
|
||||
|
||||
}
|
||||
|
||||
function Document:new(from_o)
|
||||
@@ -298,12 +303,16 @@ function Document:renderPage(pageno, rect, zoom, rotation, gamma, render_mode)
|
||||
end
|
||||
|
||||
-- prepare cache item with contained blitbuffer
|
||||
local bbtype = nil -- use Blitbuffer default greyscale type
|
||||
if self.is_color_capable and Screen:isColorEnabled() then
|
||||
bbtype = Blitbuffer.TYPE_BBRGB32
|
||||
end
|
||||
tile = TileCacheItem:new{
|
||||
persistent = true,
|
||||
size = size.w * size.h + 64, -- estimation
|
||||
excerpt = size,
|
||||
pageno = pageno,
|
||||
bb = Blitbuffer.new(size.w, size.h)
|
||||
bb = Blitbuffer.new(size.w, size.h, bbtype)
|
||||
}
|
||||
|
||||
-- create a draw context
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
local Cache = require("cache")
|
||||
local CacheItem = require("cacheitem")
|
||||
local KoptOptions = require("ui/data/koptoptions")
|
||||
local Document = require("document/document")
|
||||
local DrawContext = require("ffi/drawcontext")
|
||||
local KoptOptions = require("ui/data/koptoptions")
|
||||
local Screen = require("device").screen
|
||||
local logger = require("logger")
|
||||
local util = require("util")
|
||||
|
||||
@@ -16,6 +17,7 @@ local PdfDocument = Document:new{
|
||||
|
||||
function PdfDocument:init()
|
||||
local pdf = require("ffi/mupdf")
|
||||
pdf.color = Screen:isColorEnabled()
|
||||
self.koptinterface = require("document/koptinterface")
|
||||
self.configurable:loadDefaults(self.options)
|
||||
local ok
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
local Document = require("document/document")
|
||||
local DrawContext = require("ffi/drawcontext")
|
||||
local Screen = require("device").screen
|
||||
local pic = nil
|
||||
|
||||
local PicDocument = Document:new{
|
||||
@@ -10,6 +11,7 @@ local PicDocument = Document:new{
|
||||
|
||||
function PicDocument:init()
|
||||
if not pic then pic = require("ffi/pic") end
|
||||
pic.color = Screen:isColorEnabled()
|
||||
local ok
|
||||
ok, self._document = pcall(pic.openDocument, self.file)
|
||||
if not ok then
|
||||
|
||||
Reference in New Issue
Block a user