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