// 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.views;

/// Deprecated API for view creation. DO NOT USE.
@deprecated
@discoverable
closed protocol View {

    /// Provides the View with an attachment point to Scenic's scene graph.
    ///
    /// When `Present()` is called the View's implementation should create a
    /// View resource within Scenic by providing it with the `view_token` (using
    /// a `fuchsia.ui.gfx.CreateResourceCmd` and `fuchsia.ui.gfx.ViewArgs`).
    ///
    /// Then the implementation should attach its graphical content to the
    /// newly-created View resource using a `fuchsia.ui.gfx.AddChildCmd`.
    ///
    /// If the implementation already owns a View resource (because `Present()`
    /// had already been called before), then it should terminate the connection
    /// with an error.
    ///
    /// TODO(https://fxbug.dev/42098670): Allow re-parenting `View`s with a new `Present()` call.
    strict Present(resource struct {
        view_token ViewToken;
    });
};
