valo
Drawing

Nested lists

Replay a recording. Optionally cache it as a raster.

A DisplayList is immutable and nestable. Record a piece once, then draw_display_list it under different transforms.

use std::sync::Arc;
use valo::{DisplayListBuilder, Rect};

let cell = {
    let mut nested = DisplayListBuilder::new();
    nested.draw_rrect(Rect::new(0.0, 0.0, 72.0, 48.0), 10.0, &paint);
    Arc::new(nested.build())
};
builder.draw_display_list(&cell);
builder.translate(92.0, 0.0);
builder.draw_display_list_cached(&cell);
const cell = new DisplayListBuilder();
cell.drawRoundedRect(0, 0, 72, 48, new Float32Array([10]), paint);
const list = cell.build();
builder.drawDisplayList(list);
builder.drawDisplayListCached(list);
scene.jsplayground
loading editor
liveacquiring device

Cached replay

drawDisplayListCached may sample a raster of the child instead of replaying it. A fill, if needed, happens this frame; rotated or skewed embeds fall back to inline replay. Lists that read the backdrop cannot be cached — the blur samples what is behind the list.

See DisplayList.

The same recording, translated, rotated, and scaled. Rotated embeds fall back to inline replay even when marked cached.

scene.jsplayground
loading editor
liveacquiring device

On this page