blob: 9d017babc51a3787621a6333d6f33ed0a4f68ef6 [file] [log] [blame]
// Copyright 2021 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.session.scene;
using fuchsia.ui.app;
using fuchsia.ui.views;
/// The possible errors from the `PresentRootView` family of requests.
type PresentRootViewError = flexible enum {
/// An error occurred while processing the request.
INTERNAL_ERROR = 1;
};
/// A protocol used to manage the scene graph of the session.
///
/// This protocol is exposed by the `scene_manager` component. The `scene_manager`
/// component configures and constructs a scene graph in Scenic. A product may
/// use the `scene_manager` to reduce Scenic-related configuration code in their session.
@discoverable
closed protocol Manager {
/// Sets the root view of the scene graph to the view provided by `view_provider`.
///
/// Subsequent calls will replace the view tree with the one starting at the new root view.
/// The root view is shared between all clients of `Manager`.
///
/// Returns a `fuchsia.ui.views.ViewRef` referencing the view provided by `view_provider`.
/// If this ViewRef cannot be returned (e.g. in Flatland case, if the ViewCreationToken is
/// dropped before it is given to Scenic), then the connection to the `Manager` will be closed.
///
/// The client can expect that:
///
/// (1) Its root view will be focused once it's connected to the scene.
/// (2) The logical size and position of its root view match the display.
///
/// TODO(https://fxbug.dev/42055565): Fix this situation.
/// NOTE: the ViewRef is only returned after the child view is connected to the scene graph.
/// Therefore, the caller must guarantee that the child view will eventually be connected before
/// waiting for the ViewRef; if the child view doesn't connect, it is possible to deadlock.
@deprecated("Use PresentRootView.")
strict SetRootView(resource struct {
view_provider client_end:fuchsia.ui.app.ViewProvider;
}) -> (resource struct {
view_ref fuchsia.ui.views.ViewRef;
}) error PresentRootViewError;
/// Presents a view tree to the display, via the provided view holder token.
///
/// This call will present the view using the legacy GFX API.
///
/// Subsequent calls will replace the view tree with the one starting at the new root viewport.
/// The root view is shared between all clients of `Manager`.
///
/// The client can expect that:
///
/// (1) Its root view will be focused once it's connected to the scene.
/// (2) The logical size and position of its root view match the display.
///
/// TODO(https://fxbug.dev/42055565): Fix this situation.
/// NOTE: this method returns only after the child view is connected to the scene graph.
/// Therefore, the caller must guarantee that the child view will eventually be connected before
/// waiting for the return; if the child view doesn't connect, it is possible to deadlock.
@deprecated("Use PresentRootView unless running GFX.")
strict PresentRootViewLegacy(resource struct {
view_holder_token fuchsia.ui.views.ViewHolderToken;
view_ref fuchsia.ui.views.ViewRef;
}) -> () error PresentRootViewError;
/// Presents a view tree to the display, via the provided viewport token.
///
/// Subsequent calls will replace the view tree with the one starting at the new root viewport.
/// The root view is shared between all clients of `Manager`.
///
/// The client can expect that:
///
/// (1) Its root view will be focused once it's connected to the scene.
/// (2) The logical size and position of its root view match the display.
///
/// TODO(https://fxbug.dev/42055565): Fix this situation.
/// NOTE: this method returns only after the child view is connected to the scene graph.
/// Therefore, the caller must guarantee that the child view will eventually be connected before
/// waiting for the return; if the child view doesn't connect, it is possible to deadlock.
strict PresentRootView(resource struct {
viewport_creation_token fuchsia.ui.views.ViewportCreationToken;
}) -> () error PresentRootViewError;
};