À partir de maintenant, Capy n'est pas prêt à être utilisé en production car je fais toujours des changements de rupture
Capy Targets Zig Version 0.14.0-dev.1911+3bf89f55c / 2024.10.0-mach (versions en zig nominées) , il ne fonctionne pas sur le zig 0.13.0
Capy est une bibliothèque GUI pour le zig . Il est principalement destiné à créer des applications à l'aide de contrôles natifs à partir du système d'exploitation. Capy est une bibliothèque d'interface utilisateur déclarative visant à être facile à écrire et polyvalent.
Il a été réalisé dans le but de permettre aux applications autonomes autonomes, l'intégration dans les jeux ou tout autre processus de rendu est un non-objectif.
Si vous commencez un nouveau projet, clonez simplement Capy-Template et suivez les instructions de construction.
Sinon ou pour plus d'informations, veuillez consulter les documents.
Vous pouvez poser des questions et recevoir des mises à jour sur la chaîne Matrix # Capy-UI.
Une application simple utilisant 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 ()});
} Il est facile d'ajouter quelque chose comme un bouton ou une zone de texte. L'exemple peut déjà être utilisé pour remarquer que les paramètres d'un widget sont généralement enfermés dans des structures anonymes ( .{ .label = "Save" } ). Vous pouvez également voir que simplement envelopper un widget avec capy.Expanded( ... ) lui dira de prendre tout l'espace possible.
La contribution peut être aussi simple que d'ouvrir un problème et de détacher le bug que vous avez rencontré ou la fonctionnalité que vous souhaitez avoir.
Si vous souhaitez aider le projet plus directement, vous pouvez débarquer le projet, puis créer une demande de traction.
Une plate-forme est considérée comme prise en charge uniquement si elle peut être construite à partir de tous les autres systèmes d'exploitation.
Légendes:
✅ Windows x86_64
✅ Windows I386
? macOS M1
? macOS x86_64
✅ Linux x86_64
✅ Linux i386
✅ Linux Aarch64 (Pinephone, Pinebook ...)
✅ FreeBSD x86_64
? Androïde
? ios
✅ WebAssembly
Remarque: Comme il n'y a pas de bibliothèque GUI "officielle" pour Linux, GTK 4 a été choisi car c'est celui qui fonctionne et peut être configuré sur le plus de distros. C'est aussi la raison pour laquelle Libadwaita ne sera pas adopté, car il est destiné à gnome et gnome uniquement en interdisant le style et l'intégration avec d'autres DES.
Pour l'instant, toutes les plateformes ne prennent pas en charge les mêmes composants. Voici donc une liste de celles qui sont prises en charge:
| win32 | macos | Gtk | Androïde | wasm | |
|---|---|---|---|---|---|
| Bouton | ✅ | ✅ | ✅ | ✅ | ✅ |
| Toile | ✅ | ✅ | ✅ | ||
| Cocher | ✅ | ✅ | |||
| Dérouler | ✅ | ✅ | |||
| Image | ✅ | ✅ | |||
| Étiquette | ✅ | ✅ | ✅ | ✅ | ✅ |
| Menu | |||||
| Navigation | |||||
| Navigations auside | ✅ | ||||
| Défilable | ✅ | ✅ | |||
| Curseur | ✅ | ✅ | ✅ | ||
| Onglets | ✅ | ✅ | |||
| Textarea | ✅ | ✅ | |||
| Champ de texte | ✅ | ✅ | ✅ | ✅ | |
| Fenêtre | ✅ | ✅ | ✅ | ✅ | ✅ |