cleanup: lookup reader view states like pageno and screen offset directly in self.view

pull/2/merge
chrox 11 years ago
parent 14bcec4b81
commit 46357d617c

@ -10,6 +10,8 @@ BBoxWidget = InputContainer:new{
}
function BBoxWidget:init()
self.page_bbox = self.document:getPageBBox(self.view.state.page)
--DEBUG("used page bbox on page", self.view.state.page, self.page_bbox)
if Device:isTouchDevice() then
self.ges_events = {
AdjustCrop = {
@ -68,9 +70,9 @@ end
-- transform page bbox to screen bbox
function BBoxWidget:page_to_screen()
local bbox = {}
local scale = self.crop.zoom
local screen_offset = self.crop.screen_offset
DEBUG("screen offset in page_to_screen", screen_offset)
local scale = self.view.state.zoom
local screen_offset = self.view.state.offset
--DEBUG("screen offset in page_to_screen", screen_offset)
bbox.x0 = self.page_bbox.x0 * scale + screen_offset.x
bbox.y0 = self.page_bbox.y0 * scale + screen_offset.y
bbox.x1 = self.page_bbox.x1 * scale + screen_offset.x
@ -81,9 +83,9 @@ end
-- transform screen bbox to page bbox
function BBoxWidget:screen_to_page()
local bbox = {}
local scale = self.crop.zoom
local screen_offset = self.crop.screen_offset
DEBUG("screen offset in screen_to_page", screen_offset)
local scale = self.view.state.zoom
local screen_offset = self.view.state.offset
--DEBUG("screen offset in screen_to_page", screen_offset)
bbox.x0 = (self.screen_bbox.x0 - screen_offset.x) / scale
bbox.y0 = (self.screen_bbox.y0 - screen_offset.y) / scale
bbox.x1 = (self.screen_bbox.x1 - screen_offset.x) / scale
@ -92,7 +94,7 @@ function BBoxWidget:screen_to_page()
end
function BBoxWidget:onAdjustCrop(arg, ges)
DEBUG("adjusting crop bbox with pos", ges.pos)
--DEBUG("adjusting crop bbox with pos", ges.pos)
local bbox = self.screen_bbox
local upper_left = Geom:new{ x = bbox.x0, y = bbox.y0}
local upper_right = Geom:new{ x = bbox.x1, y = bbox.y0}
@ -125,16 +127,13 @@ function BBoxWidget:onAdjustCrop(arg, ges)
end
function BBoxWidget:onConfirmCrop()
self.page_bbox = self:screen_to_page()
--DEBUG("new bbox", self.page_bbox)
UIManager:close(self)
self.ui:handleEvent(Event:new("BBoxUpdate"), self.page_bbox)
self.document.bbox[self.pageno] = self.page_bbox
self.document.bbox[math.oddEven(self.pageno)] = self.page_bbox
self.ui:handleEvent(Event:new("ExitPageCrop", true))
local new_bbox = self:screen_to_page()
self.ui:handleEvent(Event:new("ConfirmPageCrop", new_bbox))
return true
end
function BBoxWidget:onCancelCrop()
UIManager:close(self)
self.ui:handleEvent(Event:new("ExitPageCrop"))
UIManager:close(self.crop_bbox)
self.ui:handleEvent(Event:new("CancelPageCrop"))
return true
end

@ -4,9 +4,11 @@ ReaderCropping = InputContainer:new{}
function ReaderCropping:onPageCrop(mode)
if mode == "auto" then return end
self.orig_reflow_mode = self.document.configurable.text_wrap
self.ui:handleEvent(Event:new("CloseConfig"))
self.cropping_offset = true
-- 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
self.orig_reflow_mode = self.document.configurable.text_wrap
if self.orig_reflow_mode == 1 then
self.document.configurable.text_wrap = 0
-- if we are in reflow mode, then we are already in page
@ -15,24 +17,38 @@ function ReaderCropping:onPageCrop(mode)
else
self.ui:handleEvent(Event:new("SetZoomMode", "page", "cropping"))
end
local ubbox = self.document:getPageBBox(self.current_page)
--DEBUG("used page bbox", ubbox)
self.crop_bbox = BBoxWidget:new{
page_bbox = ubbox,
ui = self.ui,
crop = self,
view = self.view,
document = self.document,
pageno = self.current_page,
}
UIManager:show(self.crop_bbox)
return true
end
function ReaderCropping:onExitPageCrop(confirmed)
function ReaderCropping:onConfirmPageCrop(new_bbox)
--DEBUG("new bbox", new_bbox)
UIManager:close(self.crop_bbox)
self.ui:handleEvent(Event:new("BBoxUpdate"), new_bbox)
local pageno = self.view.state.page
self.document.bbox[pageno] = new_bbox
self.document.bbox[math.oddEven(pageno)] = new_bbox
self:exitPageCrop(true)
return true
end
function ReaderCropping:onCancelPageCrop()
UIManager:close(self.crop_bbox)
self:exitPageCrop(false)
return true
end
function ReaderCropping:exitPageCrop(confirmed)
self.document.configurable.text_wrap = self.orig_reflow_mode
self.view:recalculate()
-- Exiting should have the same look and feel with entering.
if self.orig_reflow_mode == 1 then
-- restore original reflow mode
self.document.configurable.text_wrap = 1
self.view:recalculate()
else
@ -44,32 +60,6 @@ function ReaderCropping:onExitPageCrop(confirmed)
end
end
UIManager.repaint_all = true
return true
end
function ReaderCropping:onPageUpdate(page_no)
--DEBUG("page updated to", page_no)
self.current_page = page_no
end
function ReaderCropping:onZoomUpdate(zoom)
--DEBUG("zoom updated to", zoom)
self.zoom = zoom
end
function ReaderCropping:onScreenOffsetUpdate(screen_offset)
if self.cropping_offset then
--DEBUG("offset updated to", screen_offset)
self.screen_offset = screen_offset
self.cropping_offset = false
end
end
function ReaderCropping:onSetZoomMode(mode, orig)
if orig ~= "cropping" and mode then
--DEBUG("backup zoom mode", mode)
self.orig_zoom_mode = mode
end
end
function ReaderCropping:onReadSettings(config)

@ -8,7 +8,7 @@ ReaderView = WidgetContainer:new{
zoom = 1.0,
rotation = 0,
gamma = 1.0,
offset = {},
offset = nil,
bbox = nil,
},
outer_page_color = 7,
@ -40,7 +40,7 @@ function ReaderView:paintTo(bb, x, y)
bb:paintRect(x, y, inner_offset.x, self.ui.dimen.h, self.outer_page_color)
bb:paintRect(x + self.ui.dimen.w - inner_offset.x - 1, y, inner_offset.x + 1, self.ui.dimen.h, self.outer_page_color)
end
self.ui:handleEvent(Event:new("ScreenOffsetUpdate", inner_offset))
self.state.offset = inner_offset
-- draw content
if self.ui.document.info.has_pages then
self.ui.document:drawPage(

@ -95,6 +95,7 @@ function ReaderZooming:onZoom(direction)
end
function ReaderZooming:onSetZoomMode(new_mode)
self.view.zoom_mode = new_mode
if self.zoom_mode ~= new_mode then
DEBUG("setting zoom mode to", new_mode)
self.zoom_mode = new_mode

Loading…
Cancel
Save