// 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.ui.pointerinjector.configuration;

using fuchsia.ui.pointerinjector;
using fuchsia.ui.views;

/// A service used by an input pipeline to set up pointer injection into Scenic.
/// This should be implemented by the component that configures the scene
/// (Root Presenter or Scene Manager).
@discoverable
closed protocol Setup {
    /// Returns the viewrefs for injection authority (`Config.context`) and injection
    /// destination (`Config.target`).
    ///
    /// This only returns when valid context and target views exist.
    /// Typically called just once.
    strict GetViewRefs() -> (resource struct {
        context fuchsia.ui.views.ViewRef;
        target fuchsia.ui.views.ViewRef;
    });

    /// Returns the current viewport. Follows the hanging get pattern.
    ///
    /// The first call to this function will return the current viewport, whenever
    /// one exists. Subsequent calls will block until the viewport has been updated.
    ///
    /// Flow control: There should only be one outstanding call to this function.
    /// The channel will be closed if an additional call to this function is made
    /// while a call is outstanding.
    strict WatchViewport() -> (struct {
        viewport fuchsia.ui.pointerinjector.Viewport;
    });
};
