tawasuyu

tawasuyu/llimphi

Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.

Rust 229TOML 101Markdown 82Shell 24052 Sutichaykuna

⎇ main shared/foreign-lottie/src/runtime/vello.rs Rust · 56 siq'ikuna · 1.4 KB Ñawpa willay Pi imata llamkarqan ch'uya

chore: refresco desde el monorepo — 27 crates nuevos (anim, lottie, svg, mesh, image, layer, test, wire-view, widgets rag-sidebar/router/lazy-list/rive-button) y sync de los 95 existentes 93253cc22 · Sergio ·

1// Copyright 2024 the Velato Authors
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3
4use super::{Composition, RenderSink, Renderer, model::fixed};
5
6use kurbo::{Affine, Shape};
7use peniko::{BlendMode, Fill};
8
9impl RenderSink for vello::Scene {
10    fn push_layer(
11        &mut self,
12        blend: impl Into<BlendMode>,
13        alpha: f32,
14        transform: Affine,
15        shape: &impl Shape,
16    ) {
17        self.push_layer(Fill::NonZero, blend, alpha, transform, shape);
18    }
19
20    fn push_clip_layer(&mut self, transform: Affine, shape: &impl Shape) {
21        self.push_clip_layer(Fill::NonZero, transform, shape);
22    }
23
24    fn pop_layer(&mut self) {
25        self.pop_layer();
26    }
27
28    fn draw(
29        &mut self,
30        stroke: Option<&fixed::Stroke>,
31        transform: Affine,
32        brush: &fixed::Brush,
33        shape: &impl Shape,
34    ) {
35        if let Some(stroke) = stroke {
36            self.stroke(stroke, transform, brush, None, shape);
37        } else {
38            self.fill(Fill::NonZero, transform, brush, None, shape);
39        }
40    }
41}
42
43impl Renderer {
44    /// Renders the animation at a given frame to a new scene.
45    pub fn render_to_vello_scene(
46        &mut self,
47        animation: &Composition,
48        frame: f64,
49        transform: Affine,
50        alpha: f64,
51    ) -> vello::Scene {
52        let mut scene = vello::Scene::new();
53        self.append(animation, frame, transform, alpha, &mut scene);
54        scene
55    }
56}