blob: e310fa5a644ba3eb0ff660f1295bc98c9f426456 [file] [log] [blame]
// 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;
struct vec2 {
float32 x;
float32 y;
};
struct vec3 {
float32 x;
float32 y;
float32 z;
};
struct vec4 {
float32 x;
float32 y;
float32 z;
float32 w;
};
struct mat4 {
// Column major order.
array<float32>:16 matrix;
};
// TODO(MZ-238): use float32s instead of uint8.
struct ColorRgba {
uint8 red;
uint8 green;
uint8 blue;
uint8 alpha;
};
struct ColorRgb {
float32 red;
float32 green;
float32 blue;
};
struct Quaternion {
float32 x;
float32 y;
float32 z;
float32 w;
};
// Oriented plane described by a normal vector and a distance
// from the origin along that vector.
struct Plane3 {
vec3 dir;
float32 dist;
};
struct FactoredTransform {
vec3 translation;
vec3 scale;
// Point around which rotation and scaling occur.
vec3 anchor;
Quaternion rotation;
};
union Value {
float32 vector1;
vec2 vector2;
vec3 vector3;
vec4 vector4;
mat4 matrix4x4;
ColorRgba color_rgba;
ColorRgb color_rgb;
// Degrees of counter-clockwise rotation in the XY plane.
float32 degrees;
Quaternion quaternion;
FactoredTransform transform;
// ID of a value-producing resource (an animation or an expression).
// The type of this value matches the type produced by the named resource.
uint32 variable_id;
};
// A value that is specified explicitly by |value| if |variable_id| is zero,
// or is the value produced by the resource identified by |variable_id|, e.g.
// an animation or expression. In the latter case, the value produced by the
// resource must be a float32, and |value| is ignored.
struct FloatValue {
float32 value;
uint32 variable_id;
};
// A value that is specified explicitly by |value| if |variable_id| is zero,
// or is the value produced by the resource identified by |variable_id|, e.g.
// an animation or expression. In the latter case, the value produced by the
// resource must be a vec2, and |value| is ignored.
struct Vector2Value {
vec2 value;
uint32 variable_id;
};
// A value that is specified explicitly by |value| if |variable_id| is zero,
// or is the value produced by the resource identified by |variable_id|, e.g.
// an animation or expression. In the latter case, the value produced by the
// resource must be a vec3, and |value| is ignored.
struct Vector3Value {
vec3 value;
uint32 variable_id;
};
// A value that is specified explicitly by |value| if |variable_id| is zero,
// or is the value produced by the resource identified by |variable_id|, e.g.
// an animation or expression. In the latter case, the value produced by the
// resource must be a vec4, and |value| is ignored.
struct Vector4Value {
vec4 value;
uint32 variable_id;
};
// A value that is specified explicitly by |value| if |variable_id| is zero,
// or is the value produced by the resource identified by |variable_id|, e.g.
// an animation or expression. In the latter case, the value produced by the
// resource must be a vec4, and |value| is ignored.
struct Matrix4Value {
mat4 value;
uint32 variable_id;
};
// A value that is specified explicitly by |value| if |variable_id| is zero,
// or is the value produced by the resource identified by |variable_id|, e.g.
// an animation or expression. In the latter case, the value produced by the
// resource must be a ColorRgb, and |value| is ignored.
struct ColorRgbValue {
ColorRgb value;
uint32 variable_id;
};
// A value that is specified explicitly by |value| if |variable_id| is zero,
// or is the value produced by the resource identified by |variable_id|, e.g.
// an animation or expression. In the latter case, the value produced by the
// resource must be a ColorRgba, and |value| is ignored.
struct ColorRgbaValue {
ColorRgba value;
uint32 variable_id;
};
// A value that is specified explicitly by |value| if |variable_id| is zero,
// or is the value produced by the resource identified by |variable_id|, e.g.
// an animation or expression. In the latter case, the value produced by the
// resource must be a Quaternion, and |value| is ignored.
struct QuaternionValue {
Quaternion value;
uint32 variable_id;
};
enum ValueType {
kNone = 0;
kVector1 = 1;
kVector2 = 2;
kVector3 = 3;
kVector4 = 4;
kMatrix4 = 5;
kColorRgb = 6;
kColorRgba = 7;
kQuaternion = 8;
kFactoredTransform = 9;
};
// Describes how nodes interact with hit testings.
enum HitTestBehavior {
// Apply hit testing to the node's content, its parts, and its children.
kDefault = 0;
// Suppress hit testing of the node and everything it contains.
kSuppress = 1;
};
// Rendering target metrics associated with a node.
// See also |MetricsEvent|.
struct Metrics {
// The ratio between the size of one logical pixel within the node's local
// coordinate system and the size of one physical pixel of the rendering
// target.
//
// This scale factors change in relation to the resolution of the rendering
// target and the scale transformations applied by containing nodes.
// They are always strictly positive and non-zero.
//
// For example, suppose the rendering target is a high resolution display
// with a device pixel ratio of 2.0 meaning that each logical pixel
// within the model corresponds to two physical pixels of the display.
// Assuming no scale transformations affect the node, then its metrics event
// will report a scale factor of 2.0.
//
// Building on this example, if instead the node's parent applies a
// scale transformation of 0.25 to the node, then the node's metrics event
// will report a scale factor of 0.5 indicating that the node should render
// its content at a reduced resolution and level of detail since a smaller
// area of physical pixels (half the size in each dimension) will be rendered.
float32 scale_x;
float32 scale_y;
float32 scale_z;
};
// Represents an axis-aligned bounding box. If any of the dimensions has a
// negative extent (e.g. max.x < min.x) then the bounding box is treated as
// empty.
struct BoundingBox {
vec3 min;
vec3 max;
};
// Represents the properties for a View.
struct ViewProperties {
// The View's bounding box extents can be defined as:
// { bounding_box.min - inset_from_min, bounding_box.max + inset_from_max }
// Content contained within the View is clipped to this bounding box.
//
// TODO(SCN-819): should we just have a vec3 extent instead of a bounding box
// with a potentially non-zero min?
BoundingBox bounding_box;
// |insets_from_min| and |insets_from_max| specify the distances between the
// view's bounding box and that of its parent.
vec3 inset_from_min;
vec3 inset_from_max;
// Whether the View can receive a focus event; default is true. When
// false, and this View is eligible to receive a focus event, no
// focus/unfocus event is actually sent to any View.
bool focus_change = true;
// Whether the View allows geometrically underlying Views to receive input;
// default is true. When false, Scenic does not send input events to
// underlying Views.
bool downward_input = true;
};
// Represents the state of a View in Scenic.
struct ViewState {
// Whether the View is rendering. Default is false. Delivered to the View's
// corresponding ViewHolder after the View's first frame render request.
bool is_rendering;
};