This project provides Go bindings for nuklear.h — a small ANSI C GUI library.
Package nk provides Go bindings for nuklear.h — a small ANSI C gui library. See github.com/vurtun/nuklear.
All the binding code has automatically been generated with rules defined in nk.yml.
There is no idiomatic wrapper package that will make things easier to use, but the original API is pretty straightforward. The nk
package is fine for the start, then we’ll figure out something better that just a wrapper.
This is a minimal state immediate mode graphical user interface single header
toolkit written in ANSI C and licensed under public domain.
It was designed as a simple embeddable user interface for application and does
not have any dependencies, a default render backend or OS window and input handling
but instead provides a very modular library approach by using simple input state
for input and draw commands describing primitive shapes as output.
So instead of providing a layered library that tries to abstract over a number
of platform and render backends it only focuses on the actual UI.
Your Go application runs a loop where it handles input from the platform and manages the rendering backend. It uses Nuklear API bindings (the nk
package) to run UI commands for layout and event handling. Nuklear maintains a draw command list that is consumed by one of the rendering backends so the UI is displayed. In this case, a C program is being a middleman that does all the UI heavylifting for us, so we can focus on the application logic, event handling and drawing backends in Go.
Supported platforms are:
The desktop support is achieved using GLFW and there are backends written in Go for OpenGL 2.1 and OpenGL 3.2. Thanks to strangebroadcasts it also has SDL2 support now.
Android support is added using the android-go project, there is a corresponding backend for OpenGL ES 2.0 or 3.0 surface and input handling logic. Sophisticated things like scroll gestures will be added later.
Debian/Ubuntu dependencies: (Header files required for GLFW)
# apt install xorg-dev
Fedora(tested on 28):
# libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel mesa-libGL-devel libXi-devel
After that, standard go get
should work:
$ go get github.com/golang-ui/nuklear/nk
On desktop both OpenGL 2.1 and OpenGL 3.2 contexts are working fine, but by default OpenGL 3.2-core is used, to compile with OpenGL 2.1 support instead. The 2.1 backend is for legacy hardware or VMs like Parallels.
$ go get -tags opengl2 github.com/golang-ui/nuklear/nk
Additional steps for Windows users:
C:\MinGW\msys\1.0\msys.bat
);Then everything should go smooth.
$ go version
go version go1.6.2 windows/386
$ gcc -v
COLLECT_GCC=C:\MinGW\bin\gcc.exe
Thread model: posix
gcc version 5.3.0 (GCC)
$ go install github.com/golang-ui/nuklear/nk
Hint: use -tags sdl2
to run with SDL2 instead of GLFW. SDL2 requires additional installation process, see SDL2. Use GLFW if you want to stay go-get-able.
In order run Android demo app nk-android make sure that you’ve prepared your environent as described in plain example Android app. Namely you need to install Android SDK, tools and run make toolchain
:
$ cd $GOPATH/src/github.com/golang-ui/nuklear/cmd/nk-android
$ make toolchain # need to run once
# the regular routine:
$ make
$ make install
$ make listen
There is an example app nk-example that shows the usage of Nuklear GUI library, based on the official demos.
$ go get github.com/golang-ui/nuklear/cmd/nk-example
$ nk-example
2016/09/23 23:13:09 glfw: created window 400x500
2016/09/23 23:13:10 [INFO] button pressed!
2016/09/23 23:13:10 [INFO] button pressed!
2016/09/23 23:13:10 [INFO] button pressed!
Another more realistic Go application that uses Nuklear to do its GUI, a simple WebM player:
You will need to get the c-for-go tool installed first.
$ git clone https://github.com/golang-ui/nuklear && cd nuklear
$ make clean
$ make
You can download and install nuklear using the vcpkg dependency manager:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install nuklear
The nuklear port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please create an issue or pull request on the vcpkg repository.
All the code except when stated otherwise is licensed under the MIT license.
Nuklear (ANSI C version) is in public domain, authored from 2015-2016 by Micha Mettke.