diff --git a/djvureader.lua b/djvureader.lua index f34c434f0..e929f765d 100644 --- a/djvureader.lua +++ b/djvureader.lua @@ -12,64 +12,8 @@ function DJVUReader:init() end -- open a DJVU file and its settings store +-- DJVU does not support password yet function DJVUReader:open(filename) self.doc = djvu.openDocument(filename) - if self.doc ~= nil then - self.settings = DocSettings:open(filename) - local gamma = self.settings:readsetting("gamma") - if gamma then - self.globalgamma = gamma - end - return true - end - return false -end - ---set viewer state according to zoom state -function DJVUReader:setzoom(page) - local dc = self.newDC() - local pwidth, pheight = page:getSize(self.nulldc) - - if self.globalzoommode == self.ZOOM_FIT_TO_PAGE then - self.globalzoom = width / pwidth - self.offset_x = 0 - self.offset_y = (height - (self.globalzoom * pheight)) / 2 - if height / pheight < self.globalzoom then - self.globalzoom = height / pheight - print(width, (self.globalzoom * pwidth)) - self.offset_x = (width - (self.globalzoom * pwidth)) / 2 - self.offset_y = 0 - end - elseif self.globalzoommode == self.ZOOM_FIT_TO_PAGE_WIDTH then - self.globalzoom = width / pwidth - self.offset_x = 0 - self.offset_y = (height - (self.globalzoom * pheight)) / 2 - elseif self.globalzoommode == self.ZOOM_FIT_TO_PAGE_HEIGHT then - self.globalzoom = height / pheight - self.offset_x = (width - (self.globalzoom * pwidth)) / 2 - self.offset_y = 0 - end - - dc:setZoom(self.globalzoom) - -- record globalzoom for manual zoom in/out - self.globalzoom_orig = self.globalzoom - - dc:setRotate(self.globalrotate); - dc:setOffset(self.offset_x, self.offset_y) - self.fullwidth, self.fullheight = page:getSize(dc) - self.min_offset_x = fb.bb:getWidth() - self.fullwidth - self.min_offset_y = fb.bb:getHeight() - self.fullheight - if(self.min_offset_x > 0) then - self.min_offset_x = 0 - end - if(self.min_offset_y > 0) then - self.min_offset_y = 0 - end - - -- set gamma here, we don't have any other good place for this right now: - if self.globalgamma ~= self.GAMMA_NO_GAMMA then - print("gamma correction: "..self.globalgamma) - dc:setGamma(self.globalgamma) - end - return dc + return self:loadSettings(filename) end diff --git a/pdfreader.lua b/pdfreader.lua index 8973cfadf..5bd12aa73 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -14,13 +14,5 @@ end -- open a PDF file and its settings store function PDFReader:open(filename, password) self.doc = pdf.openDocument(filename, password or "") - if self.doc ~= nil then - self.settings = DocSettings:open(filename) - local gamma = self.settings:readsetting("gamma") - if gamma then - self.globalgamma = gamma - end - return true - end - return false + return self:loadSettings(filename) end diff --git a/unireader.lua b/unireader.lua index 3d476c2ae..812732785 100644 --- a/unireader.lua +++ b/unireader.lua @@ -72,10 +72,41 @@ function UniReader:new(o) return o end +--[[ + For a new specific reader, + you must always overwrite following two methods: + + * self:init() + * self:open() + + overwrite other methods if needed. +--]] function UniReader:init() print("empty initialization method!") end +-- open a file and its settings store +-- tips: you can use self:loadSettings in open() method. +function UniReader:open(filename, password) + return false +end + + + +--[ following are default methods ]-- + +function UniReader:loadSettings(filename) + if self.doc ~= nil then + self.settings = DocSettings:open(filename) + local gamma = self.settings:readsetting("gamma") + if gamma then + self.globalgamma = gamma + end + return true + end + return false +end + -- guarantee that we have enough memory in cache function UniReader:cacheclaim(size) if(size > self.cache_max_memsize) then @@ -136,11 +167,6 @@ function UniReader:clearcache() self.cache_current_memsize = 0 end --- open a file and its settings store -function UniReader:open(filename, password) - return false -end - -- set viewer state according to zoom state function UniReader:setzoom(page) local dc = self.newDC()