refactor platform package to describe physical host input events
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub const Key = enum {
|
||||
unknown,
|
||||
|
||||
// Letters.
|
||||
a,
|
||||
b,
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f,
|
||||
g,
|
||||
h,
|
||||
i,
|
||||
j,
|
||||
k,
|
||||
l,
|
||||
m,
|
||||
n,
|
||||
o,
|
||||
p,
|
||||
q,
|
||||
r,
|
||||
s,
|
||||
t,
|
||||
u,
|
||||
v,
|
||||
w,
|
||||
x,
|
||||
y,
|
||||
z,
|
||||
|
||||
// Navigation.
|
||||
up,
|
||||
down,
|
||||
left,
|
||||
right,
|
||||
|
||||
// Common controls.
|
||||
enter,
|
||||
space,
|
||||
escape,
|
||||
tab,
|
||||
backspace,
|
||||
|
||||
left_shift,
|
||||
right_shift,
|
||||
left_ctrl,
|
||||
right_ctrl,
|
||||
left_alt,
|
||||
right_alt,
|
||||
|
||||
// Function keys.
|
||||
f1,
|
||||
f2,
|
||||
f3,
|
||||
f4,
|
||||
f5,
|
||||
f6,
|
||||
f7,
|
||||
f8,
|
||||
f9,
|
||||
f10,
|
||||
f11,
|
||||
f12,
|
||||
};
|
||||
|
||||
pub const KeyEvent = struct {
|
||||
key: Key,
|
||||
|
||||
/// True when generated by keyboard autorepeat.
|
||||
repeat: bool = false,
|
||||
};
|
||||
|
||||
pub const GamepadButtonEvent = struct {
|
||||
gamepad: u8,
|
||||
button: u8,
|
||||
};
|
||||
|
||||
/// Normalized signed range:
|
||||
///
|
||||
/// -32768 = minimum
|
||||
/// 32767 = maximum
|
||||
pub const GamepadAxisEvent = struct {
|
||||
gamepad: u8,
|
||||
axis: u8,
|
||||
value: i16,
|
||||
};
|
||||
|
||||
pub const PointerEvent = struct {
|
||||
pointer: u8 = 0,
|
||||
|
||||
active: bool,
|
||||
|
||||
/// Normalized coordinates.
|
||||
///
|
||||
/// 0 = minimum
|
||||
/// 65535 = maximum
|
||||
x: u16,
|
||||
y: u16,
|
||||
|
||||
pressure: u16 = 0,
|
||||
};
|
||||
|
||||
pub const Event = union(enum) {
|
||||
quit,
|
||||
|
||||
key_down: KeyEvent,
|
||||
key_up: KeyEvent,
|
||||
|
||||
gamepad_button_down: GamepadButtonEvent,
|
||||
gamepad_button_up: GamepadButtonEvent,
|
||||
|
||||
gamepad_axis: GamepadAxisEvent,
|
||||
|
||||
pointer: PointerEvent,
|
||||
};
|
||||
|
||||
/// Useful for tests or non-interactive execution.
|
||||
///
|
||||
/// Video/audio handling deliberately does not live here.
|
||||
pub const Headless = struct {
|
||||
pub fn init() Headless {
|
||||
return .{};
|
||||
}
|
||||
|
||||
pub fn pollEvent(_: *Headless) ?Event {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
test "platform: headless has no events" {
|
||||
var platform_driver = Headless.init();
|
||||
|
||||
try std.testing.expectEqual(
|
||||
@as(?Event, null),
|
||||
platform_driver.pollEvent(),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user