style: Use consistent lowercase naming (zcatgui, not zCatGui)
Apply TEAM_STANDARDS Norma #25: project names use lowercase everywhere - repo, directory, module, documentation, imports. No CamelCase in project names. Consistency = less cognitive friction. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
59c597fc18
commit
c4ea6422dc
10 changed files with 41 additions and 41 deletions
10
CLAUDE.md
10
CLAUDE.md
|
|
@ -1,4 +1,4 @@
|
||||||
# zCatGui - GUI Library para Zig
|
# zcatgui - GUI Library para Zig
|
||||||
|
|
||||||
> **IMPORTANTE PARA CLAUDE**: Lee la sección "PROTOCOLO DE INICIO" antes de hacer cualquier cosa.
|
> **IMPORTANTE PARA CLAUDE**: Lee la sección "PROTOCOLO DE INICIO" antes de hacer cualquier cosa.
|
||||||
|
|
||||||
|
|
@ -42,7 +42,7 @@ Una vez verificado el estado, continúa desde donde se dejó.
|
||||||
|
|
||||||
| Campo | Valor |
|
| Campo | Valor |
|
||||||
|-------|-------|
|
|-------|-------|
|
||||||
| **Nombre** | zCatGui |
|
| **Nombre** | zcatgui |
|
||||||
| **Versión** | v0.1.0 - EN DESARROLLO |
|
| **Versión** | v0.1.0 - EN DESARROLLO |
|
||||||
| **Fecha inicio** | 2025-12-09 |
|
| **Fecha inicio** | 2025-12-09 |
|
||||||
| **Lenguaje** | Zig 0.15.2 |
|
| **Lenguaje** | Zig 0.15.2 |
|
||||||
|
|
@ -52,7 +52,7 @@ Una vez verificado el estado, continúa desde donde se dejó.
|
||||||
|
|
||||||
### Descripción
|
### Descripción
|
||||||
|
|
||||||
**zCatGui** es una librería GUI immediate-mode para Zig con las siguientes características:
|
**zcatgui** es una librería GUI immediate-mode para Zig con las siguientes características:
|
||||||
|
|
||||||
1. **Software Rendering por defecto** - Funciona en cualquier ordenador sin GPU
|
1. **Software Rendering por defecto** - Funciona en cualquier ordenador sin GPU
|
||||||
2. **Cross-platform** - Linux, Windows, macOS
|
2. **Cross-platform** - Linux, Windows, macOS
|
||||||
|
|
@ -466,9 +466,9 @@ Widgets → Commands → Software Rasterizer → Framebuffer → SDL_Texture →
|
||||||
|
|
||||||
## RELACIÓN CON ZCATUI
|
## RELACIÓN CON ZCATUI
|
||||||
|
|
||||||
**zcatui** (TUI) y **zCatGui** (GUI) son proyectos hermanos:
|
**zcatui** (TUI) y **zcatgui** (GUI) son proyectos hermanos:
|
||||||
|
|
||||||
| Aspecto | zcatui | zCatGui |
|
| Aspecto | zcatui | zcatgui |
|
||||||
|---------|--------|---------|
|
|---------|--------|---------|
|
||||||
| Target | Terminal (ANSI) | Ventana gráfica |
|
| Target | Terminal (ANSI) | Ventana gráfica |
|
||||||
| Rendering | Escape codes | Software rasterizer |
|
| Rendering | Escape codes | Software rasterizer |
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# zCatGui - Arquitectura y Decisiones de Diseño
|
# zcatgui - Arquitectura y Decisiones de Diseño
|
||||||
|
|
||||||
> Documento de referencia para el desarrollo de zCatGui
|
> Documento de referencia para el desarrollo de zcatgui
|
||||||
> Última actualización: 2025-12-09
|
> Última actualización: 2025-12-09
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -44,7 +44,7 @@ while (running) {
|
||||||
|
|
||||||
### 2.2 Immediate vs Retained Mode
|
### 2.2 Immediate vs Retained Mode
|
||||||
|
|
||||||
| Aspecto | Immediate (zCatGui) | Retained (Fyne) |
|
| Aspecto | Immediate (zcatgui) | Retained (Fyne) |
|
||||||
|---------|---------------------|-----------------|
|
|---------|---------------------|-----------------|
|
||||||
| Estado | Tú lo manejas | Framework lo mantiene |
|
| Estado | Tú lo manejas | Framework lo mantiene |
|
||||||
| Callbacks | No hay | Muchos |
|
| Callbacks | No hay | Muchos |
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# Análisis Técnico: Gio UI (Go)
|
# Análisis Técnico: Gio UI (Go)
|
||||||
|
|
||||||
> Investigación realizada: 2025-12-09
|
> Investigación realizada: 2025-12-09
|
||||||
> Propósito: Entender arquitectura de Gio como referencia para zCatGui
|
> Propósito: Entender arquitectura de Gio como referencia para zcatgui
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -78,7 +78,7 @@ Gio usa un **vector renderer basado en Pathfinder** (proyecto de Mozilla):
|
||||||
|
|
||||||
### 2.3 CPU Fallback
|
### 2.3 CPU Fallback
|
||||||
|
|
||||||
**Importante para zCatGui**: Gio incluye un fallback CPU (`gioui.org/cpu`) con binarios pre-compilados de piet-gpu para arm, arm64, amd64, permitiendo renderizado software cuando no hay GPU disponible.
|
**Importante para zcatgui**: Gio incluye un fallback CPU (`gioui.org/cpu`) con binarios pre-compilados de piet-gpu para arm, arm64, amd64, permitiendo renderizado software cuando no hay GPU disponible.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -389,7 +389,7 @@ operation.Add(ops)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 9. Lecciones para zCatGui
|
## 9. Lecciones para zcatgui
|
||||||
|
|
||||||
### 9.1 Qué Adoptar
|
### 9.1 Qué Adoptar
|
||||||
|
|
||||||
|
|
@ -407,7 +407,7 @@ operation.Add(ops)
|
||||||
|
|
||||||
### 9.3 Diferencias Clave
|
### 9.3 Diferencias Clave
|
||||||
|
|
||||||
| Aspecto | Gio | zCatGui |
|
| Aspecto | Gio | zcatgui |
|
||||||
|---------|-----|---------|
|
|---------|-----|---------|
|
||||||
| Lenguaje | Go | Zig |
|
| Lenguaje | Go | Zig |
|
||||||
| Rendering | GPU (Pathfinder) | Software (framebuffer) |
|
| Rendering | GPU (Pathfinder) | Software (framebuffer) |
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
# Análisis Comparativo: Librerías GUI Immediate-Mode
|
# Análisis Comparativo: Librerías GUI Immediate-Mode
|
||||||
|
|
||||||
> Investigación realizada: 2025-12-09
|
> Investigación realizada: 2025-12-09
|
||||||
> Propósito: Identificar mejores referencias para implementar zCatGui
|
> Propósito: Identificar mejores referencias para implementar zcatgui
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Resumen Ejecutivo
|
## Resumen Ejecutivo
|
||||||
|
|
||||||
Se analizaron las principales librerías GUI immediate-mode para identificar patrones, arquitecturas y código reutilizable para zCatGui.
|
Se analizaron las principales librerías GUI immediate-mode para identificar patrones, arquitecturas y código reutilizable para zcatgui.
|
||||||
|
|
||||||
### Ranking de Relevancia para zCatGui
|
### Ranking de Relevancia para zcatgui
|
||||||
|
|
||||||
| # | Librería | Relevancia | Por qué |
|
| # | Librería | Relevancia | Por qué |
|
||||||
|---|----------|------------|---------|
|
|---|----------|------------|---------|
|
||||||
|
|
@ -83,7 +83,7 @@ mu_begin_window(ctx, "My Window", mu_rect(10, 10, 300, 200));
|
||||||
mu_end_window(ctx);
|
mu_end_window(ctx);
|
||||||
```
|
```
|
||||||
|
|
||||||
### Lecciones para zCatGui
|
### Lecciones para zcatgui
|
||||||
|
|
||||||
1. **Command list es suficiente** - No necesitamos vertex buffers
|
1. **Command list es suficiente** - No necesitamos vertex buffers
|
||||||
2. **~1000 LOC para MVP** - Es alcanzable
|
2. **~1000 LOC para MVP** - Es alcanzable
|
||||||
|
|
@ -157,7 +157,7 @@ pub fn gui(dvui: *Dvui) !void {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Lecciones para zCatGui
|
### Lecciones para zcatgui
|
||||||
|
|
||||||
1. **Backend VTable**: Abstracción limpia para múltiples backends
|
1. **Backend VTable**: Abstracción limpia para múltiples backends
|
||||||
2. **Event processing**: Cómo manejar eventos en Zig
|
2. **Event processing**: Cómo manejar eventos en Zig
|
||||||
|
|
@ -216,7 +216,7 @@ Input → ImGuiContext → Widgets → Vertex Buffers → GPU/Software Raster
|
||||||
- Plot, Histogram
|
- Plot, Histogram
|
||||||
- y muchos más...
|
- y muchos más...
|
||||||
|
|
||||||
### Lecciones para zCatGui
|
### Lecciones para zcatgui
|
||||||
|
|
||||||
1. **ID system**: Hash de string/pointer para tracking
|
1. **ID system**: Hash de string/pointer para tracking
|
||||||
2. **State caching**: ImGuiStorage para estado persistente
|
2. **State caching**: ImGuiStorage para estado persistente
|
||||||
|
|
@ -283,7 +283,7 @@ nk_convert(&ctx, &cmds, &verts, &idx, &config);
|
||||||
- Chart, Color picker
|
- Chart, Color picker
|
||||||
- Combo, Contextual, Menu, Tree
|
- Combo, Contextual, Menu, Tree
|
||||||
|
|
||||||
### Lecciones para zCatGui
|
### Lecciones para zcatgui
|
||||||
|
|
||||||
1. **Styling extenso**: Sistema de propiedades muy configurable
|
1. **Styling extenso**: Sistema de propiedades muy configurable
|
||||||
2. **Memory model**: Fixed memory para embedded
|
2. **Memory model**: Fixed memory para embedded
|
||||||
|
|
@ -320,7 +320,7 @@ egui (core) → epaint (tessellation) → eframe (backend glue)
|
||||||
|
|
||||||
**epaint es interesante**: Convierte shapes vectoriales en triangle meshes.
|
**epaint es interesante**: Convierte shapes vectoriales en triangle meshes.
|
||||||
|
|
||||||
### Lecciones para zCatGui
|
### Lecciones para zcatgui
|
||||||
|
|
||||||
1. **Response pattern**: Widgets retornan Response con interacciones
|
1. **Response pattern**: Widgets retornan Response con interacciones
|
||||||
2. **Context memory**: Retiene mínimo estado entre frames
|
2. **Context memory**: Retiene mínimo estado entre frames
|
||||||
|
|
@ -401,7 +401,7 @@ Input → UI Logic → Shapes → Tessellate → Vertex Buffers → GPU/Software
|
||||||
**Pros**: Eficiente, batching, flexible
|
**Pros**: Eficiente, batching, flexible
|
||||||
**Contras**: Necesita tessellator, más complejo
|
**Contras**: Necesita tessellator, más complejo
|
||||||
|
|
||||||
### Decisión para zCatGui
|
### Decisión para zcatgui
|
||||||
|
|
||||||
**Command List** (microui style):
|
**Command List** (microui style):
|
||||||
1. Más simple de implementar
|
1. Más simple de implementar
|
||||||
|
|
@ -432,7 +432,7 @@ Input → UI Logic → Shapes → Tessellate → Vertex Buffers → GPU/Software
|
||||||
2. **imgui_software_renderer**: Rasteriza triangles de ImGui en CPU
|
2. **imgui_software_renderer**: Rasteriza triangles de ImGui en CPU
|
||||||
3. **SDL software renderer**: Backend para ImGui/Nuklear
|
3. **SDL software renderer**: Backend para ImGui/Nuklear
|
||||||
|
|
||||||
### Estimación para zCatGui
|
### Estimación para zcatgui
|
||||||
|
|
||||||
- **Rasterizer básico**: ~500 LOC
|
- **Rasterizer básico**: ~500 LOC
|
||||||
- **Font handling**: ~300 LOC
|
- **Font handling**: ~300 LOC
|
||||||
|
|
@ -441,7 +441,7 @@ Input → UI Logic → Shapes → Tessellate → Vertex Buffers → GPU/Software
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Recomendaciones para zCatGui
|
## Recomendaciones para zcatgui
|
||||||
|
|
||||||
### Estudio Prioritario
|
### Estudio Prioritario
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
## Resumen Ejecutivo
|
## Resumen Ejecutivo
|
||||||
|
|
||||||
**Simifactu** es una aplicación de facturación empresarial desarrollada en Go con Fyne v2. Este análisis extrae todos los widgets, layouts, y funcionalidades que zCatGui necesitaría para soportar una aplicación similar.
|
**Simifactu** es una aplicación de facturación empresarial desarrollada en Go con Fyne v2. Este análisis extrae todos los widgets, layouts, y funcionalidades que zcatgui necesitaría para soportar una aplicación similar.
|
||||||
|
|
||||||
**Proyecto analizado**: `/mnt/cello2/arno/re/recode/go/simifactu/`
|
**Proyecto analizado**: `/mnt/cello2/arno/re/recode/go/simifactu/`
|
||||||
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
- **ReadOnly** mode
|
- **ReadOnly** mode
|
||||||
- `FocusGained/FocusLost` callbacks
|
- `FocusGained/FocusLost` callbacks
|
||||||
|
|
||||||
**Requisito zCatGui:**
|
**Requisito zcatgui:**
|
||||||
```zig
|
```zig
|
||||||
pub const Input = struct {
|
pub const Input = struct {
|
||||||
text: []const u8,
|
text: []const u8,
|
||||||
|
|
@ -57,7 +57,7 @@ pub const Input = struct {
|
||||||
- Navegación: `<<`, `<`, `>`, `>>`
|
- Navegación: `<<`, `<`, `>`, `>>`
|
||||||
- Acciones contextuales: Exportar, Importar, Duplicar
|
- Acciones contextuales: Exportar, Importar, Duplicar
|
||||||
|
|
||||||
**Requisito zCatGui:**
|
**Requisito zcatgui:**
|
||||||
```zig
|
```zig
|
||||||
pub const Button = struct {
|
pub const Button = struct {
|
||||||
label: []const u8,
|
label: []const u8,
|
||||||
|
|
@ -81,7 +81,7 @@ pub const Button = struct {
|
||||||
- Estado Documento: "Borrador", "Confirmado", "Enviado"
|
- Estado Documento: "Borrador", "Confirmado", "Enviado"
|
||||||
- Forma de Pago
|
- Forma de Pago
|
||||||
|
|
||||||
**Requisito zCatGui:**
|
**Requisito zcatgui:**
|
||||||
```zig
|
```zig
|
||||||
pub const Select = struct {
|
pub const Select = struct {
|
||||||
options: [][]const u8,
|
options: [][]const u8,
|
||||||
|
|
@ -98,7 +98,7 @@ pub const Select = struct {
|
||||||
- "Es Sociedad"
|
- "Es Sociedad"
|
||||||
- Selección múltiple en importación
|
- Selección múltiple en importación
|
||||||
|
|
||||||
**Requisito zCatGui:**
|
**Requisito zcatgui:**
|
||||||
```zig
|
```zig
|
||||||
pub const Checkbox = struct {
|
pub const Checkbox = struct {
|
||||||
checked: bool,
|
checked: bool,
|
||||||
|
|
@ -203,7 +203,7 @@ pub const ColumnDef = struct {
|
||||||
- Todos los paneles principales están en InnerWindows
|
- Todos los paneles principales están en InnerWindows
|
||||||
- Layout: 3-4 InnerWindows en HSplit/VSplit
|
- Layout: 3-4 InnerWindows en HSplit/VSplit
|
||||||
|
|
||||||
**Requisito zCatGui:**
|
**Requisito zcatgui:**
|
||||||
```zig
|
```zig
|
||||||
pub const Panel = struct {
|
pub const Panel = struct {
|
||||||
title: []const u8,
|
title: []const u8,
|
||||||
|
|
@ -221,7 +221,7 @@ pub const Panel = struct {
|
||||||
**Uso detectado:**
|
**Uso detectado:**
|
||||||
- Navegador estilo OpenOffice (carpetas izquierda, archivos derecha)
|
- Navegador estilo OpenOffice (carpetas izquierda, archivos derecha)
|
||||||
|
|
||||||
**Requisito zCatGui:**
|
**Requisito zcatgui:**
|
||||||
```zig
|
```zig
|
||||||
pub const List = struct {
|
pub const List = struct {
|
||||||
items: []ListItem,
|
items: []ListItem,
|
||||||
|
|
@ -279,7 +279,7 @@ container.NewPadded(widget)
|
||||||
HSplit(0.20) HSplit(0.4347)
|
HSplit(0.20) HSplit(0.4347)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Requisito zCatGui:**
|
**Requisito zcatgui:**
|
||||||
```zig
|
```zig
|
||||||
pub const Split = struct {
|
pub const Split = struct {
|
||||||
direction: enum { horizontal, vertical },
|
direction: enum { horizontal, vertical },
|
||||||
|
|
@ -348,7 +348,7 @@ window.Canvas().SetOnTypedKey(func(key *fyne.KeyEvent) {
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
**Requisito zCatGui:**
|
**Requisito zcatgui:**
|
||||||
```zig
|
```zig
|
||||||
pub const KeyEvent = struct {
|
pub const KeyEvent = struct {
|
||||||
key: Key,
|
key: Key,
|
||||||
|
|
@ -411,7 +411,7 @@ SIGSEGV: segmentation fault
|
||||||
GL context not current
|
GL context not current
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6.2 Por qué zCatGui NO tiene este problema
|
### 6.2 Por qué zcatgui NO tiene este problema
|
||||||
|
|
||||||
**Immediate mode es inherentemente thread-safe por diseño:**
|
**Immediate mode es inherentemente thread-safe por diseño:**
|
||||||
- No hay estado compartido del framework
|
- No hay estado compartido del framework
|
||||||
|
|
@ -532,7 +532,7 @@ dataManager.StartConfigFileWatcher()
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 10. Resumen de Requisitos para zCatGui
|
## 10. Resumen de Requisitos para zcatgui
|
||||||
|
|
||||||
### 10.1 Widgets Necesarios (Orden Prioridad)
|
### 10.1 Widgets Necesarios (Orden Prioridad)
|
||||||
|
|
||||||
|
|
@ -593,7 +593,7 @@ dataManager.StartConfigFileWatcher()
|
||||||
|
|
||||||
### Comparación Threading
|
### Comparación Threading
|
||||||
|
|
||||||
| Fyne (Retained) | zCatGui (Immediate) |
|
| Fyne (Retained) | zcatgui (Immediate) |
|
||||||
|-----------------|---------------------|
|
|-----------------|---------------------|
|
||||||
| 402 usos fyne.Do() | 0 equivalentes |
|
| 402 usos fyne.Do() | 0 equivalentes |
|
||||||
| Callbacks async | Polling síncrono |
|
| Callbacks async | Polling síncrono |
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
//! Hello World - Basic zCatGui example
|
//! Hello World - Basic zcatgui example
|
||||||
//!
|
//!
|
||||||
//! Demonstrates:
|
//! Demonstrates:
|
||||||
//! - Initializing the backend
|
//! - Initializing the backend
|
||||||
|
|
@ -21,7 +21,7 @@ pub fn main() !void {
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
// Initialize backend
|
// Initialize backend
|
||||||
var backend = try Sdl2Backend.init("zCatGui - Hello World", 800, 600);
|
var backend = try Sdl2Backend.init("zcatgui - Hello World", 800, 600);
|
||||||
defer backend.deinit();
|
defer backend.deinit();
|
||||||
|
|
||||||
// Create framebuffer
|
// Create framebuffer
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ pub fn main() !void {
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
// Initialize backend
|
// Initialize backend
|
||||||
var backend = try Sdl2Backend.init("zCatGui - Macro Demo", 800, 600);
|
var backend = try Sdl2Backend.init("zcatgui - Macro Demo", 800, 600);
|
||||||
defer backend.deinit();
|
defer backend.deinit();
|
||||||
|
|
||||||
// Create framebuffer
|
// Create framebuffer
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
//! SDL2 Backend - Window and event handling via SDL2
|
//! SDL2 Backend - Window and event handling via SDL2
|
||||||
//!
|
//!
|
||||||
//! This is the primary backend for zCatGui.
|
//! This is the primary backend for zcatgui.
|
||||||
//! SDL2 provides cross-platform window creation, event handling,
|
//! SDL2 provides cross-platform window creation, event handling,
|
||||||
//! and texture-based rendering (we use it to display our software framebuffer).
|
//! and texture-based rendering (we use it to display our software framebuffer).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
//! Macro System - Record and playback user actions
|
//! Macro System - Record and playback user actions
|
||||||
//!
|
//!
|
||||||
//! The macro system is a CORNERSTONE of zCatGui.
|
//! The macro system is a CORNERSTONE of zcatgui.
|
||||||
//! It allows recording raw keyboard input and replaying it exactly.
|
//! It allows recording raw keyboard input and replaying it exactly.
|
||||||
//!
|
//!
|
||||||
//! ## Design Decision: Raw Keys, Not Commands
|
//! ## Design Decision: Raw Keys, Not Commands
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
//! zCatGui - Immediate Mode GUI Library for Zig
|
//! zcatgui - Immediate Mode GUI Library for Zig
|
||||||
//!
|
//!
|
||||||
//! A software-rendered, cross-platform GUI library with macro recording support.
|
//! A software-rendered, cross-platform GUI library with macro recording support.
|
||||||
//!
|
//!
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue