etui/widget
Types
Animated widget: a render function that also receives the current frame.
pub type AnimatedWidget =
fn(buffer.Buffer, geometry.Rect, Int) -> buffer.Buffer
Stateful widget: carries a render function that also takes state. State is kept external (in your app model) and passed at render time.
pub type StatefulWidget(state) {
StatefulWidget(
render: fn(buffer.Buffer, geometry.Rect, state) -> buffer.Buffer,
)
}
Constructors
-
StatefulWidget( render: fn(buffer.Buffer, geometry.Rect, state) -> buffer.Buffer, )
Stateless widget: a pure render function.
Any fn(Buffer, Rect) -> Buffer satisfies this type.
pub type Widget =
fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer
Values
pub fn at(
w: fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer,
sub_area: geometry.Rect,
) -> fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer
Pin a widget to a fixed sub_area, ignoring the caller-supplied area.
Use when a widget’s position is pre-computed and shouldn’t be overridden.
pub fn compose(
border_w: fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer,
inner_area: geometry.Rect,
content_w: fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer,
) -> fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer
Render border_w over area, then content_w over inner_area.
Convenience for the common “block border + child content” pattern:
let blk = block.block_new() |> block.with_border(block.Single)
let inner = block.inner(area, blk)
let composed = widget.compose(
fn(buf, a) { block.render(buf, a, blk) },
inner,
fn(buf, a) { paragraph.render(buf, a, para) },
)
composed(buf, area)
pub fn empty() -> fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer
A widget that renders nothing. Useful as a default or placeholder.
pub fn freeze(
w: StatefulWidget(s),
state: s,
) -> fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer
Bake state into a stateless Widget. The resulting Widget ignores any state updates after this call.
pub fn freeze_frame(
w: fn(buffer.Buffer, geometry.Rect, Int) -> buffer.Buffer,
frame: Int,
) -> fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer
Bind a frame number to an AnimatedWidget, producing a stateless Widget.
pub fn layer(
bottom: fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer,
top: fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer,
) -> fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer
Draw two widgets in the same area: bottom first, then top on top.
Use for overlaying a popup, cursor, or status indicator over content.
pub fn render_stateful(
buf: buffer.Buffer,
area: geometry.Rect,
w: StatefulWidget(s),
state: s,
) -> buffer.Buffer
Render a stateful widget with the given state value.
pub fn stack(
widgets: List(fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer),
) -> fn(buffer.Buffer, geometry.Rect) -> buffer.Buffer
Apply a list of widgets to the same area in order (each draws on top of the previous).