| // 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; |
| }; |