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
pull/3281/head
poire-z 7 years ago committed by Frans de Jonge
parent a2ea46bfdc
commit 180f5755f4

@ -1 +1 @@
Subproject commit e88f4539336f042aadc7ae54373b2498521881f8
Subproject commit 7a5ca100317ad61fdb6ce84f95e20991dc78816e

@ -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

Loading…
Cancel
Save