mirror of
https://github.com/koreader/koreader
synced 2024-10-31 21:20:20 +00:00
9b7aba3fba
Also fix touch zone dependency graph generation code. ReaderHighlight has now been migrated to use touch zone Inputcontainer's touch event handling logic changed to only stop propagation when handler returns `true`. Previously, it stops propagation when a handler is found. This is needed to support both readerhighlight_tap and tap_forward touch zones.
156 lines
5.8 KiB
Lua
156 lines
5.8 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._ordered_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._ordered_touch_zones, 2)
|
|
assert.is.same("foo", ic._ordered_touch_zones[1].def.id)
|
|
assert.is.same(ic._ordered_touch_zones[1].def.handler, ic._ordered_touch_zones[1].handler)
|
|
assert.is.same("bar", ic._ordered_touch_zones[2].def.id)
|
|
assert.is.same("tap", ic._ordered_touch_zones[2].gs_range.ges)
|
|
assert.is.same(0, ic._ordered_touch_zones[2].gs_range.range.x)
|
|
assert.is.same(screen_height * 0.1, ic._ordered_touch_zones[2].gs_range.range.y)
|
|
assert.is.same(screen_width / 2, ic._ordered_touch_zones[2].gs_range.range.w)
|
|
assert.is.same(screen_height, ic._ordered_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._ordered_touch_zones[1].def.id, 'baz')
|
|
assert.is.same(ic._ordered_touch_zones[2].def.id, 'foo')
|
|
assert.is.same(ic._ordered_touch_zones[3].def.id, 'bar')
|
|
end)
|
|
|
|
it("should support indirect overrides for touch zones", function()
|
|
local ic = InputContainer:new{}
|
|
local dummy_screen_size = {ratio_x = 0, ratio_y = 0, ratio_w = 1, ratio_h = 1,}
|
|
ic:registerTouchZones({
|
|
{
|
|
id = "readerfooter_tap",
|
|
ges = "tap",
|
|
screen_zone = dummy_screen_size,
|
|
overrides = {
|
|
'tap_forward', 'tap_backward', 'readermenu_tap',
|
|
},
|
|
handler = function() end,
|
|
},
|
|
{
|
|
id = "readerfooter_hold",
|
|
ges = "hold",
|
|
screen_zone = dummy_screen_size,
|
|
overrides = {'readerhighlight_hold'},
|
|
handler = function() end,
|
|
},
|
|
{
|
|
id = "readerhighlight_tap",
|
|
ges = "tap",
|
|
screen_zone = dummy_screen_size,
|
|
overrides = { 'tap_forward', 'tap_backward', },
|
|
handler = function() end,
|
|
},
|
|
{
|
|
id = "readerhighlight_hold",
|
|
ges = "hold",
|
|
screen_zone = dummy_screen_size,
|
|
handler = function() end,
|
|
},
|
|
{
|
|
id = "readerhighlight_hold_release",
|
|
ges = "hold_release",
|
|
screen_zone = dummy_screen_size,
|
|
handler = function() end,
|
|
},
|
|
{
|
|
id = "readerhighlight_hold_pan",
|
|
ges = "hold_pan",
|
|
rate = 2.0,
|
|
screen_zone = dummy_screen_size,
|
|
handler = function() end,
|
|
},
|
|
{
|
|
id = "tap_forward",
|
|
ges = "tap",
|
|
screen_zone = dummy_screen_size,
|
|
handler = function() end,
|
|
},
|
|
{
|
|
id = "tap_backward",
|
|
ges = "tap",
|
|
screen_zone = dummy_screen_size,
|
|
handler = function() end,
|
|
},
|
|
{
|
|
id = "readermenu_tap",
|
|
ges = "tap",
|
|
overrides = { "tap_forward", "tap_backward", },
|
|
screen_zone = dummy_screen_size,
|
|
handler = function() end,
|
|
},
|
|
})
|
|
|
|
assert.is.same('readerfooter_tap', ic._ordered_touch_zones[1].def.id)
|
|
assert.is.same('readerhighlight_tap', ic._ordered_touch_zones[2].def.id)
|
|
assert.is.same('readermenu_tap', ic._ordered_touch_zones[3].def.id)
|
|
assert.is.same('tap_backward', ic._ordered_touch_zones[4].def.id)
|
|
assert.is.same('readerhighlight_hold_pan', ic._ordered_touch_zones[5].def.id)
|
|
assert.is.same('readerfooter_hold', ic._ordered_touch_zones[6].def.id)
|
|
assert.is.same('readerhighlight_hold', ic._ordered_touch_zones[7].def.id)
|
|
assert.is.same('tap_forward', ic._ordered_touch_zones[8].def.id)
|
|
assert.is.same('readerhighlight_hold_release', ic._ordered_touch_zones[9].def.id)
|
|
end)
|
|
end)
|