blob: b55d5c30b00307c43ac8712a05e29d9b3c2d113d [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.annotation;
using fuchsia.ui.views;
/// Annotation allows a privileged client service to create an "annotation"
/// |ViewHolder|, linked with an annotation |View| drawn within the View-space
/// of the existing client |View|.
[Discoverable]
protocol Registry {
/// Creates a new annotation |ViewHolder|. The created ViewHolder holds an
/// annotation |View| which renders within the existing client's View-space
/// without that client's knowledge.
///
/// The client should create a |ViewToken| / |ViewHolderToken| pair, pass
/// the |ViewHolderToken| as an argument to this function to create the
/// annotation |ViewHolder|, and create an annotation |View| in its own
/// |Session| using the corresponding |ViewToken|.
///
/// The annotation |View| has the following properties:
/// + It is a descendent of |client_view|'s ViewNode in the scene graph
/// but it's not visible by the Session of |client_view|.
/// + It does not receive or intercept any hit event.
/// + It always has the same rendering state as |client_view| and always
/// match the size and metrics.
///
/// When |client_view|'s Session receives the following Events, all its
/// annotation |View|s' Sessions will receive the corresponding Events of
/// the annotation |View|s:
/// + ViewAttachedToSceneEvent
/// + ViewDetachedFromSceneEvent
/// + ViewPropertiesChangedEvent
/// + ViewStateChangedEvent
///
/// Since creating a ViewHolder modifies the SceneGraph, this function won't
/// take effect until we schedule a new frame by calling Present() on any
/// Session.
///
/// EPITAPH
///
/// There are a few erroneous conditions where the annotation |ViewHolder|
/// will not be created and the the FIDL binding will be disconnected.
/// Clients should remove the annotation |View| and |Session| they create.
///
/// It may return the following epitaphs:
///
/// - ZX_ERR_INVALID_ARGS, if the provided |ViewRef| is invalid.
/// - ZX_ERR_PEER_CLOSED, if Scenic fails creating the annotation |ViewHolder|.
///
CreateAnnotationViewHolder(fuchsia.ui.views.ViewRef client_view,
fuchsia.ui.views.ViewHolderToken view_holder_token) -> ();
};