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
@type t() :: %MingaEditor.UI.FontRegistry{ families: %{required(String.t()) => non_neg_integer()}, next_id: non_neg_integer() }
Functions
@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.
@spec lookup(t(), String.t()) :: non_neg_integer()
Returns the font_id for a family, or 0 if not registered.
@spec new() :: t()
Creates a new empty font registry.