На данный момент CAPY не готова к использованию в производстве, так как я все еще внося нарушающие изменения
CAPY Targets Zig версии 0.14.0-dev.1911+3bf89f55c / 2024.10.0-mach (номинированные Zig версии) , он не работает на Zig 0.13.0
CAPY - это библиотека GUI для Zig . В основном он предназначен для создания приложений с использованием собственных элементов управления из операционной системы. CAPY - это декларативная библиотека пользовательского интерфейса, стремясь быть легко написать и универсальную.
Это было сделано с целью расширения возможностей автономных приложений пользовательского интерфейса, интеграция в игры или любой другой процесс рендеринга-это нецелевая.
Если вы начинаете новый проект, просто клонируйте Capy-Template и следуйте инструкциям по сборке.
В противном случае или для получения дополнительной информации, пожалуйста, посмотрите в документы.
Вы можете задать вопросы и получать обновления на канале #CAPY-UI Matrix.
Простое приложение с помощью 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 (Pinephone, Pinebook ...)
✅ freebsd x86_64
? Android
? ios
✅ Webassembly
Примечание. Поскольку нет «официальной» библиотеки GUI для Linux, GTK 4 был выбран, поскольку он работает и может быть настроен на наибольшее количество дистрибутов. Это также причина, по которой Libadwaita не будет принята, так как это предназначено для гнома и гнома только путем непрерывного стиля и интеграции с другими DES.
На данный момент не каждая платформа поддерживает одни и те же компоненты. Итак, вот список тех, кто поддерживается:
| Win32 | macOS | GTK | Android | Wasm | |
|---|---|---|---|---|---|
| Кнопка | ✅ | ✅ | ✅ | ✅ | ✅ |
| Холст | ✅ | ✅ | ✅ | ||
| Флажок | ✅ | ✅ | |||
| Падать | ✅ | ✅ | |||
| Изображение | ✅ | ✅ | |||
| Этикетка | ✅ | ✅ | ✅ | ✅ | ✅ |
| Меню | |||||
| Навигация | |||||
| NavigationIdebar | ✅ | ||||
| Закручивается | ✅ | ✅ | |||
| Слайдер | ✅ | ✅ | ✅ | ||
| Вкладки | ✅ | ✅ | |||
| Textarea | ✅ | ✅ | |||
| Текстовое поле | ✅ | ✅ | ✅ | ✅ | |
| Окно | ✅ | ✅ | ✅ | ✅ | ✅ |