path: root/nuklear/Readme.md
diff options
Diffstat (limited to 'nuklear/Readme.md')
1 files changed, 111 insertions, 0 deletions
diff --git a/nuklear/Readme.md b/nuklear/Readme.md
new file mode 100644
index 0000000..29d56d3
--- /dev/null
+++ b/nuklear/Readme.md
@@ -0,0 +1,111 @@
+[![Build Status](https://travis-ci.org/vurtun/nuklear.svg)](https://travis-ci.org/vurtun/nuklear)
+# Nuklear
+This is a minimal state immediate mode graphical user interface 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 renderbackend 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.
+## Features
+- Immediate mode graphical user interface toolkit
+- Single header library
+- Written in C89 (ANSI C)
+- Small codebase (~15kLOC)
+- Focus on portability, efficiency and simplicity
+- No dependencies (not even the standard library if not wanted)
+- Fully skinnable and customizable
+- Low memory footprint with total memory control if needed or wanted
+- UTF-8 support
+- No global or hidden state
+- Customizable library modules (you can compile and use only what you need)
+- Optional font baker and vertex buffer output
+## Building
+This library is self contained in one single header file and can be used either
+in header only mode or in implementation mode. The header only mode is used
+by default when included and allows including this header in other headers
+and does not contain the actual implementation.
+The implementation mode requires to define the preprocessor macro
+`NK_IMPLEMENTATION` in *one* .c/.cpp file before `#include`ing this file, e.g.:
+#include "nuklear.h"
+IMPORTANT: Every time you include "nuklear.h" you have to define the same optional flags.
+This is very important not doing it either leads to compiler errors or even worse stack corruptions.
+## Gallery
+## Example
+/* init gui state */
+struct nk_context ctx;
+nk_init_fixed(&ctx, calloc(1, MAX_MEMORY), MAX_MEMORY, &font);
+enum {EASY, HARD};
+int op = EASY;
+float value = 0.6f;
+int i = 20;
+if (nk_begin(&ctx, "Show", nk_rect(50, 50, 220, 220),
+ /* fixed widget pixel width */
+ nk_layout_row_static(&ctx, 30, 80, 1);
+ if (nk_button_label(&ctx, "button")) {
+ /* event handling */
+ }
+ /* fixed widget window ratio width */
+ nk_layout_row_dynamic(&ctx, 30, 2);
+ if (nk_option_label(&ctx, "easy", op == EASY)) op = EASY;
+ if (nk_option_label(&ctx, "hard", op == HARD)) op = HARD;
+ /* custom widget pixel width */
+ nk_layout_row_begin(&ctx, NK_STATIC, 30, 2);
+ {
+ nk_layout_row_push(&ctx, 50);
+ nk_label(&ctx, "Volume:", NK_TEXT_LEFT);
+ nk_layout_row_push(&ctx, 110);
+ nk_slider_float(&ctx, 0, &value, 1.0f, 0.1f);
+ }
+ nk_layout_row_end(&ctx);
+## Bindings:
+Java: https://github.com/glegris/nuklear4j
+Golang: https://github.com/golang-ui/nuklear
+Rust: https://github.com/snuk182/nuklear-rust
+## Credits:
+Developed by Micha Mettke and every direct or indirect contributor to the GitHub.
+Embeds `stb_texedit`, `stb_truetype` and `stb_rectpack` by Sean Barret (public domain)
+Embeds `ProggyClean.ttf` font by Tristan Grimmer (MIT license).
+Big thank you to Omar Cornut (ocornut@github) for his [imgui](https://github.com/ocornut/imgui) library and
+giving me the inspiration for this library, Casey Muratori for handmade hero
+and his original immediate mode graphical user interface idea and Sean
+Barret for his amazing single header [libraries](https://github.com/nothings/stb) which restored my faith
+in libraries and brought me to create some of my own.
+## License:
+This software is dual-licensed to the public domain and under the following
+license: you are granted a perpetual, irrevocable license to copy, modify,
+publish and distribute this file as you see fit.