// Copyright 2020 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.pointer;

/// A floating-point 3x3 matrix.
/// - The values are placed in column-major order.
alias Mat3 = array<float32>:9;

/// A floating-point two-dimensional point.
/// - The values are placed in (x, y) order.
alias Point2 = array<float32>:2;

/// An axis-aligned rectangle. It is defined by its minimal and maximal extents
/// in a coordinate system.
struct Rectangle {
    /// The minimal extent of this rectangle, inclusive.
    /// - Its coordinates are pairwise less than the maximal extent's
    ///   coordinates.
    Point2 min;

    /// The maximal extent of this rectangle, inclusive.
    /// - Its coordinates are pairwise greater than the minimal extent's
    ///   coordinates.
    Point2 max;
};

/// The parameters of the associated view and viewport, sufficient to correctly
/// interpret the position and scale of pointer events dispatched to this view.
///
/// Ordering. These parameters arrive over the same channel as pointer events,
/// to provide synchronous context for interpreting the position of pointer
/// events in the view's local coordinate system.
///
/// Inter-protocol redundancy. Some of these parameters may also be sent over an
/// independent channel dedicated to view control; the client is responsible for
/// correct use of asynchronously received parameters.
struct ViewParameters {
    /// The view's area of content, placed in the coordinate system of the view.
    ///
    /// The rectangle is defined by the parent view's setup of clipping on this
    /// view.
    Rectangle view;

    /// The viewport's area of interaction, placed in an independent coordinate
    /// system.
    ///
    /// A pointer event's position is defined in the coordinate system of this
    /// viewport.
    ///
    /// A change in viewport extents means the region for pointer interaction
    /// has itself moved, or changed in size, or both.
    Rectangle viewport;

    /// The transform matrix that relates a point's position in the viewport's
    /// coordinate system to its position in the view's coordinate system.
    Mat3 viewport_to_view_transform;
};
