MingaEditor.UI.FontRegistry (Minga v0.1.0)

Copy Markdown View Source

Maps font family names to protocol font IDs (0-255).

Font ID 0 is always the primary font (configured via :font_family). IDs 1-255 are assigned on demand when a Face with a non-nil font_family is first rendered. The registry sends register_font protocol commands to the GUI frontend so it can load the corresponding FontFace instances.

The registry is process-local state stored in the Editor GenServer's state. It resets when the editor restarts or the font config changes.

Summary

Functions

Returns the font_id for a font family, allocating a new ID if needed.

Returns the font_id for a family, or 0 if not registered.

Creates a new empty font registry.

Types

t()

@type t() :: %MingaEditor.UI.FontRegistry{
  families: %{required(String.t()) => non_neg_integer()},
  next_id: non_neg_integer()
}

Functions

get_or_register(reg, family)

@spec get_or_register(t(), String.t()) :: {non_neg_integer(), t(), boolean()}

Returns the font_id for a font family, allocating a new ID if needed.

Returns {font_id, updated_registry, new?} where new? is true if a new ID was allocated (caller should send register_font to the GUI).

The primary font (ID 0) is never registered here; it's set via set_font.

lookup(font_registry, family)

@spec lookup(t(), String.t()) :: non_neg_integer()

Returns the font_id for a family, or 0 if not registered.

new()

@spec new() :: t()

Creates a new empty font registry.