mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Merge pull request #771 from chrox/kopt-bbox-fix
set manual cropping if bbox exists in koptinterface
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user