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