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