2
0
mirror of https://github.com/koreader/koreader synced 2024-11-10 01:10:34 +00:00
koreader/utils/kobo_touch_probe.lua
chrox fb073c4d63 fix kobo touch probe
The KOBO_TOUCH_MIRRORED is only used when init input device,
after the initialization setting it will have no effect on the
event adjust hook.
2015-10-21 22:53:39 +08:00

98 lines
3.1 KiB
Lua
Executable File

-- touch probe utility
-- usage: ./luajit util/kobo_touch_probe.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
elseif switch_xy then
Input:registerEventAdjustHook(Input.adjustTouchSwitchXY)
end
end