From c745f9b48c6c4efc7a1999d9d9855167e50679a6 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 11 Mar 2015 14:05:48 +0100 Subject: [PATCH] nitpicker: forward touch events Issue #1444 --- repos/gems/src/server/wm/nitpicker.h | 1 + repos/os/src/server/nit_fb/main.cc | 20 ++++++++++++++------ repos/os/src/server/nitpicker/user_state.cc | 11 ++++++++--- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/repos/gems/src/server/wm/nitpicker.h b/repos/gems/src/server/wm/nitpicker.h index 047b2353f..926eee18d 100644 --- a/repos/gems/src/server/wm/nitpicker.h +++ b/repos/gems/src/server/wm/nitpicker.h @@ -481,6 +481,7 @@ class Wm::Nitpicker::Session_component : public Genode::Rpc_object, abs_pos.x(), abs_pos.y(), 0, 0); } + case Input::Event::TOUCH: case Input::Event::WHEEL: { Point abs_pos = Point(ev.ax(), ev.ay()) + input_origin; diff --git a/repos/os/src/server/nit_fb/main.cc b/repos/os/src/server/nit_fb/main.cc index dc6b37abf..99edb43b9 100644 --- a/repos/os/src/server/nit_fb/main.cc +++ b/repos/os/src/server/nit_fb/main.cc @@ -65,15 +65,23 @@ static Input::Event translate_event(Input::Event const ev, case Input::Event::RELEASE: case Input::Event::FOCUS: case Input::Event::LEAVE: + case Input::Event::TOUCH: { - Nit_fb::Point abs_pos = Nit_fb::Point(ev.ax(), ev.ay()) - input_origin; + Nit_fb::Point abs_pos = Nit_fb::Point(ev.ax(), ev.ay()) - + input_origin; - using namespace Genode; + using Genode::min; + using Genode::max; + using Input::Event; - return Input::Event(ev.type(), ev.code(), - min((int)boundary.w() - 1, max(0, abs_pos.x())), - min((int)boundary.h() - 1, max(0, abs_pos.y())), - 0, 0); + int const ax = min((int)boundary.w() - 1, max(0, abs_pos.x())); + int const ay = min((int)boundary.h() - 1, max(0, abs_pos.y())); + + if (ev.type() == Event::TOUCH) + return Event::create_touch_event(ax, ay, ev.code(), + ev.is_touch_release()); + + return Event(ev.type(), ev.code(), ax, ay, 0, 0); } case Input::Event::INVALID: diff --git a/repos/os/src/server/nitpicker/user_state.cc b/repos/os/src/server/nitpicker/user_state.cc index 7c1a8dd20..dfdf0d96f 100644 --- a/repos/os/src/server/nitpicker/user_state.cc +++ b/repos/os/src/server/nitpicker/user_state.cc @@ -75,8 +75,13 @@ void User_state::handle_event(Input::Event ev) ry = ev.ry(); } - /* create the mangled event */ - ev = Input::Event(type, keycode, ax, ay, rx, ry); + if (type == Event::TOUCH) { + ax = ev.ax(); + ay = ev.ay(); + ev = Input::Event::create_touch_event(ax, ay, ev.code(), + ev.is_touch_release()); + } else + ev = Input::Event(type, keycode, ax, ay, rx, ry); _pointer_pos = Point(ax, ay); @@ -204,7 +209,7 @@ void User_state::handle_event(Input::Event ev) */ if (kill()) return; - if (type == Event::MOTION || type == Event::WHEEL) { + if (type == Event::MOTION || type == Event::WHEEL || type == Event::TOUCH) { if (Mode::has_key_cnt(0)) {