mirror of https://github.com/koreader/koreader
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.pull/1676/head
parent
a043d8873b
commit
9654e9ce6c
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
@ -0,0 +1,97 @@
|
||||
-- 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
|
Loading…
Reference in New Issue