def text(text: str, *trait_fns: TextTraitFn) -> LayerRef: entry = TextEntry(text) idx = register_entry(entry, 'TEXT', '') t = TextTrait(idx) t.transform.pos(*lcenter()) [tfn(t) for tfn in trait_fns] return LayerRef(idx)
def image(src: str | list[str], *trait_fns: ImageTraitFn) -> LayerRef: entry = ImageEntry([src] if isinstance(src, str) else src) idx = register_entry(entry, 'IMAGE', '') t = ImageTrait(idx) t.transform.pos(*lcenter()) [tfn(t) for tfn in trait_fns] return LayerRef(idx)
def video(src: str, *trait_fns: VideoTraitFn) -> LayerRef: entry = VideoEntry(src) idx = register_entry(entry, 'VIDEO', '') t = VideoTrait(idx) t.transform.pos(*lcenter()) [tfn(t) for tfn in trait_fns] return LayerRef(idx)
def line(size: float, *trait_fns: LineTraitFn) -> LayerRef: entry = ShapeEntry('LINE') entry.shape.line.size = size idx = register_entry(entry, 'SHAPE', '') t = LineTrait(idx) t.transform.pos(*lcenter()) [tfn(t) for tfn in trait_fns] return LayerRef(idx)
def tri(side: float, *trait_fns: TriangleTraitFn) -> LayerRef: entry = ShapeEntry('TRIANGLE') entry.shape.tri.side = side idx = register_entry(entry, 'SHAPE', '') t = TriangleTrait(idx) t.transform.pos(*lcenter()) [tfn(t) for tfn in trait_fns] return LayerRef(idx)
def circle(radius: float, *trait_fns: CircleTraitFn) -> LayerRef: entry = ShapeEntry('CIRCLE') entry.shape.circle.circle_radius = radius idx = register_entry(entry, 'SHAPE', '') t = CircleTrait(idx) t.transform.pos(*lcenter()) [tfn(t) for tfn in trait_fns] return LayerRef(idx)
def rect(width: int, height: int, *trait_fns: RectTraitFn) -> LayerRef: entry = ShapeEntry('RECT') entry.shape.rect.width = width entry.shape.rect.height = height idx = register_entry(entry, 'SHAPE', '') t = RectTrait(idx) t.transform.pos(*lcenter()) [tfn(t) for tfn in trait_fns] return LayerRef(idx)