diff --git a/frontend/ui/bbox.lua b/frontend/ui/bbox.lua index 0cfd7bd07..41ce3a7f1 100644 --- a/frontend/ui/bbox.lua +++ b/frontend/ui/bbox.lua @@ -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 diff --git a/frontend/ui/reader/readercropping.lua b/frontend/ui/reader/readercropping.lua index 734052f3c..093bc30b1 100644 --- a/frontend/ui/reader/readercropping.lua +++ b/frontend/ui/reader/readercropping.lua @@ -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) diff --git a/frontend/ui/reader/readerview.lua b/frontend/ui/reader/readerview.lua index 067a8c2bf..3660ee698 100644 --- a/frontend/ui/reader/readerview.lua +++ b/frontend/ui/reader/readerview.lua @@ -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( diff --git a/frontend/ui/reader/readerzooming.lua b/frontend/ui/reader/readerzooming.lua index d0e7a840c..f864e0820 100644 --- a/frontend/ui/reader/readerzooming.lua +++ b/frontend/ui/reader/readerzooming.lua @@ -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