Files

48 lines
1.6 KiB
Python

from typing import Callable, Tuple
from PIL import ImageDraw
RenderFn = Callable[[ImageDraw.ImageDraw, Tuple[int, int], str], None]
class ListItem:
"""A renderable item for use in ListView or CarouselView.
Each item carries a render function called as render_fn(draw, (x, y), fill).
An optional render_large_fn is used by CarouselView for a more prominent
display; it falls back to render_fn when not provided.
"""
def __init__(self,
render_fn: RenderFn,
render_large_fn: RenderFn | None = None):
self._render_fn = render_fn
self._render_large_fn = render_large_fn
def render(self,
draw: ImageDraw.ImageDraw,
position: Tuple[int, int],
fill: str = 'black',
**kwargs):
"""Render the item at normal (list) size.
Extra keyword arguments (e.g. ``font_size``) are forwarded to the
underlying render function.
"""
self._render_fn(draw, position, fill, **kwargs)
def render_large(self,
draw: ImageDraw.ImageDraw,
position: Tuple[int, int],
fill: str = 'black',
**kwargs):
"""Render the item at large (carousel) size.
Uses render_large_fn if provided, otherwise falls back to render_fn.
Extra keyword arguments (e.g. ``font_size``) are forwarded to the
underlying render function.
"""
fn = self._render_large_fn or self._render_fn
fn(draw, position, fill, **kwargs)