|  | // Copyright 2020 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. | 
|  |  | 
|  | library fuchsia.ui.input3; | 
|  |  | 
|  | using fuchsia.input; | 
|  | using zx; | 
|  |  | 
|  | /// Type of the keyboard key input event. | 
|  | enum KeyEventType { | 
|  | /// Key is pressed down. | 
|  | PRESSED = 1; | 
|  |  | 
|  | /// Key is released. | 
|  | RELEASED = 2; | 
|  |  | 
|  | /// Key was pressed while the client wasn't able to receive it, e.g new device connected | 
|  | /// with a key held down or before system was started. | 
|  | /// Client should not handle this as a key press. | 
|  | SYNC = 3; | 
|  |  | 
|  | /// Key was released while the client wasn't able to receive it, e.g device was disconnected | 
|  | /// or focus lost. | 
|  | /// Client should not handle this as a key release. | 
|  | CANCEL = 4; | 
|  | }; | 
|  |  | 
|  | /// Keyboard event is generated to reflect key input. | 
|  | table KeyEvent { | 
|  | /// Time in nanoseconds when the event was recorded, in the `CLOCK_MONOTONIC` time base. | 
|  | 1: zx.time timestamp; | 
|  |  | 
|  | /// Type of event. | 
|  | 2: KeyEventType type; | 
|  |  | 
|  | /// Identifies the key ignoring modifiers, layout, prior key events, etc. | 
|  | 3: fuchsia.input.Key key; | 
|  |  | 
|  | /// Modifiers in effect at the time of the event. | 
|  | /// Example: | 
|  | ///  CapsLock is off, user presses CapsLock, then A, then releases both. | 
|  | ///  Event sequence is as follows: | 
|  | ///  1. type: Pressed, key: CapsLock, modifiers: None | 
|  | ///  2. type: Pressed, key: A, modifiers: CapsLock | 
|  | ///  3. type: Released, key: CapsLock, modifiers: CapsLock | 
|  | ///  4. type: Released, key: A, modifiers: CapsLock | 
|  | /// | 
|  | ///  CapsLock is on, user presses CapsLock, then A, then releases both. | 
|  | ///  1. type: Pressed, key: CapsLock, modifiers: CapsLock | 
|  | ///  2. type: Pressed, key: A, modifiers: None | 
|  | ///  3. type: Released, key: CapsLock, modifiers: None | 
|  | ///  4. type: Released, key: A, modifiers: None | 
|  | 4: Modifiers modifiers; | 
|  | }; |