blob: c398fcae45bd96c7915a6b917e59f463e746ca81 [file] [log] [blame]
// Copyright 2016 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.math;
/// An integer position in a 2D cartesian space.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
struct Point {
/// The number of units along the x-axis.
int32 x;
/// The number of units along the y-axis.
int32 y;
};
/// A floating point position in a 2D cartesian space.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
struct PointF {
/// The number of units along the x-axis.
float32 x;
/// The number of units along the y-axis.
float32 y;
};
/// A floating point position in a 3D cartesian space.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
struct Point3F {
/// The number of units along the x-axis.
float32 x;
/// The number of units along the y-axis.
float32 y;
/// The number of units along the z-axis.
float32 z;
};
/// The integer dimensions of a rectangular region in a 2D cartesian space.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
///
/// This type allows for negative dimensions, to which protocols can give
/// semantics. Protocols that use this type should specify whether negative
/// dimensions are meaningful, and, if they are meaningful, what they mean.
struct Size {
/// The distance along the x-axis.
int32 width;
/// The distance along the y-axis.
int32 height;
};
/// The floating point dimensions of a rectangular region in a 2D cartesian
/// space.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
///
/// This type allows for negative dimensions, to which protocols can give
/// semantics. Protocols that use this type should specify whether negative
/// dimensions are meaningful, and, if they are meaningful, what they mean.
struct SizeF {
/// The distance along the x-axis.
float32 width;
/// The distance along the y-axis.
float32 height;
};
/// An integral, rectangular, axis-aligned region in a 2D cartesian
/// space.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
struct Rect {
/// The location of the origin of the rectangle in the x-axis.
int32 x;
/// The location of the origin of the rectangle in the y-axis.
int32 y;
/// The distance along the x-axis.
///
/// If `width` is positive, the region includes x values starting at `x` and
/// increasing along the x-axis. If `width` is negative, the region includes
/// x values starting at `x` and decreasing along the x-axis.
int32 width;
/// The distance along the y-axis.
///
/// If `height` is positive, the region includes y values starting at `y`
/// and increasing along the y-axis. If `height` is negative, the region
/// includes y values starting at `y` and decreasing along the y-axis.
int32 height;
};
/// A floating point, rectangular, axis-aligned region in a 2D cartesian
/// space.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
struct RectF {
/// The location of the origin of the rectangle in the x-axis.
float32 x;
/// The location of the origin of the rectangle in the y-axis.
float32 y;
/// The distance along the x-axis.
///
/// If `width` is positive, the region includes x values starting at `x` and
/// increasing along the x-axis. If `width` is negative, the region includes
/// x values starting at `x` and decreasing along the x-axis.
float32 width;
/// The distance along the y-axis.
///
/// If `height` is positive, the region includes y values starting at `y`
/// and increasing along the y-axis. If `height` is negative, the region
/// includes y values starting at `y` and decreasing along the y-axis.
float32 height;
};
/// A floating point rounded rectangle with the custom radii for all four
/// corners.
///
/// A region in a 2D cartesian space consisting of linear, axis-aligned sides
/// with corners rounded into a quarter ellipse.
///
/// If the quarter ellipses in two corners would overlap, their radii are
/// clamped such that the ellipses meet with an axis-aligned tangent.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
struct RRectF {
/// The location of the origin of the region in the x-axis.
float32 x;
/// The location of the origin of the region in the y-axis.
float32 y;
/// The distance along the x-axis.
///
/// If `width` is positive, the region includes x values starting at `x` and
/// increasing along the x-axis. If `width` is negative, the region includes
/// x values starting at `x` and decreasing along the x-axis.
float32 width;
/// The distance along the y-axis.
///
/// If `height` is positive, the region includes y values starting at `y`
/// and increasing along the y-axis. If `height` is negative, the region
/// includes y values starting at `y` and decreasing along the y-axis.
float32 height;
/// The radius of the quarter ellipse in the top-left corner along the
/// x-axis.
///
/// Must not be negative.
float32 top_left_radius_x;
/// The radius of the quarter ellipse in the top-left corner along the
/// y-axis.
///
/// Must not be negative.
float32 top_left_radius_y;
/// The radius of the quarter ellipse in the top-right corner along the
/// x-axis.
///
/// Must not be negative.
float32 top_right_radius_x;
/// The radius of the quarter ellipse in the top-right corner along the
/// y-axis.
///
/// Must not be negative.
float32 top_right_radius_y;
/// The radius of the quarter ellipse in the bottom-left corner along the
/// x-axis.
///
/// Must not be negative.
float32 bottom_left_radius_x;
/// The radius of the quarter ellipse in the bottom-left corner along the
/// y-axis.
///
/// Must not be negative.
float32 bottom_left_radius_y;
/// The radius of the quarter ellipse in the bottom-right corner along the
/// x-axis.
///
/// Must not be negative.
float32 bottom_right_radius_x;
/// The radius of the quarter ellipse in the bottom-right corner along the
/// y-axis.
///
/// Must not be negative.
float32 bottom_right_radius_y;
};
/// A projective transformation of a 3D cartesian space.
///
/// A transform consists of a 4x4 matrix that operates in homogeneous
/// coordinates. For example, a point located at (x, y, z) in the cartesian
/// space is transformed by `M` to a point located at (x'/w', y'/w', z'/w'),
/// where `(x', y', z', w') = M (x, y, z, 1)`.
struct Transform {
/// The entries in the transformation matrix in row major order.
///
/// Specifically, if the matrix is as follows:
///
/// ```
/// a b c d
/// e f g h
/// i j k l
/// m n o p
/// ```
///
/// then the entries in this array are
/// `(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)`.
array<float32>:16 matrix;
};
/// An integer offset to apply to each edge of a rectangle.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
struct Inset {
/// The amount to move the top edge of the rectangle towards the center of
/// the rectangle.
int32 top;
/// The amount to move the right edge of the rectangle towards the center of
/// the rectangle.
int32 right;
/// The amount to move the bottom edge of the rectangle towards the center
/// of the rectangle.
int32 bottom;
/// The amount to move the left edge of the rectangle towards the center of
/// the rectangle.
int32 left;
};
/// A floating point offset to apply to each edge of a rectangle.
///
/// This type does not specify units. Protocols that use this type should
/// specify the characteristics of the vector space, including orientation and
/// units.
struct InsetF {
/// The amount to move the top edge of the rectangle towards the center of
/// the rectangle.
float32 top;
/// The amount to move the right edge of the rectangle towards the center of
/// the rectangle.
float32 right;
/// The amount to move the bottom edge of the rectangle towards the center
/// of the rectangle.
float32 bottom;
/// The amount to move the left edge of the rectangle towards the center of
/// the rectangle.
float32 left;
};