zcatgui/src/widgets/widgets.zig
reugenio 8adc93a345 feat: zcatgui v0.6.0 - Phase 1 Optimization Complete
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>
2025-12-09 12:45:00 +01:00

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());
}