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

/// Exposes a privileged magnifier API for camera control, typically on a
/// `fuchsia.ui.policy.Presentation`.
closed protocol MagnificationHandler {
    /// Sets clip-space x-offset, y-offset, and scale for the presentation.
    /// x and y are in Vulkan NDC and are applied after scaling, which occurs
    /// about the center of the presentation. The callback indicates when the
    /// update has been presented. The identity transform (0, 0, 1) is the
    /// natural state.
    strict SetClipSpaceTransform(struct {
        x float32;
        y float32;
        scale float32;
    }) -> ();
};

@discoverable
closed protocol Magnifier {
    /// Registers the camera control to be used for applying magnification. If
    /// a previous handler had been registered, that handler is dropped.
    strict RegisterHandler(resource struct {
        handler client_end:MagnificationHandler;
    });
};
