截至目前,Capy還沒有準備好用於生產,因為我仍在進行破壞
Capy Targets Zig版本0.14.0-dev.1911+3bf89f55c / 2024.10.0-mach (提名的Zig版本) ,它在Zig 0.13.0上無效
Capy是Zig的GUI圖書館。它主要用於使用操作系統的本機控件創建應用程序。 CAPY是一個聲明性的UI庫,旨在易於編寫和多功能。
它的目標是授權獨立的UI應用程序,遊戲中的集成或任何其他渲染過程是無目標的。
如果您要啟動一個新項目,只需克隆Capy-Template並遵循構建說明。
否則或有關更多信息,請在文檔中查看。
您可以提出問題並在#Capy-UI矩陣頻道上接收更新。
使用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 ()});
}添加按鈕或文本區域之類的東西很容易。該示例已經可以用來注意一個小部件的參數通常包含在匿名結構中( .{ .label = "Save" } )。您還可以看到,簡單地用capy.Expanded( ... )將小部件包裹起來會告訴它佔用所有可能的空間。
貢獻可以像打開問題並確定遇到的錯誤或想要擁有的功能一樣簡單。
如果您想更直接地幫助項目,則可以分叉該項目,然後創建一個拉請請求。
僅當平台可以從其他所有操作系統中構建時,才被視為支持。
傳奇:
Windows X86_64
Windows I386
? MacOS M1
? MacOS X86_64
✅linux x86_64
✅linux i386
✅linux aarch64(松樹,松木...)
✅freeBSD X86_64
?安卓
? ios
✅Websembly
注意:由於沒有針對Linux的“官方” GUI庫,因此選擇了GTK 4,因為它是在大多數發行版上進行配置的gui庫。這也是Libadwaita不會被採用的原因,因為它僅通過與其他DES的造型和集成來適合Gnome和Gnome。
目前,並非每個平台都支持相同的組件。因此,這是支持的清單:
| Win32 | macos | GTK | 安卓 | WASM | |
|---|---|---|---|---|---|
| 按鈕 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 帆布 | ✅ | ✅ | ✅ | ||
| 複選框 | ✅ | ✅ | |||
| 下拉 | ✅ | ✅ | |||
| 圖像 | ✅ | ✅ | |||
| 標籤 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 菜單 | |||||
| 導航 | |||||
| navigationsidebar | ✅ | ||||
| 可滾動 | ✅ | ✅ | |||
| 滑桿 | ✅ | ✅ | ✅ | ||
| 選項卡 | ✅ | ✅ | |||
| Textarea | ✅ | ✅ | |||
| Textfield | ✅ | ✅ | ✅ | ✅ | |
| 窗戶 | ✅ | ✅ | ✅ | ✅ | ✅ |