mirror of
https://github.com/libretro/RetroArch
synced 2025-02-19 03:40:59 +00:00
90 lines
3.4 KiB
Markdown
90 lines
3.4 KiB
Markdown
|
# Zahnrad
|
||
|
[](https://scan.coverity.com/projects/5863)
|
||
|
|
||
|
This is a minimal state immediate mode graphical user interface toolkit
|
||
|
written in ANSI C and licensed under zlib. It was designed as a simple embeddable user interface for
|
||
|
application and does not have any direct 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
|
||
|
- Written in C89 (ANSI C)
|
||
|
- Small codebase (~9kLOC)
|
||
|
- Focus on portability, efficiency and simplicity
|
||
|
- No dependencies (not even the standard library)
|
||
|
- No global or hidden state
|
||
|
- Configurable style and colors
|
||
|
- UTF-8 support
|
||
|
|
||
|
## Optional
|
||
|
- Vertex buffer output
|
||
|
- Font handling
|
||
|
|
||
|
## Building
|
||
|
The library is self-contained within four different files that only have to be
|
||
|
copied and compiled into your application. Files zahnrad.c and zahnrad.h make up
|
||
|
the core of the library, while stb_rect_pack.h and stb_truetype.h are
|
||
|
for a optional font handling implementation and can be removed if not needed.
|
||
|
- zahnrad.c
|
||
|
- zahnrad.h
|
||
|
- stb_rect_pack.h (optional)
|
||
|
- stb_truetype.h (optional)
|
||
|
|
||
|
There are no dependencies or a particular building process required. You just have
|
||
|
to compile the .c file and #include zahnrad.h into your project. To actually
|
||
|
run you have to provide the input state, configuration style and memory
|
||
|
for draw commands to the library. After the GUI was executed all draw commands
|
||
|
have to be either executed or optionally converted into a vertex buffer to
|
||
|
draw the GUI.
|
||
|
|
||
|
## Gallery
|
||
|

|
||
|

|
||
|

|
||
|

|
||
|
|
||
|
## Example
|
||
|
```c
|
||
|
/* init gui state */
|
||
|
struct zr_context ctx;
|
||
|
zr_init_fixed(&ctx, calloc(1, MAX_MEMORY), MAX_MEMORY, &font);
|
||
|
|
||
|
enum {EASY, HARD};
|
||
|
int op = EASY;
|
||
|
float value = 0.6f;
|
||
|
int i = 20;
|
||
|
|
||
|
struct zr_layout layout;
|
||
|
zr_begin(&ctx, &layout, "Show", zr_rect(50, 50, 220, 220),
|
||
|
ZR_WINDOW_BORDER|ZR_WINDOW_MOVEABLE|ZR_WINDOW_CLOSEABLE);
|
||
|
{
|
||
|
/* fixed widget pixel width */
|
||
|
zr_layout_row_static(&ctx, 30, 80, 1);
|
||
|
if (zr_button_text(&ctx, "button", ZR_BUTTON_DEFAULT)) {
|
||
|
/* event handling */
|
||
|
}
|
||
|
|
||
|
/* fixed widget window ratio width */
|
||
|
zr_layout_row_dynamic(&ctx, 30, 2);
|
||
|
if (zr_option(&ctx, "easy", op == EASY)) op = EASY;
|
||
|
if (zr_option(&ctx, "hard", op == HARD)) op = HARD;
|
||
|
|
||
|
/* custom widget pixel width */
|
||
|
zr_layout_row_begin(&ctx, ZR_STATIC, 30, 2);
|
||
|
{
|
||
|
zr_layout_row_push(&ctx, 50);
|
||
|
zr_label(&ctx, "Volume:", ZR_TEXT_LEFT);
|
||
|
zr_layout_row_push(&ctx, 110);
|
||
|
zr_slider_float(&ctx, 0, &value, 1.0f, 0.1f);
|
||
|
}
|
||
|
zr_layout_row_end(&ctx);
|
||
|
}
|
||
|
zr_end(ctx);
|
||
|
```
|
||
|

|
||
|
|