Skip to main content

rustmotion_components/
grid.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use skia_safe::Canvas;
4
5use rustmotion_core::css::CssStyle;
6use rustmotion_core::engine::layout_pass::BoxLayout;
7use rustmotion_core::schema::TimelineStep;
8use rustmotion_core::traits::{PaintCtx, Painter, TimingConfig};
9
10use crate::ChildComponent;
11
12/// Grid container — children are positioned via CSS-like grid layout.
13#[derive(Debug, Serialize, Deserialize, JsonSchema)]
14pub struct Grid {
15    #[serde(default)]
16    pub children: Vec<ChildComponent>,
17    #[serde(flatten)]
18    pub timing: TimingConfig,
19    #[serde(default)]
20    pub style: CssStyle,
21    #[serde(default)]
22    pub timeline: Vec<TimelineStep>,
23    #[serde(default)]
24    pub stagger: Option<f32>,
25    #[serde(default)]
26    pub time_scale: Option<f64>,
27    #[serde(default)]
28    pub time_offset: Option<f64>,
29}
30
31rustmotion_core::impl_traits!(Grid {
32    Animatable => animation,
33    Timed => timing,
34    Styled => style,
35});
36
37impl Painter for Grid {
38    fn paint_content(
39        &self,
40        _canvas: &Canvas,
41        _layout: &BoxLayout,
42        _props: &rustmotion_core::engine::animator::AnimatedProperties,
43        _ctx: &PaintCtx,
44    ) {
45    }
46}