mirror of
https://github.com/koreader/koreader
synced 2024-11-11 19:11:14 +00:00
f7d538b108
* landscape FM / Refactor rotation refactor and simplify the orientation handling code. the user generally cares about the rotation (what direction the device is facing) and not about if koreader is displaying in portrait or landscape mode * bump base update luasocket, libjpeg-turbo, curl add logging to evernote-sdk-lua update framebuffer for proper rotation
157 lines
5.4 KiB
Lua
157 lines
5.4 KiB
Lua
describe("Readerview module", function()
|
|
local DocumentRegistry, Blitbuffer, ReaderUI, UIManager, Event, Screen
|
|
|
|
setup(function()
|
|
require("commonrequire")
|
|
package.unloadAll()
|
|
require("document/canvascontext"):init(require("device"))
|
|
DocumentRegistry = require("document/documentregistry")
|
|
Blitbuffer = require("ffi/blitbuffer")
|
|
ReaderUI = require("apps/reader/readerui")
|
|
UIManager = require("ui/uimanager")
|
|
Event = require("ui/event")
|
|
Screen = require("device").screen
|
|
end)
|
|
|
|
it("should stop hinting on document close event", function()
|
|
local sample_epub = "spec/front/unit/data/leaves.epub"
|
|
local readerui = ReaderUI:new{
|
|
dimen = Screen:getSize(),
|
|
document = DocumentRegistry:openDocument(sample_epub),
|
|
}
|
|
for i = #UIManager._task_queue, 1, -1 do
|
|
local task = UIManager._task_queue[i]
|
|
if task.action == readerui.view.emitHintPageEvent then
|
|
error("UIManager's task queue should be emtpy.")
|
|
end
|
|
end
|
|
|
|
local bb = Blitbuffer.new(1000, 1000)
|
|
readerui.view:drawSinglePage(bb, 0, 0)
|
|
|
|
local found = false
|
|
for i = #UIManager._task_queue, 1, -1 do
|
|
local task = UIManager._task_queue[i]
|
|
if task.action == readerui.view.emitHintPageEvent then
|
|
found = true
|
|
end
|
|
end
|
|
assert.is.truthy(found)
|
|
|
|
readerui:onClose()
|
|
|
|
assert.is.falsy(readerui.view.hinting)
|
|
for i = #UIManager._task_queue, 1, -1 do
|
|
local task = UIManager._task_queue[i]
|
|
if task.action == readerui.view.emitHintPageEvent then
|
|
error("UIManager's task queue should be emtpy.")
|
|
end
|
|
end
|
|
end)
|
|
|
|
it("should return and restore view context in page mode", function()
|
|
-- we don't want a footer for this test
|
|
G_reader_settings:saveSetting("reader_footer_mode", 0)
|
|
local sample_pdf = "spec/front/unit/data/2col.pdf"
|
|
local readerui = ReaderUI:new{
|
|
dimen = Screen:getSize(),
|
|
document = DocumentRegistry:openDocument(sample_pdf),
|
|
}
|
|
readerui:handleEvent(Event:new("SetScrollMode", false))
|
|
readerui.zooming:setZoomMode("page")
|
|
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(saved_ctx, ctx)
|
|
assert.is.near(0.95011876484561, zoom, 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)
|
|
G_reader_settings:delSetting("reader_footer_mode")
|
|
end)
|
|
|
|
it("should return and restore view context in scroll mode", function()
|
|
-- we don't want a footer for this test
|
|
G_reader_settings:saveSetting("reader_footer_mode", 0)
|
|
local sample_pdf = "spec/front/unit/data/2col.pdf"
|
|
local readerui = ReaderUI:new{
|
|
dimen = Screen:getSize(),
|
|
document = DocumentRegistry:openDocument(sample_pdf),
|
|
}
|
|
readerui:handleEvent(Event:new("SetScrollMode", true))
|
|
readerui:handleEvent(Event:new("SetZoomMode", "page"))
|
|
readerui.zooming:setZoomMode("page")
|
|
local view = readerui.view
|
|
local ctx = view:getViewContext()
|
|
local zoom = ctx[1].zoom
|
|
ctx[1].zoom = nil
|
|
local saved_ctx = {
|
|
{
|
|
gamma = 1,
|
|
offset = {x = 0, y = 0},
|
|
page = 1,
|
|
page_area = {
|
|
h = 800,
|
|
w = 566,
|
|
x = 0,
|
|
y = 0,
|
|
},
|
|
rotation = 0,
|
|
visible_area = {
|
|
h = 800,
|
|
w = 566,
|
|
x = 0,
|
|
y = 0,
|
|
},
|
|
},
|
|
}
|
|
|
|
assert.are.same(saved_ctx, ctx)
|
|
assert.is.near(0.95011876484561, zoom, 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[1].visible_area.y = 10
|
|
view:restoreViewContext(saved_ctx)
|
|
assert.is.same(#view.page_states, 1)
|
|
assert.is.same(view.page_states[1].page, 2)
|
|
assert.is.same(view.page_states[1].visible_area.x, 0)
|
|
assert.is.same(view.page_states[1].visible_area.y, 10)
|
|
G_reader_settings:delSetting("reader_footer_mode")
|
|
end)
|
|
end)
|