Files
koreader/utils/kobo_touch_proble.lua
chrox 9654e9ce6c fix #1608 with touch coordinates detection
Some kobo touch devices have X Y coordinates in touch events swapped.
This patch provides a GUI to probe if the device needs to swap the XY.
The Kobo Touch users will be directed to tap on the upper right corner
of the screen and the probe will check if the X value is smaller than
the Y value in the tap event.
2015-10-18 00:25:40 +08:00

98 lines
3.1 KiB
Lua
Executable File

-- touch probe utility
-- usage: ./luajit util/kobo_touch_proble.lua
require "defaults"
package.path = "common/?.lua;rocks/share/lua/5.1/?.lua;frontend/?.lua;" .. package.path
package.cpath = "common/?.so;common/?.dll;/usr/lib/lua/?.so;rocks/lib/lua/5.1/?.so;" .. package.cpath
local DocSettings = require("docsettings")
local _ = require("gettext")
-- read settings and check for language override
-- has to be done before requiring other files because
-- they might call gettext on load
G_reader_settings = DocSettings:open(".reader")
local lang_locale = G_reader_settings:readSetting("language")
if lang_locale then
_.changeLang(lang_locale)
end
local InputContainer = require("ui/widget/container/inputcontainer")
local CenterContainer = require("ui/widget/container/centercontainer")
local RightContainer = require("ui/widget/container/rightcontainer")
local OverlapGroup = require("ui/widget/overlapgroup")
local ImageWidget = require("ui/widget/imagewidget")
local TextWidget = require("ui/widget/textwidget")
local GestureRange = require("ui/gesturerange")
local UIManager = require("ui/uimanager")
local Blitbuffer = require("ffi/blitbuffer")
local Geom = require("ui/geometry")
local Device = require("device")
local Screen = require("device").screen
local Input = require("device").input
local Font = require("ui/font")
local DEBUG = require("dbg")
--DEBUG:turnOn()
local TouchProbe = InputContainer:new{
}
function TouchProbe:init()
self.ges_events = {
TapProbe = {
GestureRange:new{
ges = "tap",
range = Geom:new{
x = 0, y = 0,
w = Screen:getWidth(),
h = Screen:getHeight(),
},
}
},
}
local image_widget = ImageWidget:new{
file = "resources/kobo-touch-probe.png",
}
self[1] = OverlapGroup:new{
dimen = Screen:getSize(),
CenterContainer:new{
dimen = Screen:getSize(),
TextWidget:new{
text = _("Tap the upper right corner"),
face = Font:getFace("cfont", 30),
},
},
RightContainer:new{
dimen = {
h = image_widget:getSize().h,
w = Screen:getSize().w,
},
image_widget,
},
}
end
function TouchProbe:onTapProbe(arg, ges)
--DEBUG("onTapProbe", ges)
local need_to_switch_xy = ges.pos.x < ges.pos.y
--DEBUG("Need to switch xy", need_to_switch_xy)
G_reader_settings:saveSetting("kobo_touch_switch_xy", need_to_switch_xy)
G_reader_settings:close()
if need_to_switch_xy then
Input:registerEventAdjustHook(Input.adjustTouchSwitchXY)
end
UIManager:quit()
end
-- if user has not set KOBO_TOUCH_MIRRORED yet
if KOBO_TOUCH_MIRRORED == nil then
local switch_xy = G_reader_settings:readSetting("kobo_touch_switch_xy")
-- and has no probe before
if switch_xy == nil then
UIManager:show(TouchProbe:new{})
UIManager:run()
-- otherwise, we will use probed result
else
KOBO_TOUCH_MIRRORED = switch_xy
end
end