Merge pull request #240 from tigran123/master

DjVu rendering mode and other changes.
This commit is contained in:
Dobrica Pavlinušić
2012-09-01 16:00:09 -07:00
4 changed files with 35 additions and 29 deletions

9
djvu.c
View File

@@ -400,16 +400,9 @@ static int drawPage(lua_State *L) {
DjvuPage *page = (DjvuPage*) luaL_checkudata(L, 1, "djvupage");
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 = (int) luaL_checkint(L, 6);
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

@@ -22,22 +22,35 @@ 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",
"toggle rendering mode: b&w/colour",
function(DJVUReader)
DJVUReader:toggle_render_mode()
end)
"select djvu page rendering mode",
function(self)
self:select_render_mode()
end)
end
-------------------------------------------------------
-- toggle rendering mode between colour (0) and b&w (1)
-------------------------------------------------------
function DJVUReader:toggle_render_mode()
InfoMessage:show("New render_mode = "..self.render_mode, 1)
Debug("toggle_render_mode, render_mode=", self.render_mode)
self.render_mode = 1 - self.render_mode
self:clearCache()
self.doc:cleanCache()
-- select the rendering mode from those supported by djvulibre.
-- 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:select_render_mode()
local mode_menu = SelectMenu:new{
menu_title = "Select DjVu page rendering mode",
item_array = {
"COLOUR (works for both colour and b&w pages)", -- 0 (colour page or stencil)
"BLACK & WHITE (for b&w pages only, much faster)", -- 1 (stencil or colour page)
"COLOUR ONLY (slightly faster than COLOUR)", -- 2 (colour page or fail)
"MASK ONLY (for b&w pages only)", -- 3 (stencil or fail)
"COLOUR BACKGROUND (show only background)", -- 4 (colour background layer)
"COLOUR FOREGROUND (show only foreground)" -- 5 (colour foreground layer)
},
current_entry = self.render_mode,
}
local mode = mode_menu:choose(0, fb.bb:getHeight())
if mode then
self.render_mode = mode - 1
Debug("select_render_mode(), render_mode=", self.render_mode)
self:clearCache()
self.doc:cleanCache()
end
self:redrawCurrentPage()
end

View File

@@ -403,11 +403,9 @@ function FileChooser:addAllCommands()
local oldname = self:FullFileName()
if oldname then
local name_we = self.files[self.perpage*(self.page-1)+self.current - #self.dirs]
local ext = string.lower(string.match(oldname, ".+%.([^.]+)") or "")
name_we = string.sub(name_we,1,-2-string.len(ext))
local newname = InputBox:input(0, 0, "New filename:", name_we)
if newname then
newname = self.path.."/"..newname..'.'..ext
newname = self.path.."/"..newname
os.rename(oldname, newname)
os.rename(DocToHistory(oldname), DocToHistory(newname))
self:setPath(self.path)

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:select_render_mode()
render_mode = 0, -- COLOUR
-- cached tile size
fullwidth = 0,
@@ -1015,6 +1015,7 @@ function UniReader:loadSettings(filename)
self.globalzoom = self.settings:readSetting("globalzoom") or 1.0
self.globalzoom_mode = self.settings:readSetting("globalzoom_mode") or -1
self.render_mode = self.settings:readSetting("render_mode") or 0
self:loadSpecialSettings()
return true
@@ -2000,6 +2001,7 @@ function UniReader:inputLoop()
self.settings:saveSetting("globalzoom", self.globalzoom)
self.settings:saveSetting("globalzoom_mode", self.globalzoom_mode)
self.settings:saveSetting("highlight", self.highlight)
self.settings:saveSetting("render_mode", self.render_mode)
self:saveSpecialSettings()
self.settings:close()
end
@@ -2260,7 +2262,7 @@ function UniReader:addAllCommands()
-- now, perform full screen refresh
self.rcount = self.rcountmax
self:redrawCurrentPage()
--[[ eink will not refresh if nothing is changeed on the screen
--[[ eink will not refresh if nothing is changed on the screen
-- so we fake a change here.
fb.bb:invertRect(0, 0, 1, 1)
fb:refresh(1)