Skip to main content

motion_core/
lib.rs

1//! Backend-independent motion engine primitives.
2//!
3//! This package owns time, geometry, animation, colors and diagnostics without
4//! rendering devices, font engines, media codecs or window-system dependencies.
5//!
6//! ```
7//! use motion_core::{FrameRate, Time, TimeLiteral};
8//! let boundary = Time::from_frame(30_000, FrameRate::NTSC);
9//! assert_eq!(boundary, 1001.seconds());
10//! assert_eq!(boundary.to_frame(FrameRate::NTSC), 30_000);
11//! ```
12
13#![forbid(unsafe_code)]
14
15pub mod animation;
16pub mod asset;
17pub mod audio;
18pub mod authoring;
19pub mod budget;
20pub mod color;
21pub mod display_list;
22pub mod drawing;
23pub mod error;
24pub mod filter;
25pub mod geometry;
26pub mod grading;
27pub mod instances;
28pub mod key;
29pub mod math;
30pub mod noise;
31pub mod optics;
32pub mod path2d;
33pub mod pixels;
34pub mod random;
35pub mod shape;
36pub mod time;
37pub mod validation;
38
39pub use animation::{Animation, Constant, Easing, Interpolate, Keyframes, Spring, Tween};
40pub use animation::{
41    Extrapolate, FollowPath, Noise, Oscillator, PathSample, Waveform, piecewise, remap,
42};
43pub use asset::environment::FontEnvironment;
44pub use asset::environment::{FontIdentity, FontUsage};
45pub use asset::{
46    Asset, AssetStatus, Assets, Handle, LoadContext, RequestDiagnostics, ResourcePool, Source,
47};
48pub use audio::{
49    AudioBus, AudioChapter, AudioClip, AudioClipParameters, AudioEffect, AudioMetadata,
50    AudioSource, Duck, DuckTrigger, Ducking, Limiter, Loudness, Master, PanLaw,
51};
52pub use authoring::camera::camera;
53pub use authoring::camera::{Camera, DepthOfField, DepthPlane, try_camera};
54pub use authoring::context::{CacheLimits, CachePartition, RenderCache, SceneCache, SceneContext};
55pub use authoring::elevation::{Elevation, ShadowLayer};
56pub use authoring::sampling::{MotionBlur, ShutterCurve, ShutterSampling, sample_offsets};
57pub use authoring::scene::IntoSceneOutput;
58pub use authoring::scene::{SoundScene, scene, scene_with_sound};
59pub use authoring::skeleton::{Bone, BonePose, BoneTransform, Pose, Skeleton};
60pub use authoring::timeline::{
61    BoundaryAdjustment, BoundaryEdge, Clip, Timeline, Track, TrackBuilder,
62};
63pub use authoring::transition::Direction;
64pub use authoring::transition::{
65    CrossFade, Iris, IrisShape, Push, Slide, Transition, Wipe, ZoomBlur,
66};
67pub use authoring::{Alignment, Column, Layout, Node, NodeModifiers, Row, Scene, Side};
68pub use budget::RasterLimits;
69pub use color::Color;
70pub use color::math::{
71    linear_to_srgb, premultiply, rec709_luminance, srgb_to_linear, unpremultiply,
72};
73pub use display_list::{DisplayList, PixelSize, ValidatedDisplayList};
74pub use drawing::{
75    BlendMode, BlendSpace, Canvas, ClipMode, DrawCommand, DrawContext, Drawable, FillRule, LineCap,
76    LineJoin, MAX_STROKE_VERBS, MaskMode, Paint, PathClip, RectClip, RenderQuality, Shape,
77    ShapeClip, StrokeStyle, Styled,
78};
79pub use drawing::{
80    GradientExtend, GradientSpace, GradientUnits, ImagePattern, LinearGradient, RadialGradient,
81    SweepGradient,
82};
83pub use error::{BoxedError, Error, ErrorKind};
84pub use filter::{Filter, FilterOperation};
85pub use geometry::bounds::{Pivot, Rect, Size};
86pub use geometry::{AngleLiteral, Point, Transform, TransformComponents, Vector2};
87pub use grading::{Cdl, ColorWheels, Lut1d, Lut3d, LutInput};
88pub use optics::{ApertureShape, HeightFrom, Optics};
89pub use path2d::{MAX_PATH_VERBS, MAX_SVG_PATH_BYTES, MorphPath, Path2D, PathVerb};
90pub use pixels::{ImagePixels, Sampling};
91pub use random::Random;
92pub use shape::{
93    Arc as ArcShape, Arrow, ArrowHead, Circle, Ellipse, FunctionGraph, Line, Polygon, Polyline,
94    RegularPolygon, Ring, RoundedRect, Spline, Star,
95};
96pub use time::{Duration, FrameRate, TICKS_PER_SECOND, Time, TimeLiteral};
97pub use validation::{SceneStats, ValidationError, ValidationErrorKind, ValidationLimits};
98
99/// A classified failure retaining its original source.
100pub type Result<T = ()> = std::result::Result<T, Error>;
101
102/// Common backend-independent authoring values.
103pub mod prelude {
104    pub use crate::ClipMode;
105    pub use crate::{Alignment, Column, Layout, Node, NodeModifiers, Row, Scene, Side};
106    pub use crate::{
107        AngleLiteral, Color, Pivot, Point, Rect, Size, Transform, TransformComponents, Vector2,
108    };
109    pub use crate::{Animation, Constant, Easing, Interpolate, Keyframes, Spring, Tween};
110    pub use crate::{
111        ApertureShape, Cdl, ColorWheels, DepthOfField, DepthPlane, Elevation, HeightFrom, Lut1d,
112        Lut3d, LutInput, Optics, ShutterCurve, ShutterSampling,
113    };
114    pub use crate::{
115        ArcShape, Arrow, ArrowHead, Circle, Ellipse, FunctionGraph, Line, Polygon, Polyline,
116        RegularPolygon, Ring, RoundedRect, Spline, Star,
117    };
118    pub use crate::{
119        Asset, AssetStatus, Assets, AudioClip, AudioSource, Handle, LoadContext,
120        RequestDiagnostics, Source,
121    };
122    pub use crate::{BlendMode, BlendSpace, Filter, FilterOperation, MaskMode, PixelSize};
123    pub use crate::{
124        Bone, BonePose, BoneTransform, Camera, Direction, Pose, SceneCache, SceneContext, Skeleton,
125        camera, try_camera,
126    };
127    pub use crate::{BoundaryAdjustment, BoundaryEdge, Clip, Timeline, Track, TrackBuilder};
128    pub use crate::{
129        Canvas, DrawCommand, DrawContext, Drawable, FillRule, LineCap, LineJoin, Paint, PathClip,
130        RectClip, RenderQuality, Shape, ShapeClip, StrokeStyle, Styled,
131    };
132    pub use crate::{
133        CrossFade, Iris, IrisShape, MotionBlur, Push, Slide, Transition, Wipe, ZoomBlur,
134    };
135    pub use crate::{Duration, FrameRate, Random, TICKS_PER_SECOND, Time, TimeLiteral};
136    pub use crate::{
137        Error, ErrorKind, SceneStats, ValidationError, ValidationErrorKind, ValidationLimits,
138    };
139    pub use crate::{
140        Extrapolate, FollowPath, Noise, Oscillator, PathSample, Waveform, piecewise, remap,
141    };
142    pub use crate::{
143        GradientExtend, GradientSpace, GradientUnits, ImagePattern, LinearGradient, RadialGradient,
144        SweepGradient,
145    };
146    pub use crate::{MorphPath, Path2D, PathVerb};
147    pub use crate::{group, scene};
148    pub use crate::{linear_to_srgb, premultiply, rec709_luminance, srgb_to_linear, unpremultiply};
149}