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

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).

Search Document