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

}; |