Raxol.Terminal.Renderer (Raxol v0.5.0)
View SourceTerminal renderer module.
This module handles rendering of terminal output, including:
- Character cell rendering
- Text styling
- Cursor rendering
- Performance optimizations
Integration with Other Modules
The Renderer module works closely with several specialized modules:
Manipulation Module
- Receives text and style updates from the Manipulation module
- Renders text with proper styling and positioning
- Handles text insertion, deletion, and modification
Selection Module
- Renders text selections with visual highlighting
- Supports multiple selections
- Handles selection state changes
Validation Module
- Renders validation errors and warnings
- Applies visual indicators for invalid input
- Shows validation state through styling
Performance Optimizations
The renderer includes several optimizations:
- Only renders changed cells
- Batches style updates for consecutive cells
- Minimizes DOM updates
- Caches rendered output when possible
Usage
# Create a new renderer
buffer = ScreenBuffer.new(80, 24)
renderer = Renderer.new(buffer)
# Render with selection
selection = %{selection: {0, 0, 0, 5}}
output = Renderer.render(renderer, selection: selection)
# Render with validation
validation = Validation.validate_input(buffer, 0, 0, "text")
output = Renderer.render(renderer, validation: validation)
Summary
Functions
Clears the cursor position.
Gets the current content of the screen buffer.
Creates a new renderer with the given screen buffer.
Renders the terminal content without additional options.
Renders the terminal content.
Renders the terminal content with additional options.
Sets the cursor position.
Updates the font settings.
Updates the theme settings.
Starts a new renderer process.
Stops the renderer process.
Types
@type t() :: %Raxol.Terminal.Renderer{ cursor: {non_neg_integer(), non_neg_integer()} | nil, font_settings: map(), screen_buffer: Raxol.Terminal.ScreenBuffer.t(), theme: map() }
Functions
Clears the cursor position.
Examples
iex> screen_buffer = ScreenBuffer.new(80, 24)
iex> renderer = Renderer.new(screen_buffer)
iex> renderer = Renderer.set_cursor(renderer, {10, 5})
iex> renderer = Renderer.clear_cursor(renderer)
iex> renderer.cursor
nil
Gets the current content of the screen buffer.
Parameters
renderer
- The renderer to get content fromopts
- Options for content retrieval:include_style
- Whether to include style information (default: false):include_cursor
- Whether to include cursor position (default: false)
Returns
{:ok, content}
- The current content{:error, reason}
- If content retrieval fails
Examples
iex> get_content(renderer)
{:ok, "Hello, World!"}
Creates a new renderer with the given screen buffer.
Examples
iex> screen_buffer = ScreenBuffer.new(80, 24)
iex> renderer = Renderer.new(screen_buffer)
iex> renderer.screen_buffer
%ScreenBuffer{}
Renders the terminal content without additional options.
Renders the terminal content.
Renders the terminal content with additional options.
Sets the cursor position.
Examples
iex> screen_buffer = ScreenBuffer.new(80, 24)
iex> renderer = Renderer.new(screen_buffer)
iex> renderer = Renderer.set_cursor(renderer, {10, 5})
iex> renderer.cursor
{10, 5}
Updates the font settings.
Examples
iex> screen_buffer = ScreenBuffer.new(80, 24)
iex> renderer = Renderer.new(screen_buffer)
iex> settings = %{family: "Fira Code"}
iex> renderer = Renderer.set_font_settings(renderer, settings)
iex> renderer.font_settings
%{family: "Fira Code"}
Updates the theme settings.
Examples
iex> screen_buffer = ScreenBuffer.new(80, 24)
iex> renderer = Renderer.new(screen_buffer)
iex> theme = %{foreground: %{default: "#FFF"}}
iex> renderer = Renderer.set_theme(renderer, theme)
iex> renderer.theme
%{foreground: %{default: "#FFF"}}
Starts a new renderer process.
Stops the renderer process.