mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-19 03:06:39 +00:00
os: Input::Event:Axis event type
This event type can be used to propagate analog values such as joypads. Issue #3669
This commit is contained in:
parent
50c2b0066f
commit
cbe3e49c7f
@ -25,6 +25,13 @@ namespace Input {
|
|||||||
|
|
||||||
struct Touch_id { unsigned value; };
|
struct Touch_id { unsigned value; };
|
||||||
|
|
||||||
|
struct Axis_id
|
||||||
|
{
|
||||||
|
enum { X = 1, Y = 2 };
|
||||||
|
|
||||||
|
unsigned value;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Event attributes
|
* Event attributes
|
||||||
*/
|
*/
|
||||||
@ -40,6 +47,7 @@ namespace Input {
|
|||||||
struct Touch { Touch_id id; float x, y; };
|
struct Touch { Touch_id id; float x, y; };
|
||||||
struct Touch_release { Touch_id id; };
|
struct Touch_release { Touch_id id; };
|
||||||
struct Seq_number { unsigned value; };
|
struct Seq_number { unsigned value; };
|
||||||
|
struct Axis { Axis_id id; float value; };
|
||||||
|
|
||||||
class Event;
|
class Event;
|
||||||
class Binding;
|
class Binding;
|
||||||
@ -52,7 +60,7 @@ class Input::Event
|
|||||||
|
|
||||||
enum Type { INVALID, PRESS, RELEASE, REL_MOTION, ABS_MOTION, WHEEL,
|
enum Type { INVALID, PRESS, RELEASE, REL_MOTION, ABS_MOTION, WHEEL,
|
||||||
FOCUS_ENTER, FOCUS_LEAVE, HOVER_LEAVE, TOUCH, TOUCH_RELEASE,
|
FOCUS_ENTER, FOCUS_LEAVE, HOVER_LEAVE, TOUCH, TOUCH_RELEASE,
|
||||||
SEQ_NUMBER };
|
SEQ_NUMBER, AXIS };
|
||||||
|
|
||||||
Type _type = INVALID;
|
Type _type = INVALID;
|
||||||
|
|
||||||
@ -67,6 +75,7 @@ class Input::Event
|
|||||||
Touch touch;
|
Touch touch;
|
||||||
Touch_release touch_release;
|
Touch_release touch_release;
|
||||||
Seq_number seq_number;
|
Seq_number seq_number;
|
||||||
|
Axis axis;
|
||||||
};
|
};
|
||||||
} _attr { };
|
} _attr { };
|
||||||
|
|
||||||
@ -107,6 +116,7 @@ class Input::Event
|
|||||||
Event(Touch arg) : _type(TOUCH) { _attr.touch = arg; }
|
Event(Touch arg) : _type(TOUCH) { _attr.touch = arg; }
|
||||||
Event(Touch_release arg) : _type(TOUCH_RELEASE) { _attr.touch_release = arg; }
|
Event(Touch_release arg) : _type(TOUCH_RELEASE) { _attr.touch_release = arg; }
|
||||||
Event(Seq_number arg) : _type(SEQ_NUMBER) { _attr.seq_number = arg; }
|
Event(Seq_number arg) : _type(SEQ_NUMBER) { _attr.seq_number = arg; }
|
||||||
|
Event(Axis arg) : _type(AXIS) { _attr.axis = arg; }
|
||||||
|
|
||||||
|
|
||||||
/************************************
|
/************************************
|
||||||
@ -125,6 +135,7 @@ class Input::Event
|
|||||||
bool touch() const { return _type == TOUCH; }
|
bool touch() const { return _type == TOUCH; }
|
||||||
bool touch_release() const { return _type == TOUCH_RELEASE; }
|
bool touch_release() const { return _type == TOUCH_RELEASE; }
|
||||||
bool seq_number() const { return _type == SEQ_NUMBER; }
|
bool seq_number() const { return _type == SEQ_NUMBER; }
|
||||||
|
bool axis() const { return _type == AXIS; }
|
||||||
|
|
||||||
bool key_press(Keycode key) const
|
bool key_press(Keycode key) const
|
||||||
{
|
{
|
||||||
@ -199,6 +210,13 @@ class Input::Event
|
|||||||
fn(_attr.seq_number);
|
fn(_attr.seq_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename FN>
|
||||||
|
void handle_axis(FN const &fn) const
|
||||||
|
{
|
||||||
|
if (axis())
|
||||||
|
fn(_attr.axis.id, _attr.axis.value);
|
||||||
|
}
|
||||||
|
|
||||||
inline void print(Genode::Output &out) const;
|
inline void print(Genode::Output &out) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -221,6 +239,8 @@ void Input::Event::print(Genode::Output &out) const
|
|||||||
case TOUCH: print(out, "TOUCH ", _attr.touch.id.value, " ",
|
case TOUCH: print(out, "TOUCH ", _attr.touch.id.value, " ",
|
||||||
_xy<float>(_attr.touch)); break;
|
_xy<float>(_attr.touch)); break;
|
||||||
case SEQ_NUMBER: print(out, "SEQ_NUMBER ", _attr.seq_number.value); break;
|
case SEQ_NUMBER: print(out, "SEQ_NUMBER ", _attr.seq_number.value); break;
|
||||||
|
case AXIS: print(out, "AXIS ", _attr.axis.id.value, " ",
|
||||||
|
_attr.axis.value); break;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user