Move render_mode support out of unireader.lua into djvureader.lua as it is djvu-specific.

Also added support for all other rendering modes handled by djvulibre.
Also made the message print a human-readable description of the mode rather than just the number.
This commit is contained in:
Tigran Aivazian
2012-08-28 23:48:56 +01:00
parent 5c9a8fbec6
commit 824e9d139e
3 changed files with 44 additions and 25 deletions

8
djvu.c
View File

@@ -401,15 +401,9 @@ static int drawPage(lua_State *L) {
DrawContext *dc = (DrawContext*) luaL_checkudata(L, 2, "drawcontext");
BlitBuffer *bb = (BlitBuffer*) luaL_checkudata(L, 3, "blitbuffer");
int render_mode = (int) luaL_checkint(L, 6);
ddjvu_render_mode_t djvu_render_mode;
ddjvu_render_mode_t djvu_render_mode = render_mode;
unsigned char adjusted_low[16], adjusted_high[16];
int i, adjust_pixels = 0;
if (render_mode)
djvu_render_mode = DDJVU_RENDER_BLACK;
else
djvu_render_mode = DDJVU_RENDER_COLOR;
ddjvu_format_t *pixelformat;
ddjvu_rect_t pagerect, renderrect;
uint8_t *imagebuffer = NULL;

View File

@@ -21,8 +21,48 @@ end
function DJVUReader:adjustDjvuReaderCommand()
self.commands:del(KEY_J, MOD_SHIFT, "J")
self.commands:del(KEY_K, MOD_SHIFT, "K")
self.commands:add(KEY_R, nil, "R",
"colour/b&w/colouronly/maskonly/backg/foreg",
function(self)
self:cycle_render_mode()
end)
end
-- cycle through all rendering modes supported by djvulibre:
-- 0 (color page or stencil)
-- 1 (stencil or color page)
-- 2 (color page or fail)
-- 3 (stencil or fail)
-- 4 (color background layer)
-- 5 (color foreground layer)
-- Note that if the values in the definition of ddjvu_render_mode_t in djvulibre/libdjvu/ddjvuapi.h change,
-- then we should update our values here also. This is a bit risky, but these values never change, so it should be ok :)
function DJVUReader:cycle_render_mode()
self.render_mode = (self.render_mode + 1)%6
Debug("cycle_render_mode, render_mode=", self.render_mode)
self:clearCache()
self.doc:cleanCache()
local render_mode_name
if self.render_mode == 0 then
render_mode_name = "COLOUR"
elseif self.render_mode == 1 then
render_mode_name = "BLACK & WHITE"
elseif self.render_mode == 2 then
render_mode_name = "COLOUR ONLY"
elseif self.render_mode == 3 then
render_mode_name = "MASK ONLY"
elseif self.render_mode == 4 then
render_mode_name = "COLOUR BACKGROUND"
elseif self.render_mode == 5 then
render_mode_name = "COLOUR FOREGROUND"
else
render_mode_name = "UNKNOWN"
end
showInfoMsgWithDelay("("..self.render_mode..") "..render_mode_name, 1000, 1)
self:redrawCurrentPage()
end
----------------------------------------------------
-- highlight support

View File

@@ -34,9 +34,9 @@ UniReader = {
-- gamma setting:
globalgamma = 1.0, -- GAMMA_NO_GAMMA
-- rendering mode toggle (used in djvu.c:drawPage())
-- if set to 1 render in BLACK & WHITE, otherwise COLOR
render_mode = 1,
-- DjVu page rendering mode (used in djvu.c:drawPage())
-- See comments in djvureader.lua:DJVUReader:cycle_render_mode()
render_mode = 0, -- COLOUR
-- cached tile size
fullwidth = 0,
@@ -1576,16 +1576,6 @@ function UniReader:modifyGamma(factor)
self:redrawCurrentPage()
end
-- toggle rendering mode between colour (0) and b&w (1)
function UniReader:toggle_render_mode()
Debug("toggle_render_mode, render_mode=", self.render_mode)
self.render_mode = 1 - self.render_mode
self:clearCache()
self.doc:cleanCache()
showInfoMsgWithDelay("New render_mode = "..self.render_mode, 1000, 1)
self:redrawCurrentPage()
end
-- adjust zoom state and trigger re-rendering
function UniReader:setglobalzoom_mode(newzoommode)
if self.globalzoom_mode ~= newzoommode then
@@ -2217,11 +2207,6 @@ function UniReader:addAllCommands()
self:redrawCurrentPage()
end
end)
self.commands:add(KEY_R, nil, "R",
"toggle rendering mode: b&w/colour",
function(unireader)
unireader:toggle_render_mode()
end)
self.commands:add(KEY_R, MOD_SHIFT, "R",
"manual full screen refresh",
function(unireader)