diff --git a/frontend/document/djvudocument.lua b/frontend/document/djvudocument.lua index fa91e1013..5d7808f8a 100644 --- a/frontend/document/djvudocument.lua +++ b/frontend/document/djvudocument.lua @@ -65,6 +65,14 @@ function DjvuDocument:invertTextYAxel(pageno, text_table) return text_table end +function DjvuDocument:getPageBBox(pageno) + if self.configurable.text_wrap ~= 1 and self.configurable.trim_page == 1 then + return self.koptinterface:getAutoBBox(self, pageno) + else + return Document.getPageBBox(self, pageno) + end +end + function DjvuDocument:getPageDimensions(pageno, zoom, rotation) if self.configurable.text_wrap == 1 then return self.koptinterface:getPageDimensions(self, pageno, zoom, rotation) diff --git a/frontend/document/koptinterface.lua b/frontend/document/koptinterface.lua index 8a9e84476..eeb87a75d 100644 --- a/frontend/document/koptinterface.lua +++ b/frontend/document/koptinterface.lua @@ -88,6 +88,27 @@ function KoptInterface:logReflowDuration(pageno, dur) end end +function KoptInterface:getAutoBBox(doc, pageno) + local bbox = { + x0 = 0, y0 = 0, + x1 = 0, y1 = 0, + } + local context_hash = self:getContextHash(doc, pageno, bbox) + local hash = "autobbox|"..context_hash + local cached = Cache:check(hash) + if not cached then + local page = doc._document:openPage(pageno) + local kc = self:getKOPTContext(doc, pageno, bbox) + bbox.x0, bbox.y0, bbox.x1, bbox.y1 = page:getAutoBBox(kc) + DEBUG("Auto detected bbox", bbox) + page:close() + Cache:insert(hash, CacheItem:new{ bbox = bbox }) + return bbox + else + return cached.bbox + end +end + function KoptInterface:getReflowedDim(kc) self:waitForContext(kc) return kc:getPageDim() diff --git a/frontend/document/pdfdocument.lua b/frontend/document/pdfdocument.lua index 70075e200..c5fe50c7d 100644 --- a/frontend/document/pdfdocument.lua +++ b/frontend/document/pdfdocument.lua @@ -67,6 +67,14 @@ function PdfDocument:getUsedBBox(pageno) return used end +function PdfDocument:getPageBBox(pageno) + if self.configurable.text_wrap ~= 1 and self.configurable.trim_page == 1 then + return self.koptinterface:getAutoBBox(self, pageno) + else + return Document.getPageBBox(self, pageno) + end +end + function PdfDocument:getPageDimensions(pageno, zoom, rotation) if self.configurable.text_wrap == 1 then return self.koptinterface:getPageDimensions(self, pageno, zoom, rotation) diff --git a/frontend/ui/data/koptoptions.lua b/frontend/ui/data/koptoptions.lua index 8e52d64f4..0f611b895 100644 --- a/frontend/ui/data/koptoptions.lua +++ b/frontend/ui/data/koptoptions.lua @@ -57,8 +57,9 @@ KoptOptions = { name = "page_margin", name_text = PAGE_MARGIN_STR, toggle = {SMALL_STR, MEDIUM_STR, LARGE_STR}, - values = {0.06, 0.10, 0.14}, + values = {0.05, 0.10, 0.15}, default_value = 0.10, + event = "MarginUpdate", }, { name = "line_spacing", @@ -175,8 +176,9 @@ KoptOptions = { name = "defect_size", name_text = DEFECT_SIZE_STR, toggle = {SMALL_STR, MEDIUM_STR, LARGE_STR}, - values = {0.5, 1.0, 2.0}, + values = {1.0, 8.0, 15.0}, default_value = 1.0, + event = "DefectSizeUpdate", }, { name = "quality", diff --git a/frontend/ui/reader/readerview.lua b/frontend/ui/reader/readerview.lua index 31ee8beae..e991aa74b 100644 --- a/frontend/ui/reader/readerview.lua +++ b/frontend/ui/reader/readerview.lua @@ -360,6 +360,21 @@ function ReaderView:onGammaUpdate(gamma) end end +function ReaderView:onDefectSizeUpdate() + self.ui:handleEvent(Event:new("ReZoom")) + self.ui:handleEvent(Event:new("InitScrollPageStates")) +end + +function ReaderView:onPageCrop() + self.ui:handleEvent(Event:new("ReZoom")) + self.ui:handleEvent(Event:new("InitScrollPageStates")) +end + +function ReaderView:onMarginUpdate() + self.ui:handleEvent(Event:new("ReZoom")) + self.ui:handleEvent(Event:new("InitScrollPageStates")) +end + function ReaderView:onSetViewMode(new_mode) self.ui.view_mode = new_mode self.ui.document:setViewMode(new_mode) diff --git a/frontend/ui/reader/readerzooming.lua b/frontend/ui/reader/readerzooming.lua index 105e2eced..2ab0b98ff 100644 --- a/frontend/ui/reader/readerzooming.lua +++ b/frontend/ui/reader/readerzooming.lua @@ -155,6 +155,11 @@ function ReaderZooming:onPageUpdate(new_page_no) self:setZoom() end +function ReaderZooming:onReZoom() + self:setZoom() + return true +end + function ReaderZooming:onHintPage() if not self.view.hinting then return true end if self.current_page < self.ui.document.info.number_of_pages then