// Copyright 2017 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.gfx;

// The shapes defined in this file can be used to define the rendered shape of
// an `ObjectNode`, and to define the clip region of a `ClipNode`.

/// Rectangle centered at (0,0).
struct RectangleArgs {
    Value width; // float32
    Value height; // float32
};

/// RoundedRectangle centered at (0,0).  Legal parameter values must satisfy the
/// constraint that the flat sides of the rectangle have non-negative length.
/// In other words, the following constraints must hold:
///   - top_left_radius + top_right_radius <= width
///   - bottom_left_radius + bottom_right_radius <= width
///   - top_left_radius + bottom_left_radius <= height
///   - top_right_radius + bottom_right_radius <= height
struct RoundedRectangleArgs {
    Value width; // float32
    Value height; // float32
    Value top_left_radius; // float32
    Value top_right_radius; // float32
    Value bottom_right_radius; // float32
    Value bottom_left_radius; // float32
};

struct CircleArgs {
    Value radius; // float32
};

/// A Mesh cannot be rendered until it has been bound to vertex/index buffers;
/// see BindMeshBuffersCmd.
struct MeshArgs {
};
