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