blob: b04e1fff1a77f9ba075570c24e93facd3f5b92e0 [file] [log] [blame]
// Copyright 2014 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
deprecated_syntax;
library fuchsia.ui.input;
enum KeyboardEventPhase {
/// When key is pressed down.
PRESSED = 0;
/// When key is released.
RELEASED = 1;
/// This key `PRESSED` is not directed to this input client anymore.
CANCELLED = 2;
/// Whether this is an automatically generated key repeat
REPEAT = 3;
};
/// `KeyboardEvent` represents event generated by a user's interaction with a
/// keyboard.
///
/// Those events are triggered by distinct pressed state changes of the keys.
///
/// The state transitions should be as follows:
/// PRESSED -> (REPEAT ->) RELEASED
/// or
/// PRESSED -> (REPEAT ->) CANCELLED
///
/// The input system will repeat those events automatically when a code_point is
/// available.
///
/// DEPRECATED: Will be removed in favor of `fuchsia.ui.input.KeyEvent`.
struct KeyboardEvent {
/// Time the event was delivered. The time is in nanoseconds and corresponds
/// to the monotonic time as determined by the zx_clock_get_monotonic syscall.
uint64 event_time;
uint32 device_id;
KeyboardEventPhase phase;
/// Keyboard HID Usage
/// See https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
uint32 hid_usage;
/// The unicode code point represented by this key event, if any.
/// Dead keys are represented as Unicode combining characters.
///
/// If there is no unicode code point, this value is zero.
uint32 code_point;
/// Key modifiers as defined by the different kModifier constants such as
/// `kModifierCapsLock` currently pressed
uint32 modifiers;
};
enum PointerEventType {
/// A touch-based pointer device.
TOUCH = 0;
/// A pointer device with a stylus.
STYLUS = 1;
/// A pointer device with a stylus that has been inverted.
INVERTED_STYLUS = 2;
/// A pointer device without a stylus.
MOUSE = 3;
};
enum PointerEventPhase {
/// The device has started tracking the pointer.
///
/// For example, the pointer might be hovering above the device, having not yet
/// made contact with the surface of the device.
ADD = 0;
/// The pointer has moved with respect to the device while not in contact with
/// the device.
HOVER = 1;
/// The pointer has made contact with the device.
///
/// For `MOUSE` devices, this is triggered when the primary button is pressed
/// down to emulate a touch on the screen.
DOWN = 2;
/// The pointer has moved with respect to the device while in contact with the
/// device.
MOVE = 3;
/// The pointer has stopped making contact with the device.
///
/// For `MOUSE` devices, this is triggered when the primary button is
/// released.
UP = 4;
/// The device is no longer tracking the pointer.
///
/// For example, the pointer might have drifted out of the device's hover
/// detection range or might have been disconnected from the system entirely.
REMOVE = 5;
/// The input from the pointer is no longer directed towards this receiver.
CANCEL = 6;
// TODO: add phases to indicate button press / release
};
/// Pointers represent raw data about the user's interaction with the screen.
///
/// The state transitions should be as follows:
/// ADD (-> HOVER) -> DOWN -> MOVE -> UP (-> HOVER) -> REMOVE
///
/// At any point after the initial ADD, a transition to CANCEL is also possible.
struct PointerEvent {
/// Time the event was delivered. The time is in nanoseconds and corresponds
/// to the monotonic time as determined by the zx_clock_get_monotonic syscall.
uint64 event_time;
uint32 device_id;
uint32 pointer_id;
PointerEventType type;
PointerEventPhase phase;
/// `x` and `y` are in the coordinate system of the View.
float32 x;
float32 y;
// TODO(jpoichet) float32 vx;
// TODO(jpoichet) float32 vy;
float32 radius_major = 0.0; // DO NOT USE
float32 radius_minor = 0.0; // DO NOT USE
// TODO(jpoichet) float32 orientation;
// TODO(jpoichet) float32 tilt;
// TODO(jpoichet) float32 altitude;
// TODO(jpichet) float32 amplitude;
/// Currently pressed buttons as defined the kButton constants such as
/// `kMousePrimaryButton`
uint32 buttons;
};
struct FocusEvent {
/// Time the event was delivered. The time is in nanoseconds and corresponds
/// to the monotonic time as determined by the zx_clock_get_monotonic syscall.
uint64 event_time;
/// Whether the view has gained input focused or not.
bool focused;
};
table MediaButtonsEvent {
1: int8 volume;
2: bool mic_mute;
3: bool pause;
4: bool camera_disable;
};
/// This union does not include MediaButtonsEvent because it's processed differently.
union InputEvent {
1: PointerEvent pointer;
2: KeyboardEvent keyboard;
3: FocusEvent focus;
};