A partir de ahora, Capy no está listo para su uso en la producción, ya que todavía estoy haciendo cambios de ruptura
Capy se dirige a ZIG versión 0.14.0-dev.1911+3bf89f55c / 2024.10.0-mach (versiones de zig nominadas) , no funciona en ZIG 0.13.0
Capy es una biblioteca de GUI para Zig . Está destinado principalmente a crear aplicaciones utilizando controles nativos del sistema operativo. Capy es una biblioteca de interfaz de usuario declarativa para ser fácil de escribir y versátil.
Se ha hecho con el objetivo de capacitar a aplicaciones de interfaz de usuario independientes, la integración en los juegos o cualquier otro proceso de renderizado es un no meteorológico.
Si está comenzando un nuevo proyecto, simplemente clone Capy-Plate y siga las instrucciones de compilación.
De lo contrario o para obtener más información, busque en los documentos.
Puede hacer preguntas y recibir actualizaciones en el canal #Capy-UI Matrix.
Una aplicación simple usando Capy:
const capy = @import ( "capy" );
const std = @import ( "std" );
pub usingnamespace capy . cross_platform ;
pub fn main () ! void {
try capy . init ();
var window = try capy . Window . init ();
try window . set (
capy . column (.{ . spacing = 10 }, .{ // have 10px spacing between each column's element
capy . row (.{ . spacing = 5 }, .{ // have 5px spacing between each row's element
capy . button (.{ . label = "Save" , . onclick = @ptrCast ( & buttonClicked ) }),
capy . button (.{ . label = "Run" , . onclick = @ptrCast ( & buttonClicked ) })
}),
// 'expanded' means the widget will take all the space it can
// in the parent container
capy . expanded (
capy . textArea (.{ . text = "Hello World!" })
)
})
);
window . setPreferredSize ( 800 , 600 );
window . show ();
capy . runEventLoop ();
}
fn buttonClicked ( button : * capy.Button ) ! void {
std . log . info ( "You clicked the button with text {s}" , .{ button . getLabel ()});
} Es fácil agregar algo como un botón o un área de texto. El ejemplo ya se puede usar para notar que los parámetros de un widget generalmente están encerrados en estructuras anónimas ( .{ .label = "Save" } ). También puede ver que simplemente envolver un widget con capy.Expanded( ... ) le dirá que tome todo el espacio que pueda.
Contribuir puede ser tan simple como abrir un problema y detener el error que encontró o qué característica desea tener.
Si desea ayudar al proyecto más directamente, puede desembolsar el proyecto y luego crear una solicitud de extracción.
Una plataforma se considera compatible solo si se puede construir a partir de cualquier otro sistema operativo.
Leyendas:
✅ Windows x86_64
✅ Windows i386
? MacOS M1
? macOS x86_64
✅ Linux x86_64
✅ Linux i386
✅ Linux Aarch64 (PinePhone, Pinebook ...)
✅ FreeBSD x86_64
? Androide
? iOS
✅ WebAssembly
Nota: Como no hay una biblioteca de GUI "oficial" para Linux, GTK 4 se ha elegido ya que es la que funciona y puede configurarse en la mayor cantidad de distribuciones. También es la razón por la que Libadwaita no se adoptará, ya que está destinado a gnomo y gnomo solo al no permitir el estilo y la integración con otros DES.
Por ahora, no todas las plataformas admiten los mismos componentes. Así que aquí hay una lista de los que son compatibles:
| Win32 | macosa | Gtk | Androide | wasm | |
|---|---|---|---|---|---|
| Botón | ✅ | ✅ | ✅ | ✅ | ✅ |
| Lienzo | ✅ | ✅ | ✅ | ||
| Caja | ✅ | ✅ | |||
| Desplegable | ✅ | ✅ | |||
| Imagen | ✅ | ✅ | |||
| Etiqueta | ✅ | ✅ | ✅ | ✅ | ✅ |
| Menú | |||||
| Navegación | |||||
| Navegación | ✅ | ||||
| Desplazable | ✅ | ✅ | |||
| Control deslizante | ✅ | ✅ | ✅ | ||
| Cortina a la italiana | ✅ | ✅ | |||
| Textea | ✅ | ✅ | |||
| Campo de texto | ✅ | ✅ | ✅ | ✅ | |
| Ventana | ✅ | ✅ | ✅ | ✅ | ✅ |