diff --git a/frontend/document/document.lua b/frontend/document/document.lua index e21005a1a..9232a9c37 100644 --- a/frontend/document/document.lua +++ b/frontend/document/document.lua @@ -245,7 +245,7 @@ end function Document:hintPage(pageno, zoom, rotation, gamma, render_mode) local hash_full_page = "renderpg|"..self.file.."|"..pageno.."|"..zoom.."|"..rotation.."|"..gamma.."|"..render_mode if not Cache:check(hash_full_page) then - --DEBUG("hinting page", pageno) + DEBUG("hinting page", pageno) self:renderPage(pageno, nil, zoom, rotation, gamma, render_mode) end end diff --git a/frontend/document/koptinterface.lua b/frontend/document/koptinterface.lua index 7cf28404c..ec887959d 100644 --- a/frontend/document/koptinterface.lua +++ b/frontend/document/koptinterface.lua @@ -14,7 +14,7 @@ KoptOptions = { name_text = "Screen Mode", toggle = {"portrait", "landscape"}, args = {"portrait", "landscape"}, - default_arg = Screen:getScreenMode(), + default_arg = "portrait", current_func = function() return Screen:getScreenMode() end, event = "SetScreenMode", } @@ -51,8 +51,8 @@ KoptOptions = { name = "page_margin", name_text = "Page Margin", toggle = {"small", "medium", "large"}, - values = {0.02, 0.06, 0.10}, - default_value = 0.06, + values = {0.06, 0.10, 0.14}, + default_value = 0.10, }, { name = "line_spacing", @@ -92,11 +92,11 @@ KoptOptions = { options = { { name = "font_size", - item_text = {"Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa"}, + item_text = {"Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa","Aa"}, item_align_center = 1.0, - spacing = Screen:getWidth()*0.03, - item_font_size = {20,24,28,32,36,38,40,42,46,50}, - values = {0.2, 0.3, 0.4, 0.6, 0.8, 1.0, 1.2, 1.6, 2.2, 2.8}, + spacing = 15, + item_font_size = {20,24,28,32,34,36,38,40,42,44,46}, + values = {0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 2.0, 4.0}, default_value = 1.0, }, } @@ -186,8 +186,9 @@ KoptOptions = { KoptInterface = {} -- get reflow context -function KoptInterface:getKOPTContext(doc, pageno, bbox, screen_size) +function KoptInterface:getKOPTContext(doc, pageno, bbox) local kc = KOPTContext.new() + local screen_size = Screen:getSize() kc:setTrim(doc.configurable.trim_page) kc:setWrap(doc.configurable.text_wrap) kc:setIndent(doc.configurable.detect_indent) @@ -208,17 +209,34 @@ function KoptInterface:getKOPTContext(doc, pageno, bbox, screen_size) return kc end --- calculates page dimensions -function KoptInterface:getPageDimensions(doc, pageno, zoom, rotation) - -- check cached page size - local bbox = doc:getPageBBox(pageno) - local bbox_hash = bbox.x0.."|"..bbox.y0.."|"..bbox.x1.."|"..bbox.y1 +function KoptInterface:setTrimPage(doc, pageno) + local page_dimens = doc:getNativePageDimensions(pageno) + --DEBUG("original page dimens", page_dimens) + local orig_bbox = doc:getUsedBBox(pageno) + --DEBUG("original bbox", orig_bbox) + if orig_bbox.x1 - orig_bbox.x0 < page_dimens.w + or orig_bbox.y1 - orig_bbox.y0 < page_dimens.h then + doc.configurable.trim_page = 0 + --DEBUG("Set manual crop in koptengine") + end +end + +function KoptInterface:getContextHash(doc, pageno, bbox) local screen_size = Screen:getSize() local screen_size_hash = screen_size.w.."|"..screen_size.h - local hash = "kctx|"..doc.file.."|"..pageno.."|"..doc.configurable:hash("|").."|"..bbox_hash.."|"..screen_size_hash + local bbox_hash = bbox.x0.."|"..bbox.y0.."|"..bbox.x1.."|"..bbox.y1 + return doc.file.."|"..pageno.."|"..doc.configurable:hash("|").."|"..bbox_hash.."|"..screen_size_hash +end + +-- calculates page dimensions +function KoptInterface:getPageDimensions(doc, pageno, zoom, rotation) + self:setTrimPage(doc, pageno) + local bbox = doc:getPageBBox(pageno) + local context_hash = self:getContextHash(doc, pageno, bbox) + local hash = "kctx|"..context_hash local cached = Cache:check(hash) if not cached then - local kc = self:getKOPTContext(doc, pageno, bbox, screen_size) + local kc = self:getKOPTContext(doc, pageno, bbox) local page = doc._document:openPage(pageno) -- reflow page page:reflow(kc, 0) @@ -237,12 +255,11 @@ function KoptInterface:getPageDimensions(doc, pageno, zoom, rotation) end function KoptInterface:renderPage(doc, pageno, rect, zoom, rotation, render_mode) + self:setTrimPage(doc, pageno) doc.render_mode = render_mode local bbox = doc:getPageBBox(pageno) - local bbox_hash = bbox.x0.."|"..bbox.y0.."|"..bbox.x1.."|"..bbox.y1 - local screen_size = Screen:getSize() - local screen_size_hash = screen_size.w.."|"..screen_size.h - local hash = "renderpg|"..doc.file.."|"..pageno.."|"..doc.configurable:hash("|").."|"..bbox_hash.."|"..screen_size_hash + local context_hash = self:getContextHash(doc, pageno, bbox) + local hash = "renderpg|"..context_hash local page_size = self:getPageDimensions(doc, pageno, zoom, rotation) -- this will be the size we actually render local size = page_size @@ -273,7 +290,7 @@ function KoptInterface:renderPage(doc, pageno, rect, zoom, rotation, render_mode } -- draw to blitbuffer - local kc_hash = "kctx|"..doc.file.."|"..pageno.."|"..doc.configurable:hash("|").."|"..bbox_hash.."|"..screen_size_hash + local kc_hash = "kctx|"..context_hash local page = doc._document:openPage(pageno) local cached = Cache:check(kc_hash) if cached then diff --git a/frontend/ui/config.lua b/frontend/ui/config.lua index eecd821a3..473d44b62 100644 --- a/frontend/ui/config.lua +++ b/frontend/ui/config.lua @@ -180,7 +180,7 @@ function ConfigOption:init() local default_option_height = 50 local default_option_padding = 15 local vertical_group = VerticalGroup:new{} - table.insert(vertical_group, VerticalSpan:new{ width = default_option_padding }) + table.insert(vertical_group, VerticalSpan:new{ width = default_option_padding * Screen:getDPI()/167 }) for c = 1, #self.options do if self.options[c].show ~= false then local name_align = self.options[c].name_align_right and self.options[c].name_align_right or 0.33 @@ -189,9 +189,10 @@ function ConfigOption:init() local name_font_size = self.options[c].name_font_size and self.options[c].name_font_size or default_name_font_size local item_font_face = self.options[c].item_font_face and self.options[c].item_font_face or "cfont" local item_font_size = self.options[c].item_font_size and self.options[c].item_font_size or default_item_font_size - local option_height = self.options[c].height and self.options[c].height or default_option_height - local items_spacing = HorizontalSpan:new{ width = self.options[c].spacing and self.options[c].spacing or default_items_spacing} - + local option_height = (self.options[c].height and self.options[c].height or default_option_height) * Screen:getDPI()/167 + local items_spacing = HorizontalSpan:new{ + width = (self.options[c].spacing and self.options[c].spacing or default_items_spacing) * Screen:getDPI()/167 + } local horizontal_group = HorizontalGroup:new{} if self.options[c].name_text then local option_name_container = RightContainer:new{ diff --git a/frontend/ui/reader/readercropping.lua b/frontend/ui/reader/readercropping.lua index 2ec9e598e..58b7f8936 100644 --- a/frontend/ui/reader/readercropping.lua +++ b/frontend/ui/reader/readercropping.lua @@ -55,7 +55,9 @@ function ReaderCropping:onPageCrop(mode) self.ui:handleEvent(Event:new("CloseConfig")) -- backup original view dimen self.orig_view_dimen = Geom:new{w = self.view.dimen.w, h = self.view.dimen.h} - DEBUG("backup view dimen", self.orig_view_dimen) + -- backup original view bgcolor + self.orig_view_bgcolor = self.view.outer_page_color + self.view.outer_page_color = 7 -- gray bgcolor -- backup original zoom mode as cropping use "page" zoom mode self.orig_zoom_mode = self.view.zoom_mode -- backup original reflow mode as cropping use non-reflow mode @@ -105,7 +107,11 @@ function ReaderCropping:onCancelPageCrop() end function ReaderCropping:exitPageCrop(confirmed) + -- restore view bgcolor + self.view.outer_page_color = self.orig_view_bgcolor + -- restore view dimens self.ui:handleEvent(Event:new("RestoreDimensions", self.orig_view_dimen)) + -- restore reflow mode self.document.configurable.text_wrap = self.orig_reflow_mode self.view:recalculate() -- Exiting should have the same look and feel with entering.