Crystal-lang bindings for libui, a GUI library for Linux, OS X and Windows.
(well, forget about Windows for now, this is Crystal)
- Sync'd to upstream #5fa7ba4
- Updated for Crystal 0.21.1
- Sync'd to upstream #6e45859
- Control Gallery not updated, but yml examples were
- Proper component stretching and margins
- Waiting for tables definition to materialize
- Now with YAML builder
- Sync'd to upstream #9656a81
- Control Gallery example not updated but library is.
Add these package to your dependencies in shard.yml:
dependencies: libui: github: fusion/libui.cr
Standard (C-like) usage
Have a look at examples/controlgallery, which is a direct port of a C example.
Crystal-only YAML builder
This is a feature I am introducing in addition to the library bindings. It allows devs to specify a UI without hard coding it and maintain it using fragments described in simple .yml files.
- No need to recompile your code to test a UI change
- Team collaboration now easier
- Descriptive UI
- Separation of concerns
- No compile-time checks
Note that inflating fragments and pure coding can be mixed.
CUI.menubar "path_to_yml_file" CUI.inflate "path_to_yml_file" CUI.get/CUI.get! CUI.get_as_menuitem/CUI.get_as_menuitem! CUI.get_mainwindow/CUI.get_mainwindow!
The '!' forms will throw an exception if component is not found.
Recent versions of Crystal now require you to include the current path explicitly to find libraries:
crystal build --link-flags "-L$(pwd)" examples/controlgallery/main.cr crystal build --link-flags "-L$(pwd)" examples/crgallery/crgallery.cr
If you omit this flag, libui.A.dylib or libui.so (system-specific) will not be found.
Note: in this example, I used the current directory but it could be
-L/usr/local/includes or any
other location depending on your setup.
To run the generated binaries:
LD_LIBRARY_PATH=. ./main LD_LIBRARY_PATH=. ./crgallery
- Fork it ( https://github.com/fusion/libui.cr/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
- [fusion] Chris F Ravenscroft - creator, maintainer