2
0
mirror of https://github.com/koreader/koreader synced 2024-10-31 21:20:20 +00:00
koreader/spec/unit/widget_inputcontainer_spec.lua
Qingping Hou 0c49b915de refactor: add touch zone subsystem to inputcontainer
Touch zone decouples screen size from gesture event registration.

The win here is each individual widget does not need to update
gesture range on screen rotate/resize anymore.

Another advantage is we now have a centralized ordered array to handle
all registered touch event listeners, makes it much easier to resolve
gesture range conflicts between multiple widgets.

This patch also includes the following changes:

* migrate readerpaging to use readerui's touch zone
* migrate readerfooter to use readerui's touch zone
* move inverse read direction setting to touch menu's setting tab
* moved kobolight widget from readerview into readerui
* various dead code cleanups and comments
2016-12-10 16:06:51 -08:00

78 lines
2.7 KiB
Lua

describe("InputContainer widget", function()
local InputContainer, Screen
setup(function()
require("commonrequire")
InputContainer = require("ui/widget/container/inputcontainer")
Screen = require("device").screen
end)
it("should register touch zones", function()
local ic = InputContainer:new{}
assert.is.same(#ic._touch_zones, 0)
ic:registerTouchZones({
{
id = "foo",
ges = "swipe",
screen_zone = {
ratio_x = 0, ratio_y = 0, ratio_w = 1, ratio_h = 1,
},
handler = function() end,
},
{
id = "bar",
ges = "tap",
screen_zone = {
ratio_x = 0, ratio_y = 0.1, ratio_w = 0.5, ratio_h = 1,
},
handler = function() end,
},
})
local screen_width, screen_height = Screen:getWidth(), Screen:getHeight()
assert.is.same(#ic._touch_zones, 2)
assert.is.same("foo", ic._touch_zones[1].def.id)
assert.is.same(ic._touch_zones[1].def.handler, ic._touch_zones[1].handler)
assert.is.same("bar", ic._touch_zones[2].def.id)
assert.is.same("tap", ic._touch_zones[2].gs_range.ges)
assert.is.same(0, ic._touch_zones[2].gs_range.range.x)
assert.is.same(screen_height * 0.1, ic._touch_zones[2].gs_range.range.y)
assert.is.same(screen_width / 2, ic._touch_zones[2].gs_range.range.w)
assert.is.same(screen_height, ic._touch_zones[2].gs_range.range.h)
end)
it("should support overrides for touch zones", function()
local ic = InputContainer:new{}
ic:registerTouchZones({
{
id = "foo",
ges = "tap",
screen_zone = {
ratio_x = 0, ratio_y = 0, ratio_w = 1, ratio_h = 1,
},
handler = function() end,
},
{
id = "bar",
ges = "tap",
screen_zone = {
ratio_x = 0, ratio_y = 0, ratio_w = 0.5, ratio_h = 1,
},
handler = function() end,
},
{
id = "baz",
ges = "tap",
screen_zone = {
ratio_x = 0, ratio_y = 0, ratio_w = 0.5, ratio_h = 1,
},
overrides = { 'foo' },
handler = function() end,
},
})
assert.is.same(ic._touch_zones[1].def.id, 'baz')
assert.is.same(ic._touch_zones[2].def.id, 'foo')
assert.is.same(ic._touch_zones[3].def.id, 'bar')
end)
end)