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

// These are the types of nodes that can be created within a Mozart |Session|.
//
// All nodes have an associated transform, which distinguishes them from mere
// resources.  Nodes may also have one or more node Characteristics:
//
// These are characteristics that each type of |Node| either has or doesn't.
// These constrain operations that reference nodes; violations will cause the
// |Session| connection to be closed.  For example, |NodeAddChildOp| must target
// a node with the "has_children" characteristic.  These characteristics are not
// explicitly reflected in the Session API; instead, they must be enforced by
// implementations of the API.
// - has_children: The node can contain other nodes as children.
// - has_parent: The node can be a child of another node.  If this is false,
//   the node can only be a direct descendant of its containing scene.
// - has_parts:  The node can contain other nodes as parts.  All parts must be
//   from the same session as their parent.
// - has_clip:  The node can contain a clip node as a child.
// - is_clip:  The node can clip other nodes.
// - has_shape: The node can contain ShapeNodes as children.
// - has_material:  The node can have a Material resource applied to it.

// Characteristics:
// - has_parent
// - has_shape
// - has_material
struct ShapeNodeArgs {
  // TODO(SCN-694): Clean up dummy args.
  uint32 unused = 0;
};

// Characteristics:
// - has_parent
// - is_clip
// - has_parts
struct ClipNodeArgs {
  // TODO(SCN-694): Clean up dummy args.
  uint32 unused = 0;
};

// Characteristics:
// - has_transform
// - has_parent
// - has_children
// - has_parts
// - has_opacity
struct OpacityNodeArgs {
    uint32 unused = 0;
};

// Characteristics:
// - has_transform
// - has_children
// - has_parent
// - has_parts
// - has_clip
struct EntityNodeArgs {
  // TODO(SCN-694): Clean up dummy args.
  uint32 unused = 0;
};