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

struct Point {
    int32 x;
    int32 y;
};

struct PointF {
    float32 x;
    float32 y;
};

struct Point3F {
    float32 x;
    float32 y;
    float32 z;
};

struct Size {
    int32 width;
    int32 height;
};

struct SizeF {
    float32 width;
    float32 height;
};

struct Rect {
    int32 x;
    int32 y;
    int32 width;
    int32 height;
};

struct RectF {
    float32 x;
    float32 y;
    float32 width;
    float32 height;
};

struct RRectF {
    float32 x;
    float32 y;
    float32 width;
    float32 height;
    float32 top_left_radius_x;
    float32 top_left_radius_y;
    float32 top_right_radius_x;
    float32 top_right_radius_y;
    float32 bottom_left_radius_x;
    float32 bottom_left_radius_y;
    float32 bottom_right_radius_x;
    float32 bottom_right_radius_y;
};

struct Transform {
    // Row major order.
    array<float32>:16 matrix;
};

struct Inset {
    int32 top;
    int32 right;
    int32 bottom;
    int32 left;
};

struct InsetF {
    float32 top;
    float32 right;
    float32 bottom;
    float32 left;
};
