mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Merge pull request #240 from tigran123/master
DjVu rendering mode and other changes.
This commit is contained in:
9
djvu.c
9
djvu.c
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user