blob: 8826bfa40554b8820b19cfa50b4b4a36ed068fb5 [file] [log] [blame]
// Copyright 2019 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.input.accessibility;
using fuchsia.math;
using fuchsia.ui.input;
using zx;
/// Possible ways an accessibility listener can process pointer events.
type EventHandling = strict enum {
/// The listener consumes all the pointer events for (device_id, pointer_id)
/// until the next UP event.
CONSUMED = 1;
/// The listener rejects the remaining pointer events for (device_id,
/// pointer_id), and observed (past) and expected (future) pointer events
/// until the next UP event are to be sent for regular input dispatch.
REJECTED = 2;
};
/// A PointerEvent is a privileged pointer event that has local view and global
/// screen coordinates as well as some metadata about the event type.
type PointerEvent = table {
/// 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.
1: event_time uint64;
/// ID of the device that captured this event.
2: device_id uint32;
/// ID of the pointer that identifies this event.
3: pointer_id uint32;
/// Type of this event, e.g. touch, mouse, etc.
@deprecated("Use fuchsia.ui.pointer.augment.LocalHit")
4: type fuchsia.ui.input.PointerEventType;
/// Phase of this event, e.g. add, down, etc.
@deprecated("Use fuchsia.ui.pointer.augment.LocalHit")
5: phase fuchsia.ui.input.PointerEventPhase;
/// The coordinate of this pointer event in normalized device coordinates.
/// Normalized device coordinates have dimensions in the range [-1, 1],
/// with (0, 0) being the center of the device and axes aligned with the
/// native display.
6: ndc_point fuchsia.math.PointF;
/// The viewref koid of the top most view hit for this pointer event.
/// This field is set to `ZX_KOID_INVALID` when there is no view hit and
/// `local_point` is undefined.
7: viewref_koid zx.Koid;
/// The point of this pointer event in local view coordinates.
8: local_point fuchsia.math.PointF;
};
/// PointerEventRegistration allows an accessibility service to register a
/// pointer event listener, so that it can intercept pointer events before they
/// reach clients.
@discoverable
closed protocol PointerEventRegistry {
/// Registers a listener to start receiving incoming pointer events. For
/// now, only one listener is allowed and the first to register is honored.
strict Register(resource struct {
pointer_event_listener client_end:PointerEventListener;
}) -> (struct {
success bool;
});
};
/// A PointerEventListener receives pointer events and decides to consume them
/// or not.
/// TODO(https://fxbug.dev/42111956): Investigate flow control mechanisms for a11y input events.
closed protocol PointerEventListener {
/// Sends a PointerEvent to an accessibility service. An event is returned
/// at any time to indicate whether the pointer event stream was consumed /
/// rejected for a particular stream of pointer events related to a
/// `device_id` and a `pointer_id`. A stream is a sequence of pointer events
/// starting with an event with phase DOWN, followed by any number of MOVE,
/// ending in an UP phase event. The event can arrive while the stream is in
/// progress or when it has already finished. The resulting
/// behavior depends on how it was handled, please see EventHandling above.
strict OnEvent(struct {
pointer_event PointerEvent;
});
strict -> OnStreamHandled(struct {
device_id uint32;
pointer_id uint32;
handled EventHandling;
});
};