core_animation/lib.rs
1//! Rust bindings for macOS Core Animation with builder APIs.
2//!
3//! Core Animation is Apple's GPU-accelerated rendering system. This crate
4//! wraps it with ergonomic builders, focusing on **particle effects** and
5//! **layer composition**.
6//!
7//! # Quick Start
8//!
9//! Particles burst outward from a point:
10//!
11//! ```ignore
12//! use std::f64::consts::PI;
13//! use core_animation::prelude::*;
14//!
15//! let emitter = CAEmitterLayerBuilder::new()
16//! .position(320.0, 240.0)
17//! .shape(EmitterShape::Point)
18//! .particle(|p| {
19//! p.birth_rate(100.0) // spawn rate
20//! .lifetime(5.0) // seconds until particle disappears
21//! .velocity(80.0) // movement speed
22//! .emission_range(PI * 2.0) // spread angle (full circle)
23//! .color(Color::CYAN)
24//! .image(ParticleImage::soft_glow(64))
25//! })
26//! .build();
27//!
28//! window.container().add_sublayer(&emitter);
29//! window.show_for(10.seconds());
30//! ```
31//!
32//! Simpler API for the same effect:
33//!
34//! ```ignore
35//! let burst = PointBurstBuilder::new(320.0, 240.0)
36//! .velocity(100.0)
37//! .color(Color::PINK)
38//! .build();
39//! ```
40//!
41//! # Examples
42//!
43//! See [`examples/README.md`](https://github.com/sassman/t-rec-rs/tree/main/crates/core-animation/examples)
44//! for runnable demos with screenshots.
45//!
46//! ```bash
47//! cargo run --example emitter
48//! ```
49//!
50//! # Modules
51//!
52//! - [`animation_builder`] - GPU-accelerated animations ([`CABasicAnimationBuilder`](animation_builder::CABasicAnimationBuilder),
53//! [`KeyPath`](animation_builder::KeyPath), [`Easing`](animation_builder::Easing))
54//! - [`particles`] - Particle emitter builders ([`CAEmitterLayerBuilder`](particles::CAEmitterLayerBuilder),
55//! [`PointBurstBuilder`](particles::PointBurstBuilder), [`ParticleImage`](particles::ParticleImage))
56//! - [`window`] - Test window for examples ([`WindowBuilder`])
57//!
58//! # Types
59//!
60//! **This crate:**
61//! - [`Color`] - RGBA color with presets (`Color::CYAN`, `Color::rgb(...)`)
62//! - [`CALayerBuilder`] - Generic layer builder
63//! - [`CAShapeLayerBuilder`] - Vector shape builder
64//! - [`CATextLayerBuilder`] - Text rendering builder with fonts and alignment
65//! - [`DurationExt`] - `5.seconds()`, `500.millis()` syntax
66//!
67//! **Re-exported from Apple frameworks:**
68//! - [`CALayer`], [`CAShapeLayer`], [`CATransform3D`] - Core Animation
69//! - [`CGPoint`](objc2_core_foundation::CGPoint), [`CGSize`](objc2_core_foundation::CGSize),
70//! [`CGRect`](objc2_core_foundation::CGRect) - Geometry
71//! - [`CGPath`](objc2_core_graphics::CGPath), [`CGColor`](objc2_core_graphics::CGColor) - Graphics
72//!
73//! Use [`prelude`] to import common types.
74
75#![cfg(target_os = "macos")]
76
77pub mod animation_builder;
78mod color;
79mod duration_ext;
80mod layer_builder;
81mod layer_ext;
82pub mod particles;
83mod shape_layer_builder;
84mod text_layer_builder;
85pub mod window;
86
87// Re-export Color type
88pub use color::Color;
89
90// Re-export the main types from objc2-quartz-core
91pub use objc2_quartz_core::{CALayer, CAShapeLayer, CATextLayer, CATransform3D};
92
93// Re-export our builders
94pub use layer_builder::CALayerBuilder;
95pub use shape_layer_builder::CAShapeLayerBuilder;
96pub use text_layer_builder::{CATextLayerBuilder, TextAlign, Truncation};
97
98// Re-export window types
99pub use window::{Screen, Window, WindowBuilder, WindowLevel, WindowStyle};
100
101// Re-export duration extension
102pub use duration_ext::DurationExt;
103
104// Re-export layer extension
105pub use layer_ext::CALayerExt;
106
107// Re-export dependencies for convenience
108pub use objc2_core_foundation;
109pub use objc2_core_graphics;
110pub use objc2_core_text;
111pub use objc2_quartz_core;
112
113/// Prelude module for convenient imports.
114pub mod prelude {
115 // Color type
116 pub use crate::color::Color;
117
118 // Animation builder types
119 pub use crate::animation_builder::{CABasicAnimationBuilder, Easing, KeyPath, Repeat};
120
121 // Builders
122 pub use crate::layer_builder::CALayerBuilder;
123 pub use crate::particles::{
124 CAEmitterCellBuilder, CAEmitterLayerBuilder, EmitterMode, EmitterShape, ParticleImage,
125 PointBurstBuilder, RenderMode,
126 };
127 pub use crate::shape_layer_builder::CAShapeLayerBuilder;
128 pub use crate::text_layer_builder::{CATextLayerBuilder, TextAlign, Truncation};
129 pub use crate::window::{Screen, Window, WindowBuilder, WindowLevel, WindowStyle};
130
131 // Duration extension for ergonomic timing
132 pub use crate::duration_ext::DurationExt;
133
134 // Layer extension for snake_case methods
135 pub use crate::layer_ext::CALayerExt;
136
137 // Core Animation types
138 pub use crate::{CALayer, CAShapeLayer, CATextLayer, CATransform3D};
139 pub use objc2_quartz_core::CABasicAnimation;
140
141 // Core Foundation types (geometry, strings, collections, run loop)
142 pub use objc2_core_foundation::{
143 kCFRunLoopDefaultMode, kCFTypeDictionaryKeyCallBacks, kCFTypeDictionaryValueCallBacks,
144 CFAttributedString, CFDictionary, CFDictionaryKeyCallBacks, CFDictionaryValueCallBacks,
145 CFIndex, CFRetained, CFRunLoop, CFString, CFStringBuiltInEncodings, CFTimeInterval,
146 CGAffineTransform, CGFloat, CGPoint, CGRect, CGSize,
147 };
148
149 // Core Graphics types (context, colors, paths, transforms, display)
150 pub use objc2_core_graphics::{
151 CGAffineTransformIdentity, CGColor, CGContext, CGDirectDisplayID, CGDisplayBounds,
152 CGMainDisplayID, CGPath,
153 };
154
155 // Core Text types (fonts, lines, string attributes)
156 pub use objc2_core_text::{
157 kCTFontAttributeName, kCTForegroundColorAttributeName, CTFont, CTLine,
158 };
159
160 // AppKit types (NSApplication)
161 pub use objc2_app_kit::NSApplication;
162
163 // Smart pointer for Objective-C objects
164 pub use objc2::rc::Retained;
165}