Performance Infrastructure: - FrameArena: O(1) per-frame allocator with automatic reset - ObjectPool: Generic object pool for frequently allocated types - CommandPool: Specialized pool for draw commands - RingBuffer: Circular buffer for streaming data - ScopedArena: RAII pattern for temporary allocations Dirty Rectangle System: - Context now tracks dirty regions for partial redraws - Automatic rect merging to reduce overdraw - invalidateRect(), needsRedraw(), getDirtyRects() API - Falls back to full redraw when > 32 dirty rects Benchmark Suite: - Timer: High-resolution timing - Benchmark: Stats collection (avg, min, max, stddev, median) - FrameTimer: FPS and frame time tracking - AllocationTracker: Memory usage monitoring - Pre-built benchmarks for arena, pool, and commands Context Improvements: - Integrated FrameArena for zero-allocation hot paths - frameAllocator() for per-frame widget allocations - FrameStats for performance monitoring - Context.init() now returns error union (breaking change) New Widgets (from previous session): - Slider: Horizontal/vertical with customization - ScrollArea: Scrollable content region - Tabs: Tab container with keyboard navigation - RadioButton: Radio button groups - Menu: Dropdown menus (foundation) Theme System Expansion: - 5 built-in themes: dark, light, high_contrast, nord, dracula - ThemeManager with runtime switching - TTF font support via stb_truetype Documentation: - DEVELOPMENT_PLAN.md: 9-phase roadmap to DVUI/Gio parity - Updated WIDGET_COMPARISON.md with detailed analysis - Lego Panels architecture documented Stats: 17 widgets, 123 tests, 5 themes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
170 lines
5.5 KiB
Zig
170 lines
5.5 KiB
Zig
//! Widgets - All widget modules
|
|
//!
|
|
//! This module re-exports all widgets for convenient access.
|
|
|
|
const std = @import("std");
|
|
|
|
// =============================================================================
|
|
// Widget modules
|
|
// =============================================================================
|
|
|
|
pub const label = @import("label.zig");
|
|
pub const button = @import("button.zig");
|
|
pub const text_input = @import("text_input.zig");
|
|
pub const checkbox = @import("checkbox.zig");
|
|
pub const select = @import("select.zig");
|
|
pub const list = @import("list.zig");
|
|
pub const focus = @import("focus.zig");
|
|
pub const table = @import("table.zig");
|
|
pub const split = @import("split.zig");
|
|
pub const panel = @import("panel.zig");
|
|
pub const modal = @import("modal.zig");
|
|
pub const autocomplete = @import("autocomplete.zig");
|
|
pub const slider = @import("slider.zig");
|
|
pub const scroll = @import("scroll.zig");
|
|
pub const menu = @import("menu.zig");
|
|
pub const tabs = @import("tabs.zig");
|
|
pub const radio = @import("radio.zig");
|
|
|
|
// =============================================================================
|
|
// Re-exports for convenience
|
|
// =============================================================================
|
|
|
|
// Label
|
|
pub const Label = label;
|
|
pub const Alignment = label.Alignment;
|
|
pub const LabelConfig = label.LabelConfig;
|
|
|
|
// Button
|
|
pub const Button = button;
|
|
pub const ButtonConfig = button.ButtonConfig;
|
|
pub const Importance = button.Importance;
|
|
|
|
// TextInput
|
|
pub const TextInput = text_input;
|
|
pub const TextInputState = text_input.TextInputState;
|
|
pub const TextInputConfig = text_input.TextInputConfig;
|
|
pub const TextInputResult = text_input.TextInputResult;
|
|
|
|
// Checkbox
|
|
pub const Checkbox = checkbox;
|
|
pub const CheckboxConfig = checkbox.CheckboxConfig;
|
|
|
|
// Select
|
|
pub const Select = select;
|
|
pub const SelectState = select.SelectState;
|
|
pub const SelectConfig = select.SelectConfig;
|
|
pub const SelectResult = select.SelectResult;
|
|
|
|
// List
|
|
pub const List = list;
|
|
pub const ListState = list.ListState;
|
|
pub const ListConfig = list.ListConfig;
|
|
pub const ListResult = list.ListResult;
|
|
|
|
// Focus
|
|
pub const Focus = focus;
|
|
pub const FocusManager = focus.FocusManager;
|
|
pub const FocusRing = focus.FocusRing;
|
|
|
|
// Table
|
|
pub const Table = table;
|
|
pub const TableState = table.TableState;
|
|
pub const TableConfig = table.TableConfig;
|
|
pub const TableColors = table.TableColors;
|
|
pub const TableResult = table.TableResult;
|
|
pub const Column = table.Column;
|
|
pub const ColumnType = table.ColumnType;
|
|
pub const RowState = table.RowState;
|
|
pub const SortDirection = table.SortDirection;
|
|
pub const ValidationResult = table.ValidationResult;
|
|
pub const CellValidateFn = table.CellValidateFn;
|
|
|
|
// Split
|
|
pub const Split = split;
|
|
pub const SplitState = split.SplitState;
|
|
pub const SplitConfig = split.SplitConfig;
|
|
pub const SplitResult = split.SplitResult;
|
|
pub const SplitDirection = split.Direction;
|
|
|
|
// Panel
|
|
pub const Panel = panel;
|
|
pub const PanelState = panel.PanelState;
|
|
pub const PanelConfig = panel.PanelConfig;
|
|
pub const PanelColors = panel.PanelColors;
|
|
pub const PanelResult = panel.PanelResult;
|
|
|
|
// Modal
|
|
pub const Modal = modal;
|
|
pub const ModalState = modal.ModalState;
|
|
pub const ModalConfig = modal.ModalConfig;
|
|
pub const ModalColors = modal.ModalColors;
|
|
pub const ModalResult = modal.ModalResult;
|
|
pub const ModalButton = modal.ModalButton;
|
|
pub const ButtonSet = modal.ButtonSet;
|
|
|
|
// AutoComplete
|
|
pub const AutoComplete = autocomplete;
|
|
pub const AutoCompleteState = autocomplete.AutoCompleteState;
|
|
pub const AutoCompleteConfig = autocomplete.AutoCompleteConfig;
|
|
pub const AutoCompleteColors = autocomplete.AutoCompleteColors;
|
|
pub const AutoCompleteResult = autocomplete.AutoCompleteResult;
|
|
pub const MatchMode = autocomplete.MatchMode;
|
|
|
|
// Slider
|
|
pub const Slider = slider;
|
|
pub const SliderState = slider.SliderState;
|
|
pub const SliderConfig = slider.SliderConfig;
|
|
pub const SliderColors = slider.SliderColors;
|
|
pub const SliderResult = slider.SliderResult;
|
|
pub const SliderOrientation = slider.Orientation;
|
|
|
|
// Scroll
|
|
pub const Scroll = scroll;
|
|
pub const ScrollbarState = scroll.ScrollbarState;
|
|
pub const ScrollbarConfig = scroll.ScrollbarConfig;
|
|
pub const ScrollbarColors = scroll.ScrollbarColors;
|
|
pub const ScrollbarResult = scroll.ScrollbarResult;
|
|
pub const ScrollAreaState = scroll.ScrollAreaState;
|
|
pub const ScrollAreaConfig = scroll.ScrollAreaConfig;
|
|
pub const ScrollAreaColors = scroll.ScrollAreaColors;
|
|
pub const ScrollAreaResult = scroll.ScrollAreaResult;
|
|
pub const ScrollOrientation = scroll.Orientation;
|
|
|
|
// Menu
|
|
pub const Menu = menu;
|
|
pub const MenuState = menu.MenuState;
|
|
pub const MenuBarState = menu.MenuBarState;
|
|
pub const MenuItem = menu.MenuItem;
|
|
pub const MenuItemType = menu.MenuItemType;
|
|
pub const MenuDef = menu.MenuDef;
|
|
pub const MenuConfig = menu.MenuConfig;
|
|
pub const MenuColors = menu.MenuColors;
|
|
pub const MenuResult = menu.MenuResult;
|
|
pub const MenuBarResult = menu.MenuBarResult;
|
|
|
|
// Tabs
|
|
pub const Tabs = tabs;
|
|
pub const TabsState = tabs.TabsState;
|
|
pub const Tab = tabs.Tab;
|
|
pub const TabsConfig = tabs.TabsConfig;
|
|
pub const TabsColors = tabs.TabsColors;
|
|
pub const TabsResult = tabs.TabsResult;
|
|
pub const TabPosition = tabs.TabPosition;
|
|
|
|
// Radio
|
|
pub const Radio = radio;
|
|
pub const RadioOption = radio.RadioOption;
|
|
pub const RadioState = radio.RadioState;
|
|
pub const RadioConfig = radio.RadioConfig;
|
|
pub const RadioColors = radio.RadioColors;
|
|
pub const RadioResult = radio.RadioResult;
|
|
pub const RadioDirection = radio.Direction;
|
|
|
|
// =============================================================================
|
|
// Tests
|
|
// =============================================================================
|
|
|
|
test {
|
|
std.testing.refAllDecls(@This());
|
|
}
|