From 2d5222ef337d3c3652f75e642a9776391efee310 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Sun, 27 Mar 2016 01:26:37 -0700 Subject: [PATCH] readerview: add get/set methods for view context --- frontend/apps/reader/modules/readerview.lua | 30 ++++++++++++++ spec/unit/readerview_spec.lua | 46 +++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/frontend/apps/reader/modules/readerview.lua b/frontend/apps/reader/modules/readerview.lua index 3e437c872..d5b2835aa 100644 --- a/frontend/apps/reader/modules/readerview.lua +++ b/frontend/apps/reader/modules/readerview.lua @@ -557,6 +557,36 @@ function ReaderView:SetZoomCenter(x, y) end end +function ReaderView:getViewContext() + if self.page_scroll then + return self.page_states + else + return { + { + page = self.state.page, + pos = self.state.pos, + zoom = self.state.zoom, + rotation = self.state.rotation, + gamma = self.state.gamma, + offset = self.state.offset:copy(), + bbox = self.state.bbox, + }, + self.visible_area:copy(), + self.page_area:copy(), + } + end +end + +function ReaderView:restoreViewContext(ctx) + if self.page_scroll then + self.page_states = ctx + else + self.state = ctx[1] + self.visible_area = ctx[2] + self.page_area = ctx[3] + end +end + function ReaderView:onSetScreenMode(new_mode, rotation) if new_mode == "landscape" or new_mode == "portrait" then self.screen_mode = new_mode diff --git a/spec/unit/readerview_spec.lua b/spec/unit/readerview_spec.lua index a0a0c0f3b..67331e798 100644 --- a/spec/unit/readerview_spec.lua +++ b/spec/unit/readerview_spec.lua @@ -39,4 +39,50 @@ describe("Readerview module", function() end end end) + + it("should return and restore view context", function() + local sample_pdf = "spec/front/unit/data/2col.pdf" + local readerui = ReaderUI:new{ + document = DocumentRegistry:openDocument(sample_pdf), + } + local view = readerui.view + local ctx = view:getViewContext() + local zoom = ctx[1].zoom + ctx[1].zoom = nil + local saved_ctx = { + { + page = 1, + pos = 0, + gamma = 1, + offset = { + x = 17, y = 0, + h = 0, w = 0, + }, + rotation = 0, + }, + -- visible_area + { + x = 0, y = 0, + h = 800, w = 566, + }, + -- page_area + { + x = 0, y = 0, + h = 800, w = 566, + }, + } + assert.are.same(ctx, saved_ctx) + assertAlmostEquals(zoom, 0.95011876484561, 0.0001) + + assert.is.same(view.state.page, 1) + assert.is.same(view.visible_area.x, 0) + assert.is.same(view.visible_area.y, 0) + saved_ctx[1].page = 2 + saved_ctx[1].zoom = zoom + saved_ctx[2].y = 10 + view:restoreViewContext(saved_ctx) + assert.is.same(view.state.page, 2) + assert.is.same(view.visible_area.x, 0) + assert.is.same(view.visible_area.y, 10) + end) end)