Full Code of RobLoach/raylib-nuklear for AI

master b3eb62608c94 cached
20 files
1.2 MB
351.7k tokens
2348 symbols
1 requests
Download .txt
Showing preview only (1,314K chars total). Download the full file or copy to clipboard to get everything.
Repository: RobLoach/raylib-nuklear
Branch: master
Commit: b3eb62608c94
Files: 20
Total size: 1.2 MB

Directory structure:
gitextract_0l_orq51/

├── .editorconfig
├── .gitignore
├── .gitmodules
├── CMakeLists.txt
├── LICENSE
├── README.md
├── examples/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── minshell.html
│   ├── raylib-nuklear-demo.c
│   ├── raylib-nuklear-example.c
│   ├── raylib-nuklear-font-default.c
│   ├── raylib-nuklear-font.c
│   └── raylib-nuklear-texture.c
├── include/
│   ├── CMakeLists.txt
│   ├── nuklear.h
│   └── raylib-nuklear.h
└── test/
    ├── CMakeLists.txt
    ├── raylib-assert.h
    └── raylib-nuklear-test.c

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
indent_style = space
charset = utf-8
end_of_line = lf
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true


================================================
FILE: .gitignore
================================================
build
.vscode


================================================
FILE: .gitmodules
================================================
[submodule "vendor/nuklear"]
	path = vendor/nuklear
	url = https://github.com/Immediate-Mode-UI/Nuklear.git
    ignore = dirty
    branch = master


================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.11)
project(raylib_nuklear
    DESCRIPTION "raylib_nuklear: Nuklear immediate mode GUI for raylib."
    HOMEPAGE_URL "https://github.com/robloach/raylib-nuklear"
    VERSION 6.0.1
    LANGUAGES C
)

# raylib-nuklear
add_subdirectory(include)

# Options
if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
    set(RAYLIB_NUKLEAR_IS_MAIN TRUE)
else()
    set(RAYLIB_NUKLEAR_IS_MAIN FALSE)
endif()
option(RAYLIB_NUKLEAR_BUILD_EXAMPLES "Examples" ${RAYLIB_NUKLEAR_IS_MAIN})

# Examples
if (RAYLIB_NUKLEAR_BUILD_EXAMPLES)
    add_subdirectory(examples)

    # Testing
    include(CTest)
    enable_testing()
    if (BUILD_TESTING)
        # set(CTEST_CUSTOM_TESTS_IGNORE
        #     pkg-config--static
        # )
        # Always print verbose output when tests fail if run using `make test`.
        list(APPEND CMAKE_CTEST_ARGUMENTS "--output-on-failure")
        add_subdirectory(test)
    endif()
endif()


================================================
FILE: LICENSE
================================================
Copyright (c) 2026 Rob Loach (@RobLoach)

This software is provided "as-is", without any express or implied warranty. In no event
will the authors be held liable for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any purpose, including commercial
applications, and to alter it and redistribute it freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not claim that you
  wrote the original software. If you use this software in a product, an acknowledgment
  in the product documentation would be appreciated but is not required.

  2. Altered source versions must be plainly marked as such, and must not be misrepresented
  as being the original software.

  3. This notice may not be removed or altered from any source distribution.


================================================
FILE: README.md
================================================
# raylib-nuklear

Use the [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) immediate mode cross-platform GUI library in [raylib](https://www.raylib.com/).

[![raylib-nuklear-example Screenshot](examples/raylib-nuklear-example.png)](examples)

## Usage

1. Since this is a header-only library, you must first define `RAYLIB_NUKLEAR_IMPLEMENTATION` in one of your `.c` files...
    ``` c
    #define RAYLIB_NUKLEAR_IMPLEMENTATION
    ```
2. Include the [`raylib-nuklear.h`](include/raylib-nuklear.h) file...
    ``` c
    #include "path/to/raylib-nuklear.h"
    ```
3. Use `InitNuklear(fontSize)` or `InitNuklearEx(font, fontSize)` to create the nuklear context...
    ``` c
    struct nk_context *ctx = InitNuklear(10);
    ```
4. Build your Nuklear GUI through the standard [Nuklear API](https://github.com/Immediate-Mode-UI/Nuklear/wiki/Window)
5. Update the input for the GUI using `UpdateNuklear(ctx)`
6. Render the context using `DrawNuklear(ctx)`
7. Destroy the nuklear context with `UnloadNuklear(ctx)`

## Example

``` c
#define RAYLIB_NUKLEAR_IMPLEMENTATION
#include "raylib-nuklear.h"

int main() {
    InitWindow(640, 480, "raylib-nuklear example");

    // Create the Nuklear Context
    int fontSize = 10;
    struct nk_context *ctx = InitNuklear(fontSize);

    while (!WindowShouldClose()) {
        // Update the Nuklear context, along with input
        UpdateNuklear(ctx);

        // Nuklear GUI Code
        // https://github.com/Immediate-Mode-UI/Nuklear/wiki/Window
        if (nk_begin(ctx, "Nuklear", nk_rect(100, 100, 220, 220),
                NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_CLOSABLE)) {
            nk_layout_row_static(ctx, 50, 150, 1);
            if (nk_button_label(ctx, "Button")) {
                // Button was clicked!
            }
        }
        nk_end(ctx);

        // Render
        BeginDrawing();
            ClearBackground(RAYWHITE);

            // Render the Nuklear GUI
            DrawNuklear(ctx);

        EndDrawing();
    }

    // De-initialize the Nuklear GUI
    UnloadNuklear(ctx);

    CloseWindow();
    return 0;
}
```

## API

``` c
struct nk_context* InitNuklear(int fontSize);                // Initialize the Nuklear GUI context using raylib's font
struct nk_context* InitNuklearEx(Font font, float fontSize); // Initialize the Nuklear GUI context, with a custom font
bool IsNuklearValid(struct nk_context* ctx);                 // Check if the Nuklear context is valid
Font LoadFontFromNuklear(int fontSize);                      // Loads the default Nuklear font
void UpdateNuklear(struct nk_context* ctx);                 // Update the input state and internal components for Nuklear
void UpdateNuklearEx(struct nk_context* ctx, float deltaTime); // Update the input state and internal components for Nuklear, with a custom frame time
void DrawNuklear(struct nk_context* ctx);                   // Render the Nuklear GUI on the screen
void UnloadNuklear(struct nk_context* ctx);                 // Deinitialize the Nuklear context
struct nk_color ColorToNuklearColor(Color color);                 // Convert a raylib Color to a Nuklear color object
struct nk_colorf ColorToNuklearColorF(Color color);               // Convert a raylib Color to a Nuklear floating color
struct Color NuklearColorToColor(struct nk_color color);        // Convert a Nuklear color to a raylib Color
struct Color NuklearColorFToColor(struct nk_colorf color);      // Convert a Nuklear floating color to a raylib Color
struct Rectangle NuklearRectToRectangle(struct nk_context* ctx, struct nk_rect rect); // Convert a Nuklear rectangle to a raylib Rectangle
struct nk_rect RectangleToNuklearRect(struct nk_context* ctx, Rectangle rect); // Convert a raylib Rectangle to a Nuklear Rectangle
struct nk_image TextureToNuklearImage(Texture tex);               // Get a Nuklear image from a Texture
void SetNuklearScaling(struct nk_context * ctx, float scaling); // Sets the scaling for the given Nuklear context
float GetNuklearScaling(struct nk_context * ctx);            // Retrieves the scaling of the given Nuklear context
```

See the [Nuklear API documenation](https://immediate-mode-ui.github.io/Nuklear/doc/nuklear.html) for more how to use Nuklear.

## Comparision

There are a few other graphical user interface solutions out there for use with raylib. [raygui](https://github.com/raysan5/raygui), [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear), and [ImGui](https://github.com/ocornut/imgui) with [rlImGui](https://github.com/raylib-extras/rlImGui), are popular choices. It's best to choose the GUI that fits your needs best. Generally, if you're unsure which GUI to use with raylib, use [raygui](https://github.com/raysan5/raygui).

| | [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) | [raygui](https://github.com/raysan5/raygui) | [rlImGui](https://github.com/raylib-extras/rlImGui) |
| ----- |:-------:|:------:|:-----:|
| Only C | :white_check_mark: | :white_check_mark: | C++ |
| Minimal Dependencies |  :white_check_mark: |  :white_check_mark: | :x: |
| Automatic Layouts | :white_check_mark: | :x: | :white_check_mark: |
| Advanced Controls | :white_check_mark: | :x: | :white_check_mark: |
| Documentation | :white_check_mark: | :x: | :white_check_mark: |
| Industry Standard | :x: | :x: | :white_check_mark: |
| Easy to Use | :x: | :white_check_mark: | :x: |

## Development

While this project uses CMake, CMake is not required in order to use *raylib-nuklear*.

```
git submodule update --init
mkdir build
cd build
cmake ..
make
./example/raylib-nuklear-example
make test
```

## License

*raylib-nuklear* is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE) for further details.


================================================
FILE: examples/CMakeLists.txt
================================================
# raylib
find_package(raylib QUIET)
if (NOT raylib_FOUND)
    include(FetchContent)
        FetchContent_Declare(
        raylib
        GIT_REPOSITORY https://github.com/raysan5/raylib.git
        GIT_TAG 6.0
        GIT_SHALLOW 1
    )
    FetchContent_GetProperties(raylib)
    if (NOT raylib_POPULATED) # Have we downloaded raylib yet?
        set(FETCHCONTENT_QUIET NO)
        FetchContent_Populate(raylib)
        set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
        set(BUILD_GAMES    OFF CACHE BOOL "" FORCE)
        add_subdirectory(${raylib_SOURCE_DIR} ${raylib_BINARY_DIR})
    endif()
endif()

# raylib-nuklear-example
add_executable(raylib-nuklear-example
    raylib-nuklear-example.c
)
target_link_libraries(raylib-nuklear-example PUBLIC
    raylib
    raylib_nuklear
)

# raylib-nuklear-demo
add_executable(raylib-nuklear-demo
    raylib-nuklear-demo.c
)
target_link_libraries(raylib-nuklear-demo PUBLIC
    raylib
    raylib_nuklear
)

# raylib-nuklear-font
add_executable(raylib-nuklear-font
    raylib-nuklear-font.c
)
target_link_libraries(raylib-nuklear-font PUBLIC
    raylib
    raylib_nuklear
)

# raylib-nuklear-font
add_executable(raylib-nuklear-font-default
    raylib-nuklear-font-default.c
)
target_link_libraries(raylib-nuklear-font-default PUBLIC
    raylib
    raylib_nuklear
)

# raylib-nuklear-texture
add_executable(raylib-nuklear-texture
    raylib-nuklear-texture.c
)
target_link_libraries(raylib-nuklear-texture PUBLIC
    raylib
    raylib_nuklear
)

# Target C99
set_property(TARGET raylib-nuklear-example PROPERTY C_STANDARD 99)
set_property(TARGET raylib-nuklear-demo PROPERTY C_STANDARD 99)
set_property(TARGET raylib-nuklear-font PROPERTY C_STANDARD 99)
set_property(TARGET raylib-nuklear-texture PROPERTY C_STANDARD 99)

# Enable warnings
if(MSVC)
  target_compile_options(raylib-nuklear-example PRIVATE /W4 /WX)
  target_compile_options(raylib-nuklear-demo PRIVATE /W4 /WX)
  target_compile_options(raylib-nuklear-font PRIVATE /W4 /WX)
  target_compile_options(raylib-nuklear-texture PRIVATE /W4 /WX)
else()
  target_compile_options(raylib-nuklear-example PRIVATE -Wall -Wextra -Wpedantic -Werror)
  target_compile_options(raylib-nuklear-demo PRIVATE -Wall -Wextra -Wpedantic -Werror)
  target_compile_options(raylib-nuklear-font PRIVATE -Wall -Wextra -Wpedantic -Werror)
  target_compile_options(raylib-nuklear-texture PRIVATE -Wall -Wextra -Wpedantic -Werror)
endif()

# Resources
configure_file(resources/anonymous_pro_bold.ttf resources/anonymous_pro_bold.ttf COPYONLY)
configure_file(resources/test-image.png resources/test-image.png COPYONLY)

# Web Configurations
#if (${PLATFORM} STREQUAL "Web")
if (EMSCRIPTEN)
    # Tell Emscripten to build an example.html file.
    set_target_properties(raylib-nuklear-demo PROPERTIES SUFFIX ".html")
    set_target_properties(raylib-nuklear-demo PROPERTIES OUTPUT_NAME "index")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --shell-file ${CMAKE_CURRENT_SOURCE_DIR}/minshell.html")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s USE_GLFW=3")
    add_definitions(-DPLATFORM=Web)
    add_definitions(-DCMAKE_BUILD_TYPE=Release)
endif()


================================================
FILE: examples/LICENSE
================================================
Fonts used in examples are provided under a free and permissive license.
Check individual licenses for details:

 - [Anonymous Pro] by Mark Simonson - https://fonts.google.com/specimen/Anonymous+Pro


================================================
FILE: examples/minshell.html
================================================
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>raylib-nuklear: Demo</title>
    <meta name="description" content="Use Nuklear GUI within raylib: https://github.com/RobLoach/raylib-nuklear">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="author" content="Rob Loach">
    <style>
        html, body  {
            margin: 0;
            height: 100vh;
            max-width: 100vw;
        }
        body {
            display: flex;
            align-items: center;
            justify-content: center;
            flex-direction: column;
            color: white;
            background: black;
        }
        #console {
            overflow: auto;
        }
    </style>
</head>

<body>
    <canvas id="canvas" oncontextmenu="event.preventDefault()"></canvas>
    <!-- <pre id="console"></pre> -->
    <script type='text/javascript'>
        window.Module = {
            canvas: document.getElementById('canvas'),
            print: (...args) => {
                const consoleElement = document.getElementById('console')
                const text = args.join(' ')
                console.log(text);
                if (consoleElement) {
                  consoleElement.innerText += text + "\n"
                  consoleElement.scrollTop = consoleElement.scrollHeight
                }
            }
        }
    </script>
   {{{ SCRIPT }}}
</body>
</html>


================================================
FILE: examples/raylib-nuklear-demo.c
================================================
/* nuklear - 1.32.0 - public domain */
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdarg.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include <math.h>
#include <limits.h>
#include <time.h>

#include "raylib.h"

#if defined(PLATFORM_WEB)
    #include <emscripten/emscripten.h>
#endif

//#define NK_INCLUDE_FIXED_TYPES
//#define NK_INCLUDE_STANDARD_IO
#define NK_INCLUDE_STANDARD_VARARGS
//#define NK_INCLUDE_DEFAULT_ALLOCATOR
//#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT
//#define NK_INCLUDE_FONT_BAKING
//#define NK_INCLUDE_DEFAULT_FONT
#define RAYLIB_NUKLEAR_IMPLEMENTATION
#define RAYLIB_NUKLEAR_INCLUDE_DEFAULT_FONT
#include "raylib-nuklear.h"

#define WINDOW_WIDTH 1200
#define WINDOW_HEIGHT 800

/* ===============================================================
 *
 *                          EXAMPLE
 *
 * ===============================================================*/
/* This are some code examples to provide a small overview of what can be
 * done with this library. To try out an example uncomment the defines */
#define INCLUDE_ALL
/*#define INCLUDE_STYLE */
/*#define INCLUDE_CALCULATOR */
/*#define INCLUDE_CANVAS */
/*#define INCLUDE_OVERVIEW */
/*#define INCLUDE_NODE_EDITOR */

#ifdef INCLUDE_ALL
  //#define INCLUDE_STYLE
  #define INCLUDE_CALCULATOR
  #define INCLUDE_CANVAS
  #define INCLUDE_OVERVIEW
  //#define INCLUDE_NODE_EDITOR
#endif

#ifdef INCLUDE_STYLE
  #include "../vendor/nuklear/demo/style.c"
#endif
#ifdef INCLUDE_CALCULATOR
  #include "../vendor/nuklear/demo/common/calculator.c"
#endif
#ifdef INCLUDE_CANVAS
  #include "../vendor/nuklear/demo/common/canvas.c"
#endif
#ifdef INCLUDE_OVERVIEW
  #include "../vendor/nuklear/demo/common/overview.c"
#endif
#ifdef INCLUDE_NODE_EDITOR
  #include "../vendor/nuklear/demo/common/node_editor.c"
#endif

//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
struct nk_context *ctx;
struct nk_colorf bg;

//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void);     // Update and Draw one frame

//----------------------------------------------------------------------------------
// Main Entry Point
//----------------------------------------------------------------------------------
int main(void) {
    // Initialization
    //--------------------------------------------------------------------------------------
    SetConfigFlags(FLAG_WINDOW_RESIZABLE);
    InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "[raylib-nuklear] demo");

    // This example disables ESC so that we can make sure it's usable
    SetExitKey(KEY_NULL);
    SetTargetFPS(60);

    /* GUI */
    const int fontSize = 13;
    Font font = LoadFontFromNuklear(fontSize);
    ctx = InitNuklearEx(font, fontSize);
    bg.r = 0.10f, bg.g = 0.18f, bg.b = 0.24f, bg.a = 1.0f;

    /* style.c */
    #ifdef INCLUDE_STYLE
    /*set_style(ctx, THEME_WHITE);*/
    /*set_style(ctx, THEME_RED);*/
    /*set_style(ctx, THEME_BLUE);*/
    /*set_style(ctx, THEME_DARK);*/
    #endif

    //--------------------------------------------------------------------------------------

    // Main game loop
#if defined(PLATFORM_WEB)
    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
#else
    while (!WindowShouldClose())    // Detect window close button or ESC key
    {
        UpdateDrawFrame();
    }
#endif
    //--------------------------------------------------------------------------------------

    // De-Initialization
    //--------------------------------------------------------------------------------------
    UnloadNuklear(ctx);     // Unload the Nuklear GUI
    CloseWindow();
    //--------------------------------------------------------------------------------------

    return 0;
}


void UpdateDrawFrame(void) {
    /* Input */
    UpdateNuklear(ctx);

    /* GUI */
    if (nk_begin(ctx, "Demo", nk_rect(50, 50, 230, 250),
        NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE|
        NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE))
    {
        enum {EASY, HARD};
        static int op = EASY;
        static int property = 20;

        nk_layout_row_static(ctx, 30, 80, 1);
        if (nk_button_label(ctx, "button"))
            TraceLog(LOG_INFO, "button pressed!");
        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;
        nk_layout_row_dynamic(ctx, 22, 1);
        nk_property_int(ctx, "Compression:", 0, &property, 100, 10, 1);

        nk_layout_row_dynamic(ctx, 20, 1);
        nk_label(ctx, "background:", NK_TEXT_LEFT);
        nk_layout_row_dynamic(ctx, 25, 1);
        if (nk_combo_begin_color(ctx, nk_rgb_cf(bg), nk_vec2(nk_widget_width(ctx),400))) {
            nk_layout_row_dynamic(ctx, 120, 1);
            bg = nk_color_picker(ctx, bg, NK_RGBA);
            nk_layout_row_dynamic(ctx, 25, 1);
            bg.r = nk_propertyf(ctx, "#R:", 0, bg.r, 1.0f, 0.01f,0.005f);
            bg.g = nk_propertyf(ctx, "#G:", 0, bg.g, 1.0f, 0.01f,0.005f);
            bg.b = nk_propertyf(ctx, "#B:", 0, bg.b, 1.0f, 0.01f,0.005f);
            bg.a = nk_propertyf(ctx, "#A:", 0, bg.a, 1.0f, 0.01f,0.005f);
            nk_combo_end(ctx);
        }
    }

    nk_end(ctx);

    /* -------------- EXAMPLES ---------------- */
    #ifdef INCLUDE_CALCULATOR
        calculator(ctx);
    #endif
    #ifdef INCLUDE_CANVAS
        canvas(ctx);
    #endif
    #ifdef INCLUDE_OVERVIEW
        overview(ctx);
    #endif
    #ifdef INCLUDE_NODE_EDITOR
        node_editor(ctx);
    #endif
    /* ----------------------------------------- */

    /* Draw */
    BeginDrawing();
    {
        ClearBackground(NuklearColorFToColor(bg));
        DrawNuklear(ctx);
    }
    EndDrawing();
}


================================================
FILE: examples/raylib-nuklear-example.c
================================================
/**********************************************************************************************
*
*   raylib-nuklear-example - Example of using Nuklear with Raylib.
*
*   LICENSE: zlib/libpng
*
*   nuklear_raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified,
*   BSD-like license that allows static linking with closed source software:
*
*   Copyright (c) 2020 Rob Loach (@RobLoach)
*
*   This software is provided "as-is", without any express or implied warranty. In no event
*   will the authors be held liable for any damages arising from the use of this software.
*
*   Permission is granted to anyone to use this software for any purpose, including commercial
*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
*
*     1. The origin of this software must not be misrepresented; you must not claim that you
*     wrote the original software. If you use this software in a product, an acknowledgment
*     in the product documentation would be appreciated but is not required.
*
*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
*     as being the original software.
*
*     3. This notice may not be removed or altered from any source distribution.
*
**********************************************************************************************/

#include "raylib.h"

#define RAYLIB_NUKLEAR_IMPLEMENTATION
#include "raylib-nuklear.h"

int main(void)
{
    // Initialization
    //--------------------------------------------------------------------------------------
    const int screenWidth = 700;
    const int screenHeight = 394;
    InitWindow(screenWidth, screenHeight, "[raylib-nuklear] example");

    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second
    //--------------------------------------------------------------------------------------

    /* GUI */
    struct nk_colorf bg = ColorToNuklearColorF(SKYBLUE);
    struct nk_context *ctx = InitNuklear(0);

    // Main game loop
    while (!WindowShouldClose())    // Detect window close button or ESC key
    {
        // Update
        UpdateNuklear(ctx);

        // GUI
        if (nk_begin(ctx, "Demo", nk_rect(50, 50, 230, 250),
            NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE|
            NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE))
        {
            enum {EASY, HARD};
            static int op = EASY;
            static int property = 20;
            nk_layout_row_static(ctx, 30, 80, 1);
            if (nk_button_label(ctx, "button"))
                TraceLog(LOG_INFO, "button pressed");

            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;

            nk_layout_row_dynamic(ctx, 25, 1);
            nk_property_int(ctx, "Compression:", 0, &property, 100, 10, 1);

            nk_layout_row_dynamic(ctx, 20, 1);
            nk_label(ctx, "background:", NK_TEXT_LEFT);
            nk_layout_row_dynamic(ctx, 25, 1);
            if (nk_combo_begin_color(ctx, nk_rgb_cf(bg), nk_vec2(nk_widget_width(ctx),400))) {
                nk_layout_row_dynamic(ctx, 120, 1);
                bg = nk_color_picker(ctx, bg, NK_RGBA);
                nk_layout_row_dynamic(ctx, 25, 1);
                bg.r = nk_propertyf(ctx, "#R:", 0, bg.r, 1.0f, 0.01f,0.005f);
                bg.g = nk_propertyf(ctx, "#G:", 0, bg.g, 1.0f, 0.01f,0.005f);
                bg.b = nk_propertyf(ctx, "#B:", 0, bg.b, 1.0f, 0.01f,0.005f);
                bg.a = nk_propertyf(ctx, "#A:", 0, bg.a, 1.0f, 0.01f,0.005f);
                nk_combo_end(ctx);
            }
        }

        nk_end(ctx);

        // Draw
        //----------------------------------------------------------------------------------
        BeginDrawing();

            ClearBackground(NuklearColorFToColor(bg));

            DrawNuklear(ctx);

        EndDrawing();
        //----------------------------------------------------------------------------------
    }

    // De-Initialization
    //--------------------------------------------------------------------------------------
    UnloadNuklear(ctx);     // Unload the Nuklear GUI
    CloseWindow();
    //--------------------------------------------------------------------------------------

    return 0;
}


================================================
FILE: examples/raylib-nuklear-font-default.c
================================================
/**********************************************************************************************
*
*   raylib-nuklear-font - Example of using Nuklear with the default font provided from Nuklear.
*
*   LICENSE: zlib/libpng
*
*   raylib-nuklear is licensed under an unmodified zlib/libpng license, which is an OSI-certified,
*   BSD-like license that allows static linking with closed source software:
*
*   Copyright (c) 2020 Rob Loach (@RobLoach)
*
*   This software is provided "as-is", without any express or implied warranty. In no event
*   will the authors be held liable for any damages arising from the use of this software.
*
*   Permission is granted to anyone to use this software for any purpose, including commercial
*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
*
*     1. The origin of this software must not be misrepresented; you must not claim that you
*     wrote the original software. If you use this software in a product, an acknowledgment
*     in the product documentation would be appreciated but is not required.
*
*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
*     as being the original software.
*
*     3. This notice may not be removed or altered from any source distribution.
*
**********************************************************************************************/

#include "raylib.h"

#define RAYLIB_NUKLEAR_IMPLEMENTATION
#define RAYLIB_NUKLEAR_INCLUDE_DEFAULT_FONT
#include "raylib-nuklear.h"

int main(void)
{
    // Initialization
    //--------------------------------------------------------------------------------------
    const int screenWidth = 800;
    const int screenHeight = 450;
    const int fontSize = 13;

    InitWindow(screenWidth, screenHeight, "[raylib-nuklear] font example");
    Font font = LoadFontFromNuklear(fontSize);

    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second
    //--------------------------------------------------------------------------------------

    /* GUI */
    struct nk_colorf bg = ColorToNuklearColorF(SKYBLUE);
    struct nk_context *ctx = InitNuklearEx(font, (float)fontSize);

    // Main game loop
    while (!WindowShouldClose())    // Detect window close button or ESC key
    {
        // Update
        UpdateNuklear(ctx);

        // GUI
        if (nk_begin(ctx, "Demo", nk_rect(50, 50, 230, 250),
            NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE|
            NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE))
        {
            enum {EASY, HARD};
            static int op = EASY;
            static int property = 20;
            nk_layout_row_static(ctx, 30, 80, 1);
            if (nk_button_label(ctx, "button"))
                TraceLog(LOG_INFO, "button pressed");

            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;

            nk_layout_row_dynamic(ctx, 25, 1);
            nk_property_int(ctx, "Compression:", 0, &property, 100, 10, 1);

            nk_layout_row_dynamic(ctx, 20, 1);
            nk_label(ctx, "background:", NK_TEXT_LEFT);
            nk_layout_row_dynamic(ctx, 25, 1);
            if (nk_combo_begin_color(ctx, nk_rgb_cf(bg), nk_vec2(nk_widget_width(ctx),400))) {
                nk_layout_row_dynamic(ctx, 120, 1);
                bg = nk_color_picker(ctx, bg, NK_RGBA);
                nk_layout_row_dynamic(ctx, 25, 1);
                bg.r = nk_propertyf(ctx, "#R:", 0, bg.r, 1.0f, 0.01f,0.005f);
                bg.g = nk_propertyf(ctx, "#G:", 0, bg.g, 1.0f, 0.01f,0.005f);
                bg.b = nk_propertyf(ctx, "#B:", 0, bg.b, 1.0f, 0.01f,0.005f);
                bg.a = nk_propertyf(ctx, "#A:", 0, bg.a, 1.0f, 0.01f,0.005f);
                nk_combo_end(ctx);
            }
        }

        nk_end(ctx);

        // Draw
        //----------------------------------------------------------------------------------
        BeginDrawing();

            ClearBackground(NuklearColorFToColor(bg));

            DrawNuklear(ctx);

        EndDrawing();
        //----------------------------------------------------------------------------------
    }

    // De-Initialization
    //--------------------------------------------------------------------------------------
    UnloadNuklear(ctx);     // Unload the Nuklear GUI
    UnloadFont(font);
    CloseWindow();
    //--------------------------------------------------------------------------------------

    return 0;
}


================================================
FILE: examples/raylib-nuklear-font.c
================================================
/**********************************************************************************************
*
*   raylib-nuklear-font - Example of using Nuklear with a custom Raylib font.
*
*   LICENSE: zlib/libpng
*
*   raylib-nuklear is licensed under an unmodified zlib/libpng license, which is an OSI-certified,
*   BSD-like license that allows static linking with closed source software:
*
*   Copyright (c) 2020 Rob Loach (@RobLoach)
*
*   This software is provided "as-is", without any express or implied warranty. In no event
*   will the authors be held liable for any damages arising from the use of this software.
*
*   Permission is granted to anyone to use this software for any purpose, including commercial
*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
*
*     1. The origin of this software must not be misrepresented; you must not claim that you
*     wrote the original software. If you use this software in a product, an acknowledgment
*     in the product documentation would be appreciated but is not required.
*
*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
*     as being the original software.
*
*     3. This notice may not be removed or altered from any source distribution.
*
**********************************************************************************************/

#include "raylib.h"

#define RAYLIB_NUKLEAR_IMPLEMENTATION
#include "raylib-nuklear.h"

int main(void)
{
    // Initialization
    //--------------------------------------------------------------------------------------
    const int screenWidth = 800;
    const int screenHeight = 450;
    const int fontSize = 18;

    InitWindow(screenWidth, screenHeight, "[raylib-nuklear] font example");
    Font font = LoadFontEx("resources/anonymous_pro_bold.ttf", fontSize, NULL, 0);

    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second
    //--------------------------------------------------------------------------------------

    /* GUI */
    struct nk_colorf bg = ColorToNuklearColorF(SKYBLUE);
    struct nk_context *ctx = InitNuklearEx(font, fontSize);

    // Main game loop
    while (!WindowShouldClose())    // Detect window close button or ESC key
    {
        // Update
        UpdateNuklear(ctx);

        // GUI
        if (nk_begin(ctx, "Demo", nk_rect(50, 50, 230, 250),
            NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE|
            NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE))
        {
            enum {EASY, HARD};
            static int op = EASY;
            static int property = 20;
            nk_layout_row_static(ctx, 30, 80, 1);
            if (nk_button_label(ctx, "button"))
                TraceLog(LOG_INFO, "button pressed");

            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;

            nk_layout_row_dynamic(ctx, 25, 1);
            nk_property_int(ctx, "Compression:", 0, &property, 100, 10, 1);

            nk_layout_row_dynamic(ctx, 20, 1);
            nk_label(ctx, "background:", NK_TEXT_LEFT);
            nk_layout_row_dynamic(ctx, 25, 1);
            if (nk_combo_begin_color(ctx, nk_rgb_cf(bg), nk_vec2(nk_widget_width(ctx),400))) {
                nk_layout_row_dynamic(ctx, 120, 1);
                bg = nk_color_picker(ctx, bg, NK_RGBA);
                nk_layout_row_dynamic(ctx, 25, 1);
                bg.r = nk_propertyf(ctx, "#R:", 0, bg.r, 1.0f, 0.01f,0.005f);
                bg.g = nk_propertyf(ctx, "#G:", 0, bg.g, 1.0f, 0.01f,0.005f);
                bg.b = nk_propertyf(ctx, "#B:", 0, bg.b, 1.0f, 0.01f,0.005f);
                bg.a = nk_propertyf(ctx, "#A:", 0, bg.a, 1.0f, 0.01f,0.005f);
                nk_combo_end(ctx);
            }
        }

        nk_end(ctx);

        // Draw
        //----------------------------------------------------------------------------------
        BeginDrawing();

            ClearBackground(NuklearColorFToColor(bg));

            DrawNuklear(ctx);

        EndDrawing();
        //----------------------------------------------------------------------------------
    }

    // De-Initialization
    //--------------------------------------------------------------------------------------
    UnloadNuklear(ctx);     // Unload the Nuklear GUI
    UnloadFont(font);
    CloseWindow();
    //--------------------------------------------------------------------------------------

    return 0;
}


================================================
FILE: examples/raylib-nuklear-texture.c
================================================
/* ===============================================================
 *
 *                          EXAMPLE
 *
 * ===============================================================*/
/*
	This example shows how to use the image API from raylib nuklear.
	And then display it.
*/

#include <stdio.h>
#include <stdlib.h>
#include <raylib.h>

#define RAYLIB_NUKLEAR_IMPLEMENTATION
#include "raylib-nuklear.h"

int main(void)
{
	InitWindow(1280, 720, "[raylib-nuklear] - Texture/Image");

	// Initialize the context
	struct nk_context* ctx = InitNuklear(20);

    // Scale up the Nuklear GUI
    SetNuklearScaling(ctx, 1.2f);

	// Load the nk_image
    Texture textImage = LoadTexture("resources/test-image.png");
	struct nk_image img = TextureToNuklearImage(textImage);

	while (!WindowShouldClose())
	{
		// Input
		UpdateNuklear(ctx);

		// The window called "Image example" is opend
		if(nk_begin(ctx, "Image example", nk_rect(300, 100, img.w, img.h + 50), NK_WINDOW_MINIMIZABLE|NK_WINDOW_BORDER|NK_WINDOW_NO_SCROLLBAR|NK_WINDOW_MOVABLE|NK_WINDOW_CLOSABLE))
		{
			// Setup the layout
			nk_layout_row_static(ctx, img.h, img.w, 1);

			// Draw the image
			nk_image(ctx, img);
		}
        nk_end(ctx);

		// Draw the GUI
		BeginDrawing();
		ClearBackground(RAYWHITE);
		DrawNuklear(ctx);
		EndDrawing();
	}

    UnloadTexture(textImage);

	CloseWindow();
	return 0;
}


================================================
FILE: include/CMakeLists.txt
================================================
# raylib_nuklear
add_library(raylib_nuklear INTERFACE)
target_include_directories(raylib_nuklear INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
install(FILES
    raylib-nuklear.h
    nuklear.h
    DESTINATION include
)


================================================
FILE: include/nuklear.h
================================================
/*
# Nuklear
![](https://cloud.githubusercontent.com/assets/8057201/11761525/ae06f0ca-a0c6-11e5-819d-5610b25f6ef4.gif)

## Contents
1. About section
2. Highlights section
3. Features section
4. Usage section
    1. Flags section
    2. Constants section
    3. Dependencies section
5. Example section
6. API section
    1. Context section
    2. Input section
    3. Drawing section
    4. Window section
    5. Layouting section
    6. Groups section
    7. Tree section
    8. Properties section
7. License section
8. Changelog section
9. Gallery section
10. Credits section

## About
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.

## Highlights
- Graphical user interface toolkit
- Single header library
- Written in C89 (a.k.a. ANSI C or ISO C90)
- Small codebase (~18kLOC)
- 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
- [Code available on github](https://github.com/Immediate-Mode-UI/Nuklear/)

## Features
- Absolutely no platform dependent code
- Memory management control ranging from/to
    - Ease of use by allocating everything from standard library
    - Control every byte of memory inside the library
- Font handling control ranging from/to
    - Use your own font implementation for everything
    - Use this libraries internal font baking and handling API
- Drawing output control ranging from/to
    - Simple shapes for more high level APIs which already have drawing capabilities
    - Hardware accessible anti-aliased vertex buffer output
- Customizable colors and properties ranging from/to
    - Simple changes to color by filling a simple color table
    - Complete control with ability to use skinning to decorate widgets
- Bendable UI library with widget ranging from/to
    - Basic widgets like buttons, checkboxes, slider, ...
    - Advanced widget like abstract comboboxes, contextual menus,...
- Compile time configuration to only compile what you need
    - Subset which can be used if you do not want to link or use the standard library
- Can be easily modified to only update on user input instead of frame updates

## Usage
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. <br /><br />

The implementation mode requires to define  the preprocessor macro
NK_IMPLEMENTATION in *one* .c/.cpp file before #including this file, e.g.:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~C
    #define NK_IMPLEMENTATION
    #include "nuklear.h"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Also optionally define the symbols listed in the section "OPTIONAL DEFINES"
below in header and implementation mode if you want to use additional functionality
or need more control over the library.

!!! WARNING
    Every time nuklear is included define the same compiler flags. This very important not doing so could lead to compiler errors or even worse stack corruptions.

### Flags
Flag                            | Description
--------------------------------|------------------------------------------
NK_PRIVATE                      | If defined declares all functions as static, so they can only be accessed inside the file that contains the implementation
NK_INCLUDE_FIXED_TYPES          | If defined it will include header `<stdint.h>` for fixed sized types otherwise nuklear tries to select the correct type. If that fails it will throw a compiler error and you have to select the correct types yourself.
NK_INCLUDE_DEFAULT_ALLOCATOR    | If defined it will include header `<stdlib.h>` and provide additional functions to use this library without caring for memory allocation control and therefore ease memory management.
NK_INCLUDE_STANDARD_IO          | If defined it will include header `<stdio.h>` and provide additional functions depending on file loading.
NK_INCLUDE_STANDARD_VARARGS     | If defined it will include header <stdarg.h> and provide additional functions depending on file loading.
NK_INCLUDE_STANDARD_BOOL        | If defined it will include header `<stdbool.h>` for nk_bool otherwise nuklear defines nk_bool as int.
NK_INCLUDE_VERTEX_BUFFER_OUTPUT | Defining this adds a vertex draw command list backend to this library, which allows you to convert queue commands into vertex draw commands. This is mainly if you need a hardware accessible format for OpenGL, DirectX, Vulkan, Metal,...
NK_INCLUDE_FONT_BAKING          | Defining this adds `stb_truetype` and `stb_rect_pack` implementation to this library and provides font baking and rendering. If you already have font handling or do not want to use this font handler you don't have to define it.
NK_INCLUDE_DEFAULT_FONT         | Defining this adds the default font: ProggyClean.ttf into this library which can be loaded into a font atlas and allows using this library without having a truetype font
NK_INCLUDE_COMMAND_USERDATA     | Defining this adds a userdata pointer into each command. Can be useful for example if you want to provide custom shaders depending on the used widget. Can be combined with the style structures.
NK_BUTTON_TRIGGER_ON_RELEASE    | Different platforms require button clicks occurring either on buttons being pressed (up to down) or released (down to up). By default this library will react on buttons being pressed, but if you define this it will only trigger if a button is released.
NK_ZERO_COMMAND_MEMORY          | Defining this will zero out memory for each drawing command added to a drawing queue (inside nk_command_buffer_push). Zeroing command memory is very useful for fast checking (using memcmp) if command buffers are equal and avoid drawing frames when nothing on screen has changed since previous frame.
NK_UINT_DRAW_INDEX              | Defining this will set the size of vertex index elements when using NK_VERTEX_BUFFER_OUTPUT to 32bit instead of the default of 16bit
NK_KEYSTATE_BASED_INPUT         | Define this if your backend uses key state for each frame rather than key press/release events
NK_IS_WORD_BOUNDARY(c)          | Define this to a function macro that takes a single nk_rune (nk_uint) and returns true if it's a word separator. If not defined, uses the default definition (see nk_is_word_boundary())

!!! WARNING
    The following flags will pull in the standard C library:
    - NK_INCLUDE_DEFAULT_ALLOCATOR
    - NK_INCLUDE_STANDARD_IO
    - NK_INCLUDE_STANDARD_VARARGS

!!! WARNING
    The following flags if defined need to be defined for both header and implementation:
    - NK_INCLUDE_FIXED_TYPES
    - NK_INCLUDE_DEFAULT_ALLOCATOR
    - NK_INCLUDE_STANDARD_VARARGS
    - NK_INCLUDE_STANDARD_BOOL
    - NK_INCLUDE_VERTEX_BUFFER_OUTPUT
    - NK_INCLUDE_FONT_BAKING
    - NK_INCLUDE_DEFAULT_FONT
    - NK_INCLUDE_STANDARD_VARARGS
    - NK_INCLUDE_COMMAND_USERDATA
    - NK_UINT_DRAW_INDEX

### Constants
Define                          | Description
--------------------------------|---------------------------------------
NK_BUFFER_DEFAULT_INITIAL_SIZE  | Initial buffer size allocated by all buffers while using the default allocator functions included by defining NK_INCLUDE_DEFAULT_ALLOCATOR. If you don't want to allocate the default 4k memory then redefine it.
NK_MAX_NUMBER_BUFFER            | Maximum buffer size for the conversion buffer between float and string Under normal circumstances this should be more than sufficient.
NK_INPUT_MAX                    | Defines the max number of bytes which can be added as text input in one frame. Under normal circumstances this should be more than sufficient.

!!! WARNING
    The following constants if defined need to be defined for both header and implementation:
    - NK_MAX_NUMBER_BUFFER
    - NK_BUFFER_DEFAULT_INITIAL_SIZE
    - NK_INPUT_MAX

### Dependencies
Function    | Description
------------|---------------------------------------------------------------
NK_ASSERT   | If you don't define this, nuklear will use <assert.h> with assert().
NK_MEMSET   | You can define this to 'memset' or your own memset implementation replacement. If not nuklear will use its own version.
NK_MEMCPY   | You can define this to 'memcpy' or your own memcpy implementation replacement. If not nuklear will use its own version.
NK_INV_SQRT | You can define this to your own inverse sqrt implementation replacement. If not nuklear will use its own slow and not highly accurate version.
NK_SIN      | You can define this to 'sinf' or your own sine implementation replacement. If not nuklear will use its own approximation implementation.
NK_COS      | You can define this to 'cosf' or your own cosine implementation replacement. If not nuklear will use its own approximation implementation.
NK_STRTOD   | You can define this to `strtod` or your own string to double conversion implementation replacement. If not defined nuklear will use its own imprecise and possibly unsafe version (does not handle nan or infinity!).
NK_DTOA     | You can define this to `dtoa` or your own double to string conversion implementation replacement. If not defined nuklear will use its own imprecise and possibly unsafe version (does not handle nan or infinity!).
NK_VSNPRINTF| If you define `NK_INCLUDE_STANDARD_VARARGS` as well as `NK_INCLUDE_STANDARD_IO` and want to be safe define this to `vsnprintf` on compilers supporting later versions of C or C++. By default nuklear will check for your stdlib version in C as well as compiler version in C++. if `vsnprintf` is available it will define it to `vsnprintf` directly. If not defined and if you have older versions of C or C++ it will be defined to `vsprintf` which is unsafe.

!!! WARNING
    The following dependencies will pull in the standard C library if not redefined:
    - NK_ASSERT

!!! WARNING
    The following dependencies if defined need to be defined for both header and implementation:
    - NK_ASSERT

!!! WARNING
    The following dependencies if defined need to be defined only for the implementation part:
    - NK_MEMSET
    - NK_MEMCPY
    - NK_SQRT
    - NK_SIN
    - NK_COS
    - NK_STRTOD
    - NK_DTOA
    - NK_VSNPRINTF

## Example

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
// init gui state
enum {EASY, HARD};
static int op = EASY;
static float value = 0.6f;
static int i =  20;
struct nk_context ctx;

nk_init_fixed(&ctx, calloc(1, MAX_MEMORY), MAX_MEMORY, &font);
if (nk_begin(&ctx, "Show", nk_rect(50, 50, 220, 220),
    NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_CLOSABLE)) {
    // 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);
}
nk_end(&ctx);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

![](https://cloud.githubusercontent.com/assets/8057201/10187981/584ecd68-675c-11e5-897c-822ef534a876.png)

## API

*/
#ifndef NK_SINGLE_FILE
  #define NK_SINGLE_FILE
#endif

/** \file nuklear.h
 * \brief main API and documentation file
 *
 * \details
 */
#ifndef NK_NUKLEAR_H_
#define NK_NUKLEAR_H_

#ifdef __cplusplus
extern "C" {
#endif
/*
 * ==============================================================
 *
 *                          CONSTANTS
 *
 * ===============================================================
 */

#define NK_UNDEFINED (-1.0f)
#define NK_UTF_INVALID 0xFFFD /**< internal invalid utf8 rune */
#define NK_UTF_SIZE 4 /**< describes the number of bytes a glyph consists of*/
#ifndef NK_INPUT_MAX
  #define NK_INPUT_MAX 16
#endif
#ifndef NK_MAX_NUMBER_BUFFER
  #define NK_MAX_NUMBER_BUFFER 64
#endif
#ifndef NK_SCROLLBAR_HIDING_TIMEOUT
  #define NK_SCROLLBAR_HIDING_TIMEOUT 4.0f
#endif
/*
 * ==============================================================
 *
 *                          HELPER
 *
 * ===============================================================
 */

#ifndef NK_API
  #ifdef NK_PRIVATE
    #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199409L))
      #define NK_API static inline
    #elif defined(__cplusplus)
      #define NK_API static inline
    #else
      #define NK_API static
    #endif
  #else
    #define NK_API extern
  #endif
#endif
#ifndef NK_LIB
  #ifdef NK_SINGLE_FILE
    #define NK_LIB static
  #else
    #define NK_LIB extern
  #endif
#endif

#define NK_INTERN static
#define NK_STORAGE static
#define NK_GLOBAL static

#define NK_FLAG(x) (1 << (x))
#define NK_STRINGIFY(x) #x
#define NK_MACRO_STRINGIFY(x) NK_STRINGIFY(x)
#define NK_STRING_JOIN_IMMEDIATE(arg1, arg2) arg1 ## arg2
#define NK_STRING_JOIN_DELAY(arg1, arg2) NK_STRING_JOIN_IMMEDIATE(arg1, arg2)
#define NK_STRING_JOIN(arg1, arg2) NK_STRING_JOIN_DELAY(arg1, arg2)

#ifdef _MSC_VER
  #define NK_UNIQUE_NAME(name) NK_STRING_JOIN(name,__COUNTER__)
#else
  #define NK_UNIQUE_NAME(name) NK_STRING_JOIN(name,__LINE__)
#endif

#ifndef NK_STATIC_ASSERT
  #define NK_STATIC_ASSERT(exp) typedef char NK_UNIQUE_NAME(_dummy_array)[(exp)?1:-1]
#endif

#ifndef NK_FILE_LINE
#ifdef _MSC_VER
  #define NK_FILE_LINE __FILE__ ":" NK_MACRO_STRINGIFY(__COUNTER__)
#else
  #define NK_FILE_LINE __FILE__ ":" NK_MACRO_STRINGIFY(__LINE__)
#endif
#endif

#define NK_MIN(a,b) ((a) < (b) ? (a) : (b))
#define NK_MAX(a,b) ((a) < (b) ? (b) : (a))
#define NK_CLAMP(i,v,x) (NK_MAX(NK_MIN(v,x), i))

#ifdef NK_INCLUDE_STANDARD_VARARGS
  #include <stdarg.h>
  #if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */
    #include <sal.h>
    #define NK_PRINTF_FORMAT_STRING _Printf_format_string_
  #else
    #define NK_PRINTF_FORMAT_STRING
  #endif
  #if defined(__GNUC__)
    #define NK_PRINTF_VARARG_FUNC(fmtargnumber) __attribute__((format(__printf__, fmtargnumber, fmtargnumber+1)))
    #define NK_PRINTF_VALIST_FUNC(fmtargnumber) __attribute__((format(__printf__, fmtargnumber, 0)))
  #else
    #define NK_PRINTF_VARARG_FUNC(fmtargnumber)
    #define NK_PRINTF_VALIST_FUNC(fmtargnumber)
  #endif
#endif

/*
 * ===============================================================
 *
 *                          BASIC
 *
 * ===============================================================
 */
 #ifdef NK_INCLUDE_FIXED_TYPES
 #include <stdint.h>
 #define NK_INT8 int8_t
 #define NK_UINT8 uint8_t
 #define NK_INT16 int16_t
 #define NK_UINT16 uint16_t
 #define NK_INT32 int32_t
 #define NK_UINT32 uint32_t
 #define NK_SIZE_TYPE uintptr_t
 #define NK_POINTER_TYPE uintptr_t
#else
  #ifndef NK_INT8
    #define NK_INT8 signed char
  #endif
  #ifndef NK_UINT8
    #define NK_UINT8 unsigned char
  #endif
  #ifndef NK_INT16
    #define NK_INT16 signed short
  #endif
  #ifndef NK_UINT16
    #define NK_UINT16 unsigned short
  #endif
  #ifndef NK_INT32
    #if defined(_MSC_VER)
      #define NK_INT32 __int32
    #else
      #define NK_INT32 signed int
    #endif
  #endif
  #ifndef NK_UINT32
    #if defined(_MSC_VER)
      #define NK_UINT32 unsigned __int32
    #else
      #define NK_UINT32 unsigned int
    #endif
  #endif
  #ifndef NK_SIZE_TYPE
    #if defined(_WIN64) && defined(_MSC_VER)
      #define NK_SIZE_TYPE unsigned __int64
    #elif defined(_WIN64) && (defined(__MINGW64__) || defined(__clang__))
      #define NK_SIZE_TYPE unsigned long long
    #elif (defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)
      #define NK_SIZE_TYPE unsigned __int32
    #elif (defined(_WIN32) || defined(WIN32)) && (defined(__MINGW32__) || defined(__clang__))
      #define NK_SIZE_TYPE unsigned long
    #elif defined(__GNUC__) || defined(__clang__)
      #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__)
        #define NK_SIZE_TYPE unsigned long
      #else
        #define NK_SIZE_TYPE unsigned int
      #endif
    #else
      #define NK_SIZE_TYPE unsigned long
    #endif
  #endif
  #ifndef NK_POINTER_TYPE
    #if defined(_WIN64) && defined(_MSC_VER)
      #define NK_POINTER_TYPE unsigned __int64
    #elif defined(_WIN64) && (defined(__MINGW64__) || defined(__clang__))
      #define NK_POINTER_TYPE unsigned long long
    #elif (defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)
      #define NK_POINTER_TYPE unsigned __int32
    #elif (defined(_WIN32) || defined(WIN32)) && (defined(__MINGW32__) || defined(__clang__))
      #define NK_POINTER_TYPE unsigned long
    #elif defined(__GNUC__) || defined(__clang__)
      #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__)
        #define NK_POINTER_TYPE unsigned long
      #else
        #define NK_POINTER_TYPE unsigned int
      #endif
    #else
      #define NK_POINTER_TYPE unsigned long
    #endif
  #endif
#endif

/**< could be any type with semantic of standard bool, either equal or smaller than int */
#ifndef NK_BOOL
  #ifdef NK_INCLUDE_STANDARD_BOOL
    #include <stdbool.h>
    #define NK_BOOL bool
  #else
    #define NK_BOOL int
  #endif
#endif

typedef NK_INT8 nk_char;
typedef NK_UINT8 nk_uchar;
typedef NK_UINT8 nk_byte;
typedef NK_INT16 nk_short;
typedef NK_UINT16 nk_ushort;
typedef NK_INT32 nk_int;
typedef NK_UINT32 nk_uint;
typedef NK_SIZE_TYPE nk_size;
typedef NK_POINTER_TYPE nk_ptr;
typedef NK_BOOL nk_bool;

typedef nk_uint nk_hash;
typedef nk_uint nk_flags;
typedef nk_uint nk_rune;

/* Make sure correct type size:
 * This will fire with a negative subscript error if the type sizes
 * are set incorrectly by the compiler, and compile out if not */
NK_STATIC_ASSERT(sizeof(nk_short) == 2);
NK_STATIC_ASSERT(sizeof(nk_ushort) == 2);
NK_STATIC_ASSERT(sizeof(nk_uint) == 4);
NK_STATIC_ASSERT(sizeof(nk_int) == 4);
NK_STATIC_ASSERT(sizeof(nk_byte) == 1);
NK_STATIC_ASSERT(sizeof(nk_flags) >= 4);
NK_STATIC_ASSERT(sizeof(nk_rune) >= 4);
NK_STATIC_ASSERT(sizeof(nk_size) >= sizeof(void*));
NK_STATIC_ASSERT(sizeof(nk_ptr) >= sizeof(void*));
NK_STATIC_ASSERT(sizeof(nk_bool) <= sizeof(int));

/* ============================================================================
 *
 *                                  API
 *
 * =========================================================================== */
struct nk_buffer;
struct nk_allocator;
struct nk_command_buffer;
struct nk_draw_command;
struct nk_convert_config;
struct nk_style_item;
struct nk_text_edit;
struct nk_draw_list;
struct nk_user_font;
struct nk_panel;
struct nk_context;
struct nk_draw_vertex_layout_element;
struct nk_style_button;
struct nk_style_toggle;
struct nk_style_selectable;
struct nk_style_slide;
struct nk_style_progress;
struct nk_style_scrollbar;
struct nk_style_edit;
struct nk_style_property;
struct nk_style_chart;
struct nk_style_combo;
struct nk_style_tab;
struct nk_style_window_header;
struct nk_style_window;

enum {nk_false, nk_true};
struct nk_color {nk_byte r,g,b,a;};
struct nk_colorf {float r,g,b,a;};
struct nk_vec2 {float x,y;};
struct nk_vec2i {short x, y;};
struct nk_rect {float x,y,w,h;};
struct nk_recti {short x,y,w,h;};
typedef char nk_glyph[NK_UTF_SIZE];
typedef union {void *ptr; int id;} nk_handle;
struct nk_image {nk_handle handle; nk_ushort w, h; nk_ushort region[4];};
struct nk_nine_slice {struct nk_image img; nk_ushort l, t, r, b;};
struct nk_cursor {struct nk_image img; struct nk_vec2 size, offset;};
struct nk_scroll {nk_uint x, y;};

/* Make sure the semantic of nk_true/nk_false is compatible with nk_bool */
NK_STATIC_ASSERT(!((nk_bool)0) == !(nk_false));
NK_STATIC_ASSERT(!((nk_bool)1) == !(nk_true));

enum nk_heading         {NK_UP, NK_RIGHT, NK_DOWN, NK_LEFT};
enum nk_button_behavior {NK_BUTTON_DEFAULT, NK_BUTTON_REPEATER};
enum nk_modify          {NK_FIXED = nk_false, NK_MODIFIABLE = nk_true};
enum nk_orientation     {NK_VERTICAL, NK_HORIZONTAL};
enum nk_collapse_states {NK_MINIMIZED = nk_false, NK_MAXIMIZED = nk_true};
enum nk_show_states     {NK_HIDDEN = nk_false, NK_SHOWN = nk_true};
enum nk_chart_type      {NK_CHART_LINES, NK_CHART_COLUMN, NK_CHART_MAX};
enum nk_chart_event     {NK_CHART_HOVERING = 0x01, NK_CHART_CLICKED = 0x02};
enum nk_color_format    {NK_RGB, NK_RGBA};
enum nk_popup_type      {NK_POPUP_STATIC, NK_POPUP_DYNAMIC};
enum nk_layout_format   {NK_DYNAMIC, NK_STATIC};
enum nk_tree_type       {NK_TREE_NODE, NK_TREE_TAB};

enum nk_tooltip_pos {
    NK_TOP_LEFT,
    NK_TOP_CENTER,
    NK_TOP_RIGHT,

    NK_MIDDLE_LEFT,
    NK_MIDDLE_CENTER,
    NK_MIDDLE_RIGHT,

    NK_BOTTOM_LEFT,
    NK_BOTTOM_CENTER,
    NK_BOTTOM_RIGHT
};

typedef void*(*nk_plugin_alloc)(nk_handle, void *old, nk_size);
typedef void (*nk_plugin_free)(nk_handle, void *old);
typedef nk_bool(*nk_plugin_filter)(const struct nk_text_edit*, nk_rune unicode);
typedef void(*nk_plugin_paste)(nk_handle, struct nk_text_edit*);
typedef void(*nk_plugin_copy)(nk_handle, const char*, int len);

struct nk_allocator {
    nk_handle userdata;
    nk_plugin_alloc alloc;
    nk_plugin_free free;
};
enum nk_symbol_type {
    NK_SYMBOL_NONE,
    NK_SYMBOL_X,
    NK_SYMBOL_UNDERSCORE,
    NK_SYMBOL_CIRCLE_SOLID,
    NK_SYMBOL_CIRCLE_OUTLINE,
    NK_SYMBOL_RECT_SOLID,
    NK_SYMBOL_RECT_OUTLINE,
    NK_SYMBOL_TRIANGLE_UP,
    NK_SYMBOL_TRIANGLE_DOWN,
    NK_SYMBOL_TRIANGLE_LEFT,
    NK_SYMBOL_TRIANGLE_RIGHT,
    NK_SYMBOL_PLUS,
    NK_SYMBOL_MINUS,
    NK_SYMBOL_TRIANGLE_UP_OUTLINE,
    NK_SYMBOL_TRIANGLE_DOWN_OUTLINE,
    NK_SYMBOL_TRIANGLE_LEFT_OUTLINE,
    NK_SYMBOL_TRIANGLE_RIGHT_OUTLINE,
    NK_SYMBOL_MAX
};
/* =============================================================================
 *
 *                                  CONTEXT
 *
 * =============================================================================*/
/**
 * \page Context
 * Contexts are the main entry point and the majestro of nuklear and contain all required state.
 * They are used for window, memory, input, style, stack, commands and time management and need
 * to be passed into all nuklear GUI specific functions.
 *
 * # Usage
 * To use a context it first has to be initialized which can be achieved by calling
 * one of either `nk_init_default`, `nk_init_fixed`, `nk_init`, `nk_init_custom`.
 * Each takes in a font handle and a specific way of handling memory. Memory control
 * hereby ranges from standard library to just specifying a fixed sized block of memory
 * which nuklear has to manage itself from.
 *
 * ```c
 * struct nk_context ctx;
 * nk_init_xxx(&ctx, ...);
 * while (1) {
 *     // [...]
 *     nk_clear(&ctx);
 * }
 * nk_free(&ctx);
 * ```
 *
 * # Reference
 * Function            | Description
 * --------------------|-------------------------------------------------------
 * \ref nk_init_default | Initializes context with standard library memory allocation (malloc,free)
 * \ref nk_init_fixed   | Initializes context from single fixed size memory block
 * \ref nk_init         | Initializes context with memory allocator callbacks for alloc and free
 * \ref nk_init_custom  | Initializes context from two buffers. One for draw commands the other for window/panel/table allocations
 * \ref nk_clear        | Called at the end of the frame to reset and prepare the context for the next frame
 * \ref nk_free         | Shutdown and free all memory allocated inside the context
 * \ref nk_set_user_data| Utility function to pass user data to draw command
 */

#ifdef NK_INCLUDE_DEFAULT_ALLOCATOR

/**
 * # nk_init_default
 * Initializes a `nk_context` struct with a default standard library allocator.
 * Should be used if you don't want to be bothered with memory management in nuklear.
 *
 * ```c
 * nk_bool nk_init_default(struct nk_context *ctx, const struct nk_user_font *font);
 * ```
 *
 * Parameter   | Description
 * ------------|---------------------------------------------------------------
 * \param[in] ctx     | Must point to an either stack or heap allocated `nk_context` struct
 * \param[in] font    | Must point to a previously initialized font handle for more info look at font documentation
 *
 * \returns either `false(0)` on failure or `true(1)` on success.
 */
NK_API nk_bool nk_init_default(struct nk_context*, const struct nk_user_font*);
#endif
/**
 * # nk_init_fixed
 * Initializes a `nk_context` struct from single fixed size memory block
 * Should be used if you want complete control over nuklear's memory management.
 * Especially recommended for system with little memory or systems with virtual memory.
 * For the later case you can just allocate for example 16MB of virtual memory
 * and only the required amount of memory will actually be committed.
 *
 * ```c
 * nk_bool nk_init_fixed(struct nk_context *ctx, void *memory, nk_size size, const struct nk_user_font *font);
 * ```
 *
 * !!! Warning
 *     make sure the passed memory block is aligned correctly for `nk_draw_commands`.
 *
 * Parameter   | Description
 * ------------|--------------------------------------------------------------
 * \param[in] ctx     | Must point to an either stack or heap allocated `nk_context` struct
 * \param[in] memory  | Must point to a previously allocated memory block
 * \param[in] size    | Must contain the total size of memory
 * \param[in] font    | Must point to a previously initialized font handle for more info look at font documentation
 *
 * \returns either `false(0)` on failure or `true(1)` on success.
 */
NK_API nk_bool nk_init_fixed(struct nk_context*, void *memory, nk_size size, const struct nk_user_font*);

/**
 * # nk_init
 * Initializes a `nk_context` struct with memory allocation callbacks for nuklear to allocate
 * memory from. Used internally for `nk_init_default` and provides a kitchen sink allocation
 * interface to nuklear. Can be useful for cases like monitoring memory consumption.
 *
 * ```c
 * nk_bool nk_init(struct nk_context *ctx, const struct nk_allocator *alloc, const struct nk_user_font *font);
 * ```
 *
 * Parameter   | Description
 * ------------|---------------------------------------------------------------
 * \param[in] ctx     | Must point to an either stack or heap allocated `nk_context` struct
 * \param[in] alloc   | Must point to a previously allocated memory allocator
 * \param[in] font    | Must point to a previously initialized font handle for more info look at font documentation
 *
 * \returns either `false(0)` on failure or `true(1)` on success.
 */
NK_API nk_bool nk_init(struct nk_context*, const struct nk_allocator*, const struct nk_user_font*);

/**
 * \brief Initializes a `nk_context` struct from two different either fixed or growing buffers.
 *
 * \details
 * The first buffer is for allocating draw commands while the second buffer is
 * used for allocating windows, panels and state tables.
 *
 * ```c
 * nk_bool nk_init_custom(struct nk_context *ctx, struct nk_buffer *cmds, struct nk_buffer *pool, const struct nk_user_font *font);
 * ```
 *
 * \param[in] ctx    Must point to an either stack or heap allocated `nk_context` struct
 * \param[in] cmds   Must point to a previously initialized memory buffer either fixed or dynamic to store draw commands into
 * \param[in] pool   Must point to a previously initialized memory buffer either fixed or dynamic to store windows, panels and tables
 * \param[in] font   Must point to a previously initialized font handle for more info look at font documentation
 *
 * \returns either `false(0)` on failure or `true(1)` on success.
 */
NK_API nk_bool nk_init_custom(struct nk_context*, struct nk_buffer *cmds, struct nk_buffer *pool, const struct nk_user_font*);

/**
 * \brief Resets the context state at the end of the frame.
 *
 * \details
 * This includes mostly garbage collector tasks like removing windows or table
 * not called and therefore used anymore.
 *
 * ```c
 * void nk_clear(struct nk_context *ctx);
 * ```
 *
 * \param[in] ctx  Must point to a previously initialized `nk_context` struct
 */
NK_API void nk_clear(struct nk_context*);

/**
 * \brief Frees all memory allocated by nuklear; Not needed if context was initialized with `nk_init_fixed`.
 *
 * \details
 * ```c
 * void nk_free(struct nk_context *ctx);
 * ```
 *
 * \param[in] ctx  Must point to a previously initialized `nk_context` struct
 */
NK_API void nk_free(struct nk_context*);

#ifdef NK_INCLUDE_COMMAND_USERDATA
/**
 * \brief Sets the currently passed userdata passed down into each draw command.
 *
 * \details
 * ```c
 * void nk_set_user_data(struct nk_context *ctx, nk_handle data);
 * ```
 *
 * \param[in] ctx Must point to a previously initialized `nk_context` struct
 * \param[in] data  Handle with either pointer or index to be passed into every draw commands
 */
NK_API void nk_set_user_data(struct nk_context*, nk_handle handle);
#endif
/* =============================================================================
 *
 *                                  INPUT
 *
 * =============================================================================*/
/**
 * \page Input
 *
 * The input API is responsible for holding the current input state composed of
 * mouse, key and text input states.
 * It is worth noting that no direct OS or window handling is done in nuklear.
 * Instead all input state has to be provided by platform specific code. This on one hand
 * expects more work from the user and complicates usage but on the other hand
 * provides simple abstraction over a big number of platforms, libraries and other
 * already provided functionality.
 *
 * ```c
 * nk_input_begin(&ctx);
 * while (GetEvent(&evt)) {
 *     if (evt.type == MOUSE_MOVE)
 *         nk_input_motion(&ctx, evt.motion.x, evt.motion.y);
 *     else if (evt.type == [...]) {
 *         // [...]
 *     }
 * } nk_input_end(&ctx);
 * ```
 *
 * # Usage
 * Input state needs to be provided to nuklear by first calling `nk_input_begin`
 * which resets internal state like delta mouse position and button transitions.
 * After `nk_input_begin` all current input state needs to be provided. This includes
 * mouse motion, button and key pressed and released, text input and scrolling.
 * Both event- or state-based input handling are supported by this API
 * and should work without problems. Finally after all input state has been
 * mirrored `nk_input_end` needs to be called to finish input process.
 *
 * ```c
 * struct nk_context ctx;
 * nk_init_xxx(&ctx, ...);
 * while (1) {
 *     Event evt;
 *     nk_input_begin(&ctx);
 *     while (GetEvent(&evt)) {
 *         if (evt.type == MOUSE_MOVE)
 *             nk_input_motion(&ctx, evt.motion.x, evt.motion.y);
 *         else if (evt.type == [...]) {
 *             // [...]
 *         }
 *     }
 *     nk_input_end(&ctx);
 *     // [...]
 *     nk_clear(&ctx);
 * } nk_free(&ctx);
 * ```
 *
 * # Reference
 * Function            | Description
 * --------------------|-------------------------------------------------------
 * \ref nk_input_begin  | Begins the input mirroring process. Needs to be called before all other `nk_input_xxx` calls
 * \ref nk_input_motion | Mirrors mouse cursor position
 * \ref nk_input_key    | Mirrors key state with either pressed or released
 * \ref nk_input_button | Mirrors mouse button state with either pressed or released
 * \ref nk_input_scroll | Mirrors mouse scroll values
 * \ref nk_input_char   | Adds a single ASCII text character into an internal text buffer
 * \ref nk_input_glyph  | Adds a single multi-byte UTF-8 character into an internal text buffer
 * \ref nk_input_unicode| Adds a single unicode rune into an internal text buffer
 * \ref nk_input_end    | Ends the input mirroring process by calculating state changes. Don't call any `nk_input_xxx` function referenced above after this call
 */

enum nk_keys {
    NK_KEY_NONE,
    NK_KEY_SHIFT,
    NK_KEY_CTRL,
    NK_KEY_DEL,
    NK_KEY_ENTER,
    NK_KEY_TAB,
    NK_KEY_BACKSPACE,
    NK_KEY_COPY,
    NK_KEY_CUT,
    NK_KEY_PASTE,
    NK_KEY_UP,
    NK_KEY_DOWN,
    NK_KEY_LEFT,
    NK_KEY_RIGHT,
    /* Shortcuts: text field */
    NK_KEY_TEXT_INSERT_MODE,
    NK_KEY_TEXT_REPLACE_MODE,
    NK_KEY_TEXT_RESET_MODE,
    NK_KEY_TEXT_LINE_START,
    NK_KEY_TEXT_LINE_END,
    NK_KEY_TEXT_START,
    NK_KEY_TEXT_END,
    NK_KEY_TEXT_UNDO,
    NK_KEY_TEXT_REDO,
    NK_KEY_TEXT_SELECT_ALL,
    NK_KEY_TEXT_WORD_LEFT,
    NK_KEY_TEXT_WORD_RIGHT,
    /* Shortcuts: scrollbar */
    NK_KEY_SCROLL_START,
    NK_KEY_SCROLL_END,
    NK_KEY_SCROLL_DOWN,
    NK_KEY_SCROLL_UP,
    NK_KEY_MAX
};
enum nk_buttons {
    NK_BUTTON_LEFT,
    NK_BUTTON_MIDDLE,
    NK_BUTTON_RIGHT,
    NK_BUTTON_DOUBLE, /* Double click of the Left mouse button. */
    NK_BUTTON_X1, /* Commonly used for "Back" in UI navigation. Mouse Button 4. */
    NK_BUTTON_X2, /* Commonly used for "Forward" in UI navigation. Mouse Button 5. */
    NK_BUTTON_MAX
};

/**
 * \brief Begins the input mirroring process by resetting text, scroll
 * mouse, previous mouse position and movement as well as key state transitions.
 *
 * \details
 * ```c
 * void nk_input_begin(struct nk_context*);
 * ```
 *
 * \param[in] ctx Must point to a previously initialized `nk_context` struct
 */
NK_API void nk_input_begin(struct nk_context*);

/**
 * \brief Mirrors current mouse position to nuklear
 *
 * \details
 * ```c
 * void nk_input_motion(struct nk_context *ctx, int x, int y);
 * ```
 *
 * \param[in] ctx   Must point to a previously initialized `nk_context` struct
 * \param[in] x     Must hold an integer describing the current mouse cursor x-position
 * \param[in] y     Must hold an integer describing the current mouse cursor y-position
 */
NK_API void nk_input_motion(struct nk_context*, int x, int y);

/**
 * \brief Mirrors the state of a specific key to nuklear
 *
 * \details
 * ```c
 * void nk_input_key(struct nk_context*, enum nk_keys key, nk_bool down);
 * ```
 *
 * \param[in] ctx      Must point to a previously initialized `nk_context` struct
 * \param[in] key      Must be any value specified in enum `nk_keys` that needs to be mirrored
 * \param[in] down     Must be 0 for key is up and 1 for key is down
 */
NK_API void nk_input_key(struct nk_context*, enum nk_keys, nk_bool down);

/**
 * \brief Mirrors the state of a specific mouse button to nuklear
 *
 * \details
 * ```c
 * void nk_input_button(struct nk_context *ctx, enum nk_buttons btn, int x, int y, nk_bool down);
 * ```
 *
 * \param[in] ctx     Must point to a previously initialized `nk_context` struct
 * \param[in] btn     Must be any value specified in enum `nk_buttons` that needs to be mirrored
 * \param[in] x       Must contain an integer describing mouse cursor x-position on click up/down
 * \param[in] y       Must contain an integer describing mouse cursor y-position on click up/down
 * \param[in] down    Must be 0 for key is up and 1 for key is down
 */
NK_API void nk_input_button(struct nk_context*, enum nk_buttons, int x, int y, nk_bool down);

/**
 * \brief Copies the last mouse scroll value to nuklear.
 *
 * \details
 * Is generally a scroll value. So does not have to come from mouse and could
 * also originate from balls, tracks, linear guide rails, or other programs.
 *
 * ```c
 * void nk_input_scroll(struct nk_context *ctx, struct nk_vec2 val);
 * ```
 *
 * \param[in] ctx     | Must point to a previously initialized `nk_context` struct
 * \param[in] val     | vector with both X- as well as Y-scroll value
 */
NK_API void nk_input_scroll(struct nk_context*, struct nk_vec2 val);

/**
 * \brief Copies a single ASCII character into an internal text buffer
 *
 * \details
 * This is basically a helper function to quickly push ASCII characters into
 * nuklear.
 *
 * \note
 *     Stores up to NK_INPUT_MAX bytes between `nk_input_begin` and `nk_input_end`.
 *
 * ```c
 * void nk_input_char(struct nk_context *ctx, char c);
 * ```
 *
 * \param[in] ctx     | Must point to a previously initialized `nk_context` struct
 * \param[in] c       | Must be a single ASCII character preferable one that can be printed
 */
NK_API void nk_input_char(struct nk_context*, char);

/**
 * \brief Converts an encoded unicode rune into UTF-8 and copies the result into an
 * internal text buffer.
 *
 * \note
 *     Stores up to NK_INPUT_MAX bytes between `nk_input_begin` and `nk_input_end`.
 *
 * ```c
 * void nk_input_glyph(struct nk_context *ctx, const nk_glyph g);
 * ```
 *
 * \param[in] ctx     | Must point to a previously initialized `nk_context` struct
 * \param[in] g       | UTF-32 unicode codepoint
 */
NK_API void nk_input_glyph(struct nk_context*, const nk_glyph);

/**
 * \brief Converts a unicode rune into UTF-8 and copies the result
 * into an internal text buffer.
 *
 * \details
 * \note
 *     Stores up to NK_INPUT_MAX bytes between `nk_input_begin` and `nk_input_end`.
 *
 * ```c
 * void nk_input_unicode(struct nk_context*, nk_rune rune);
 * ```
 *
 * \param[in] ctx     | Must point to a previously initialized `nk_context` struct
 * \param[in] rune    | UTF-32 unicode codepoint
 */
NK_API void nk_input_unicode(struct nk_context*, nk_rune);

/**
 * \brief End the input mirroring process by resetting mouse grabbing
 * state to ensure the mouse cursor is not grabbed indefinitely.
 *
 * \details
 * ```c
 * void nk_input_end(struct nk_context *ctx);
 * ```
 *
 * \param[in] ctx     | Must point to a previously initialized `nk_context` struct
 */
NK_API void nk_input_end(struct nk_context*);

/* =============================================================================
 *
 *                                  DRAWING
 *
 * =============================================================================*/
/**
 * \page Drawing
 * This library was designed to be render backend agnostic so it does
 * not draw anything to screen directly. Instead all drawn shapes, widgets
 * are made of, are buffered into memory and make up a command queue.
 * Each frame therefore fills the command buffer with draw commands
 * that then need to be executed by the user and his own render backend.
 * After that the command buffer needs to be cleared and a new frame can be
 * started. It is probably important to note that the command buffer is the main
 * drawing API and the optional vertex buffer API only takes this format and
 * converts it into a hardware accessible format.
 *
 * # Usage
 * To draw all draw commands accumulated over a frame you need your own render
 * backend able to draw a number of 2D primitives. This includes at least
 * filled and stroked rectangles, circles, text, lines, triangles and scissors.
 * As soon as this criterion is met you can iterate over each draw command
 * and execute each draw command in a interpreter like fashion:
 *
 * ```c
 * const struct nk_command *cmd = 0;
 * nk_foreach(cmd, &ctx) {
 *     switch (cmd->type) {
 *     case NK_COMMAND_LINE:
 *         your_draw_line_function(...)
 *         break;
 *     case NK_COMMAND_RECT
 *         your_draw_rect_function(...)
 *         break;
 *     case //...:
 *         //[...]
 *     }
 * }
 * ```
 *
 * In program flow context draw commands need to be executed after input has been
 * gathered and the complete UI with windows and their contained widgets have
 * been executed and before calling `nk_clear` which frees all previously
 * allocated draw commands.
 *
 * ```c
 * struct nk_context ctx;
 * nk_init_xxx(&ctx, ...);
 * while (1) {
 *     Event evt;
 *     nk_input_begin(&ctx);
 *     while (GetEvent(&evt)) {
 *         if (evt.type == MOUSE_MOVE)
 *             nk_input_motion(&ctx, evt.motion.x, evt.motion.y);
 *         else if (evt.type == [...]) {
 *             [...]
 *         }
 *     }
 *     nk_input_end(&ctx);
 *     //
 *     // [...]
 *     //
 *     const struct nk_command *cmd = 0;
 *     nk_foreach(cmd, &ctx) {
 *     switch (cmd->type) {
 *     case NK_COMMAND_LINE:
 *         your_draw_line_function(...)
 *         break;
 *     case NK_COMMAND_RECT
 *         your_draw_rect_function(...)
 *         break;
 *     case ...:
 *         // [...]
 *     }
 *     nk_clear(&ctx);
 * }
 * nk_free(&ctx);
 * ```
 *
 * You probably noticed that you have to draw all of the UI each frame which is
 * quite wasteful. While the actual UI updating loop is quite fast rendering
 * without actually needing it is not. So there are multiple things you could do.
 *
 * First is only update on input. This of course is only an option if your
 * application only depends on the UI and does not require any outside calculations.
 * If you actually only update on input make sure to update the UI two times each
 * frame and call `nk_clear` directly after the first pass and only draw in
 * the second pass. In addition it is recommended to also add additional timers
 * to make sure the UI is not drawn more than a fixed number of frames per second.
 *
 * ```c
 * struct nk_context ctx;
 * nk_init_xxx(&ctx, ...);
 * while (1) {
 *     // [...wait for input ]
 *     // [...do two UI passes ...]
 *     do_ui(...)
 *     nk_clear(&ctx);
 *     do_ui(...)
 *     //
 *     // draw
 *     const struct nk_command *cmd = 0;
 *     nk_foreach(cmd, &ctx) {
 *     switch (cmd->type) {
 *     case NK_COMMAND_LINE:
 *         your_draw_line_function(...)
 *         break;
 *     case NK_COMMAND_RECT
 *         your_draw_rect_function(...)
 *         break;
 *     case ...:
 *         //[...]
 *     }
 *     nk_clear(&ctx);
 * }
 * nk_free(&ctx);
 * ```
 *
 * The second probably more applicable trick is to only draw if anything changed.
 * It is not really useful for applications with continuous draw loop but
 * quite useful for desktop applications. To actually get nuklear to only
 * draw on changes you first have to define `NK_ZERO_COMMAND_MEMORY` and
 * allocate a memory buffer that will store each unique drawing output.
 * After each frame you compare the draw command memory inside the library
 * with your allocated buffer by memcmp. If memcmp detects differences
 * you have to copy the command buffer into the allocated buffer
 * and then draw like usual (this example uses fixed memory but you could
 * use dynamically allocated memory).
 *
 * ```c
 * //[... other defines ...]
 * #define NK_ZERO_COMMAND_MEMORY
 * #include "nuklear.h"
 * //
 * // setup context
 * struct nk_context ctx;
 * void *last = calloc(1,64*1024);
 * void *buf = calloc(1,64*1024);
 * nk_init_fixed(&ctx, buf, 64*1024);
 * //
 * // loop
 * while (1) {
 *     // [...input...]
 *     // [...ui...]
 *     void *cmds = nk_buffer_memory(&ctx.memory);
 *     if (memcmp(cmds, last, ctx.memory.allocated)) {
 *         memcpy(last,cmds,ctx.memory.allocated);
 *         const struct nk_command *cmd = 0;
 *         nk_foreach(cmd, &ctx) {
 *             switch (cmd->type) {
 *             case NK_COMMAND_LINE:
 *                 your_draw_line_function(...)
 *                 break;
 *             case NK_COMMAND_RECT
 *                 your_draw_rect_function(...)
 *                 break;
 *             case ...:
 *                 // [...]
 *             }
 *         }
 *     }
 *     nk_clear(&ctx);
 * }
 * nk_free(&ctx);
 * ```
 *
 * Finally while using draw commands makes sense for higher abstracted platforms like
 * X11 and Win32 or drawing libraries it is often desirable to use graphics
 * hardware directly. Therefore it is possible to just define
 * `NK_INCLUDE_VERTEX_BUFFER_OUTPUT` which includes optional vertex output.
 * To access the vertex output you first have to convert all draw commands into
 * vertexes by calling `nk_convert` which takes in your preferred vertex format.
 * After successfully converting all draw commands just iterate over and execute all
 * vertex draw commands:
 *
 * ```c
 * // fill configuration
 * struct your_vertex
 * {
 *     float pos[2]; // important to keep it to 2 floats
 *     float uv[2];
 *     unsigned char col[4];
 * };
 * struct nk_convert_config cfg = {};
 * static const struct nk_draw_vertex_layout_element vertex_layout[] = {
 *     {NK_VERTEX_POSITION, NK_FORMAT_FLOAT, NK_OFFSETOF(struct your_vertex, pos)},
 *     {NK_VERTEX_TEXCOORD, NK_FORMAT_FLOAT, NK_OFFSETOF(struct your_vertex, uv)},
 *     {NK_VERTEX_COLOR, NK_FORMAT_R8G8B8A8, NK_OFFSETOF(struct your_vertex, col)},
 *     {NK_VERTEX_LAYOUT_END}
 * };
 * cfg.shape_AA = NK_ANTI_ALIASING_ON;
 * cfg.line_AA = NK_ANTI_ALIASING_ON;
 * cfg.vertex_layout = vertex_layout;
 * cfg.vertex_size = sizeof(struct your_vertex);
 * cfg.vertex_alignment = NK_ALIGNOF(struct your_vertex);
 * cfg.circle_segment_count = 22;
 * cfg.curve_segment_count = 22;
 * cfg.arc_segment_count = 22;
 * cfg.global_alpha = 1.0f;
 * cfg.tex_null = dev->tex_null;
 * //
 * // setup buffers and convert
 * struct nk_buffer cmds, verts, idx;
 * nk_buffer_init_default(&cmds);
 * nk_buffer_init_default(&verts);
 * nk_buffer_init_default(&idx);
 * nk_convert(&ctx, &cmds, &verts, &idx, &cfg);
 * //
 * // draw
 * nk_draw_foreach(cmd, &ctx, &cmds) {
 * if (!cmd->elem_count) continue;
 *     //[...]
 * }
 * nk_buffer_free(&cms);
 * nk_buffer_free(&verts);
 * nk_buffer_free(&idx);
 * ```
 *
 * # Reference
 * Function            | Description
 * --------------------|-------------------------------------------------------
 * \ref nk__begin       | Returns the first draw command in the context draw command list to be drawn
 * \ref nk__next        | Increments the draw command iterator to the next command inside the context draw command list
 * \ref nk_foreach      | Iterates over each draw command inside the context draw command list
 * \ref nk_convert      | Converts from the abstract draw commands list into a hardware accessible vertex format
 * \ref nk_draw_begin   | Returns the first vertex command in the context vertex draw list to be executed
 * \ref nk__draw_next   | Increments the vertex command iterator to the next command inside the context vertex command list
 * \ref nk__draw_end    | Returns the end of the vertex draw list
 * \ref nk_draw_foreach | Iterates over each vertex draw command inside the vertex draw list
 */

enum nk_anti_aliasing {NK_ANTI_ALIASING_OFF, NK_ANTI_ALIASING_ON};
enum nk_convert_result {
    NK_CONVERT_SUCCESS = 0,
    NK_CONVERT_INVALID_PARAM = 1,
    NK_CONVERT_COMMAND_BUFFER_FULL = NK_FLAG(1),
    NK_CONVERT_VERTEX_BUFFER_FULL = NK_FLAG(2),
    NK_CONVERT_ELEMENT_BUFFER_FULL = NK_FLAG(3)
};
struct nk_draw_null_texture {
    nk_handle texture; /**!< texture handle to a texture with a white pixel */
    struct nk_vec2 uv; /**!< coordinates to a white pixel in the texture  */
};
struct nk_convert_config {
    float global_alpha;             /**!< global alpha value */
    enum nk_anti_aliasing line_AA;  /**!< line anti-aliasing flag can be turned off if you are tight on memory */
    enum nk_anti_aliasing shape_AA; /**!< shape anti-aliasing flag can be turned off if you are tight on memory */
    unsigned circle_segment_count;  /**!< number of segments used for circles: default to 22 */
    unsigned arc_segment_count;     /**!< number of segments used for arcs: default to 22 */
    unsigned curve_segment_count;   /**!< number of segments used for curves: default to 22 */
    struct nk_draw_null_texture tex_null; /**!< handle to texture with a white pixel for shape drawing */
    const struct nk_draw_vertex_layout_element *vertex_layout; /**!< describes the vertex output format and packing */
    nk_size vertex_size;      /**!< sizeof one vertex for vertex packing */
    nk_size vertex_alignment; /**!< vertex alignment: Can be obtained by NK_ALIGNOF */
};

/**
 * \brief Returns a draw command list iterator to iterate all draw
 * commands accumulated over one frame.
 *
 * \details
 * ```c
 * const struct nk_command* nk__begin(struct nk_context*);
 * ```
 *
 * \param[in] ctx     | must point to an previously initialized `nk_context` struct at the end of a frame
 *
 * \returns draw command pointer pointing to the first command inside the draw command list
 */
NK_API const struct nk_command* nk__begin(struct nk_context*);

/**
 * \brief Returns draw command pointer pointing to the next command inside the draw command list
 *
 * \details
 * ```c
 * const struct nk_command* nk__next(struct nk_context*, const struct nk_command*);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct at the end of a frame
 * \param[in] cmd     | Must point to an previously a draw command either returned by `nk__begin` or `nk__next`
 *
 * \returns draw command pointer pointing to the next command inside the draw command list
 */
NK_API const struct nk_command* nk__next(struct nk_context*, const struct nk_command*);

/**
 * \brief Iterates over each draw command inside the context draw command list
 *
 * ```c
 * #define nk_foreach(c, ctx)
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct at the end of a frame
 * \param[in] cmd     | Command pointer initialized to NULL
 */
#define nk_foreach(c, ctx) for((c) = nk__begin(ctx); (c) != 0; (c) = nk__next(ctx,c))

#ifdef NK_INCLUDE_VERTEX_BUFFER_OUTPUT

/**
 * \brief Converts all internal draw commands into vertex draw commands and fills
 * three buffers with vertexes, vertex draw commands and vertex indices.
 *
 * \details
 * The vertex format as well as some other configuration values have to be
 * configured by filling out a `nk_convert_config` struct.
 *
 * ```c
 * nk_flags nk_convert(struct nk_context *ctx, struct nk_buffer *cmds,
 *     struct nk_buffer *vertices, struct nk_buffer *elements, const struct nk_convert_config*);
 * ```
 *
 * \param[in] ctx      Must point to an previously initialized `nk_context` struct at the end of a frame
 * \param[out] cmds     Must point to a previously initialized buffer to hold converted vertex draw commands
 * \param[out] vertices Must point to a previously initialized buffer to hold all produced vertices
 * \param[out] elements Must point to a previously initialized buffer to hold all produced vertex indices
 * \param[in] config   Must point to a filled out `nk_config` struct to configure the conversion process
 *
 * \returns one of enum nk_convert_result error codes
 *
 * Parameter                       | Description
 * --------------------------------|-----------------------------------------------------------
 * NK_CONVERT_SUCCESS              | Signals a successful draw command to vertex buffer conversion
 * NK_CONVERT_INVALID_PARAM        | An invalid argument was passed in the function call
 * NK_CONVERT_COMMAND_BUFFER_FULL  | The provided buffer for storing draw commands is full or failed to allocate more memory
 * NK_CONVERT_VERTEX_BUFFER_FULL   | The provided buffer for storing vertices is full or failed to allocate more memory
 * NK_CONVERT_ELEMENT_BUFFER_FULL  | The provided buffer for storing indices is full or failed to allocate more memory
 */
NK_API nk_flags nk_convert(struct nk_context*, struct nk_buffer *cmds, struct nk_buffer *vertices, struct nk_buffer *elements, const struct nk_convert_config*);

/**
 * \brief Returns a draw vertex command buffer iterator to iterate over the vertex draw command buffer
 *
 * \details
 * ```c
 * const struct nk_draw_command* nk__draw_begin(const struct nk_context*, const struct nk_buffer*);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct at the end of a frame
 * \param[in] buf     | Must point to an previously by `nk_convert` filled out vertex draw command buffer
 *
 * \returns vertex draw command pointer pointing to the first command inside the vertex draw command buffer
 */
NK_API const struct nk_draw_command* nk__draw_begin(const struct nk_context*, const struct nk_buffer*);

/**

 * # # nk__draw_end
 * \returns the vertex draw command at the end of the vertex draw command buffer
 *
 * ```c
 * const struct nk_draw_command* nk__draw_end(const struct nk_context *ctx, const struct nk_buffer *buf);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct at the end of a frame
 * \param[in] buf     | Must point to an previously by `nk_convert` filled out vertex draw command buffer
 *
 * \returns vertex draw command pointer pointing to the end of the last vertex draw command inside the vertex draw command buffer

 */
NK_API const struct nk_draw_command* nk__draw_end(const struct nk_context*, const struct nk_buffer*);

/**
 * # # nk__draw_next
 * Increments the vertex draw command buffer iterator
 *
 * ```c
 * const struct nk_draw_command* nk__draw_next(const struct nk_draw_command*, const struct nk_buffer*, const struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] cmd     | Must point to an previously either by `nk__draw_begin` or `nk__draw_next` returned vertex draw command
 * \param[in] buf     | Must point to an previously by `nk_convert` filled out vertex draw command buffer
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct at the end of a frame
 *
 * \returns vertex draw command pointer pointing to the end of the last vertex draw command inside the vertex draw command buffer

 */
NK_API const struct nk_draw_command* nk__draw_next(const struct nk_draw_command*, const struct nk_buffer*, const struct nk_context*);

/**
 * # # nk_draw_foreach
 * Iterates over each vertex draw command inside a vertex draw command buffer
 *
 * ```c
 * #define nk_draw_foreach(cmd,ctx, b)
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] cmd     | `nk_draw_command`iterator set to NULL
 * \param[in] buf     | Must point to an previously by `nk_convert` filled out vertex draw command buffer
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct at the end of a frame
 */

#define nk_draw_foreach(cmd,ctx, b) for((cmd)=nk__draw_begin(ctx, b); (cmd)!=0; (cmd)=nk__draw_next(cmd, b, ctx))
#endif

/* =============================================================================
 *
 *                                  WINDOW
 *
 * =============================================================================*/
/**
 * \page Window
 * Windows are the main persistent state used inside nuklear and are life time
 * controlled by simply "retouching" (i.e.\ calling) each window each frame.
 * All widgets inside nuklear can only be added inside the function pair `nk_begin_xxx`
 * and `nk_end`. Calling any widgets outside these two functions will result in an
 * assert in debug or no state change in release mode.<br /><br />
 *
 * Each window holds frame persistent state like position, size, flags, state tables,
 * and some garbage collected internal persistent widget state. Each window
 * is linked into a window stack list which determines the drawing and overlapping
 * order. The topmost window thereby is the currently active window.<br /><br />
 *
 * To change window position inside the stack occurs either automatically by
 * user input by being clicked on or programmatically by calling `nk_window_focus`.
 * Windows by default are visible unless explicitly being defined with flag
 * `NK_WINDOW_HIDDEN`, the user clicked the close button on windows with flag
 * `NK_WINDOW_CLOSABLE` or if a window was explicitly hidden by calling
 * `nk_window_show`. To explicitly close and destroy a window call `nk_window_close`.<br /><br />
 *
 * # Usage
 * To create and keep a window you have to call one of the two `nk_begin_xxx`
 * functions to start window declarations and `nk_end` at the end. Furthermore it
 * is recommended to check the return value of `nk_begin_xxx` and only process
 * widgets inside the window if the value is not 0. Either way you have to call
 * `nk_end` at the end of window declarations. Furthermore, do not attempt to
 * nest `nk_begin_xxx` calls which will hopefully result in an assert or if not
 * in a segmentation fault.
 *
 * ```c
 * if (nk_begin_xxx(...) {
 *     // [... widgets ...]
 * }
 * nk_end(ctx);
 * ```
 *
 * In the grand concept window and widget declarations need to occur after input
 * handling and before drawing to screen. Not doing so can result in higher
 * latency or at worst invalid behavior. Furthermore make sure that `nk_clear`
 * is called at the end of the frame. While nuklear's default platform backends
 * already call `nk_clear` for you if you write your own backend not calling
 * `nk_clear` can cause asserts or even worse undefined behavior.
 *
 * ```c
 * struct nk_context ctx;
 * nk_init_xxx(&ctx, ...);
 * while (1) {
 *     Event evt;
 *     nk_input_begin(&ctx);
 *     while (GetEvent(&evt)) {
 *         if (evt.type == MOUSE_MOVE)
 *             nk_input_motion(&ctx, evt.motion.x, evt.motion.y);
 *         else if (evt.type == [...]) {
 *             nk_input_xxx(...);
 *         }
 *     }
 *     nk_input_end(&ctx);
 *
 *     if (nk_begin_xxx(...) {
 *         //[...]
 *     }
 *     nk_end(ctx);
 *
 *     const struct nk_command *cmd = 0;
 *     nk_foreach(cmd, &ctx) {
 *     case NK_COMMAND_LINE:
 *         your_draw_line_function(...)
 *         break;
 *     case NK_COMMAND_RECT
 *         your_draw_rect_function(...)
 *         break;
 *     case //...:
 *         //[...]
 *     }
 *     nk_clear(&ctx);
 * }
 * nk_free(&ctx);
 * ```
 *
 * # Reference
 * Function                                 | Description
 * -----------------------------------------|----------------------------------------
 * \ref nk_begin                            | Starts a new window; needs to be called every frame for every window (unless hidden) or otherwise the window gets removed
 * \ref nk_begin_titled                     | Extended window start with separated title and identifier to allow multiple windows with same name but not title
 * \ref nk_end                              | Needs to be called at the end of the window building process to process scaling, scrollbars and general cleanup
 *
 * Function                                 | Description
 * -----------------------------------------|----------------------------------------
 * \ref nk_window_find                      | Finds and returns the window with give name
 * \ref nk_window_get_bounds                | Returns a rectangle with screen position and size of the currently processed window.
 * \ref nk_window_get_position              | Returns the position of the currently processed window
 * \ref nk_window_get_size                  | Returns the size with width and height of the currently processed window
 * \ref nk_window_get_width                 | Returns the width of the currently processed window
 * \ref nk_window_get_height                | Returns the height of the currently processed window
 * \ref nk_window_get_panel                 | Returns the underlying panel which contains all processing state of the current window
 * \ref nk_window_get_content_region        | Returns the position and size of the currently visible and non-clipped space inside the currently processed window
 * \ref nk_window_get_content_region_min    | Returns the upper rectangle position of the currently visible and non-clipped space inside the currently processed window
 * \ref nk_window_get_content_region_max    | Returns the upper rectangle position of the currently visible and non-clipped space inside the currently processed window
 * \ref nk_window_get_content_region_size   | Returns the size of the currently visible and non-clipped space inside the currently processed window
 * \ref nk_window_get_canvas                | Returns the draw command buffer. Can be used to draw custom widgets
 * \ref nk_window_get_scroll                | Gets the scroll offset of the current window
 * \ref nk_window_has_focus                 | Returns if the currently processed window is currently active
 * \ref nk_window_is_collapsed              | Returns if the window with given name is currently minimized/collapsed
 * \ref nk_window_is_closed                 | Returns if the currently processed window was closed
 * \ref nk_window_is_hidden                 | Returns if the currently processed window was hidden
 * \ref nk_window_is_active                 | Same as nk_window_has_focus for some reason
 * \ref nk_window_is_hovered                | Returns if the currently processed window is currently being hovered by mouse
 * \ref nk_window_is_any_hovered            | Return if any window currently hovered
 * \ref nk_item_is_any_active               | Returns if any window or widgets is currently hovered or active
 *
 * Function                                 | Description
 * -----------------------------------------|----------------------------------------
 * \ref nk_window_set_bounds                | Updates position and size of the currently processed window
 * \ref nk_window_set_position              | Updates position of the currently process window
 * \ref nk_window_set_size                  | Updates the size of the currently processed window
 * \ref nk_window_set_focus                 | Set the currently processed window as active window
 * \ref nk_window_set_scroll                | Sets the scroll offset of the current window
 *
 * Function                                 | Description
 * -----------------------------------------|----------------------------------------
 * \ref nk_window_close                     | Closes the window with given window name which deletes the window at the end of the frame
 * \ref nk_window_collapse                  | Collapses the window with given window name
 * \ref nk_window_collapse_if               | Collapses the window with given window name if the given condition was met
 * \ref nk_window_show                      | Hides a visible or reshows a hidden window
 * \ref nk_window_show_if                   | Hides/shows a window depending on condition

 * # nk_panel_flags
 * Flag                        | Description
 * ----------------------------|----------------------------------------
 * NK_WINDOW_BORDER            | Draws a border around the window to visually separate window from the background
 * NK_WINDOW_MOVABLE           | The movable flag indicates that a window can be moved by user input or by dragging the window header
 * NK_WINDOW_SCALABLE          | The scalable flag indicates that a window can be scaled by user input by dragging a scaler icon at the button of the window
 * NK_WINDOW_CLOSABLE          | Adds a closable icon into the header
 * NK_WINDOW_MINIMIZABLE       | Adds a minimize icon into the header
 * NK_WINDOW_NO_SCROLLBAR      | Removes the scrollbar from the window
 * NK_WINDOW_TITLE             | Forces a header at the top at the window showing the title
 * NK_WINDOW_SCROLL_AUTO_HIDE  | Automatically hides the window scrollbar if no user interaction: also requires delta time in `nk_context` to be set each frame
 * NK_WINDOW_BACKGROUND        | Always keep window in the background
 * NK_WINDOW_SCALE_LEFT        | Puts window scaler in the left-bottom corner instead right-bottom
 * NK_WINDOW_NO_INPUT          | Prevents window of scaling, moving or getting focus
 *
 * # nk_collapse_states
 * State           | Description
 * ----------------|-----------------------------------------------------------
 * NK_MINIMIZED| UI section is collapsed and not visible until maximized
 * NK_MAXIMIZED| UI section is extended and visible until minimized
 */

enum nk_panel_flags {
    NK_WINDOW_BORDER            = NK_FLAG(0),
    NK_WINDOW_MOVABLE           = NK_FLAG(1),
    NK_WINDOW_SCALABLE          = NK_FLAG(2),
    NK_WINDOW_CLOSABLE          = NK_FLAG(3),
    NK_WINDOW_MINIMIZABLE       = NK_FLAG(4),
    NK_WINDOW_NO_SCROLLBAR      = NK_FLAG(5),
    NK_WINDOW_TITLE             = NK_FLAG(6),
    NK_WINDOW_SCROLL_AUTO_HIDE  = NK_FLAG(7),
    NK_WINDOW_BACKGROUND        = NK_FLAG(8),
    NK_WINDOW_SCALE_LEFT        = NK_FLAG(9),
    NK_WINDOW_NO_INPUT          = NK_FLAG(10)
};

/**
 * # # nk_begin
 * Starts a new window; needs to be called every frame for every
 * window (unless hidden) or otherwise the window gets removed
 *
 * ```c
 * nk_bool nk_begin(struct nk_context *ctx, const char *title, struct nk_rect bounds, nk_flags flags);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] title   | Window title and identifier. Needs to be persistent over frames to identify the window
 * \param[in] bounds  | Initial position and window size. However if you do not define `NK_WINDOW_SCALABLE` or `NK_WINDOW_MOVABLE` you can set window position and size every frame
 * \param[in] flags   | Window flags defined in the nk_panel_flags section with a number of different window behaviors
 *
 * \returns `true(1)` if the window can be filled up with widgets from this point
 * until `nk_end` or `false(0)` otherwise for example if minimized

 */
NK_API nk_bool nk_begin(struct nk_context *ctx, const char *title, struct nk_rect bounds, nk_flags flags);

/**
 * # # nk_begin_titled
 * Extended window start with separated title and identifier to allow multiple
 * windows with same title but not name
 *
 * ```c
 * nk_bool nk_begin_titled(struct nk_context *ctx, const char *name, const char *title, struct nk_rect bounds, nk_flags flags);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Window identifier. Needs to be persistent over frames to identify the window
 * \param[in] title   | Window title displayed inside header if flag `NK_WINDOW_TITLE` or either `NK_WINDOW_CLOSABLE` or `NK_WINDOW_MINIMIZED` was set
 * \param[in] bounds  | Initial position and window size. However if you do not define `NK_WINDOW_SCALABLE` or `NK_WINDOW_MOVABLE` you can set window position and size every frame
 * \param[in] flags   | Window flags defined in the nk_panel_flags section with a number of different window behaviors
 *
 * \returns `true(1)` if the window can be filled up with widgets from this point
 * until `nk_end` or `false(0)` otherwise for example if minimized

 */
NK_API nk_bool nk_begin_titled(struct nk_context *ctx, const char *name, const char *title, struct nk_rect bounds, nk_flags flags);

/**
 * # # nk_end
 * Needs to be called at the end of the window building process to process scaling, scrollbars and general cleanup.
 * All widget calls after this functions will result in asserts or no state changes
 *
 * ```c
 * void nk_end(struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct

 */
NK_API void nk_end(struct nk_context *ctx);

/**
 * # # nk_window_find
 * Finds and returns a window from passed name
 *
 * ```c
 * struct nk_window *nk_window_find(struct nk_context *ctx, const char *name);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Window identifier
 *
 * \returns a `nk_window` struct pointing to the identified window or NULL if
 * no window with the given name was found
 */
NK_API struct nk_window *nk_window_find(const struct nk_context *ctx, const char *name);

/**
 * # # nk_window_get_bounds
 * \returns a rectangle with screen position and size of the currently processed window
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 * ```c
 * struct nk_rect nk_window_get_bounds(const struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns a `nk_rect` struct with window upper left window position and size

 */
NK_API struct nk_rect nk_window_get_bounds(const struct nk_context *ctx);

/**
 * # # nk_window_get_position
 * \returns the position of the currently processed window.
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 * ```c
 * struct nk_vec2 nk_window_get_position(const struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns a `nk_vec2` struct with window upper left position

 */
NK_API struct nk_vec2 nk_window_get_position(const struct nk_context *ctx);

/**
 * # # nk_window_get_size
 * \returns the size with width and height of the currently processed window.
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 * ```c
 * struct nk_vec2 nk_window_get_size(const struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns a `nk_vec2` struct with window width and height

 */
NK_API struct nk_vec2 nk_window_get_size(const struct nk_context *ctx);

/**
 * nk_window_get_width
 * \returns the width of the currently processed window.
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 * ```c
 * float nk_window_get_width(const struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns the current window width
 */
NK_API float nk_window_get_width(const struct nk_context *ctx);

/**
 * # # nk_window_get_height
 * \returns the height of the currently processed window.
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 * ```c
 * float nk_window_get_height(const struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns the current window height

 */
NK_API float nk_window_get_height(const struct nk_context* ctx);

/**
 * # # nk_window_get_panel
 * \returns the underlying panel which contains all processing state of the current window.
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 * !!! \warning
 *     Do not keep the returned panel pointer around, it is only valid until `nk_end`
 * ```c
 * struct nk_panel* nk_window_get_panel(struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns a pointer to window internal `nk_panel` state.

 */
NK_API struct nk_panel* nk_window_get_panel(const struct nk_context* ctx);

/**
 * # # nk_window_get_content_region
 * \returns the position and size of the currently visible and non-clipped space
 * inside the currently processed window.
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 *
 * ```c
 * struct nk_rect nk_window_get_content_region(struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns `nk_rect` struct with screen position and size (no scrollbar offset)
 * of the visible space inside the current window

 */
NK_API struct nk_rect nk_window_get_content_region(const struct nk_context* ctx);

/**
 * # # nk_window_get_content_region_min
 * \returns the upper left position of the currently visible and non-clipped
 * space inside the currently processed window.
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 *
 * ```c
 * struct nk_vec2 nk_window_get_content_region_min(struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * returns `nk_vec2` struct with  upper left screen position (no scrollbar offset)
 * of the visible space inside the current window

 */
NK_API struct nk_vec2 nk_window_get_content_region_min(const struct nk_context *ctx);

/**
 * # # nk_window_get_content_region_max
 * \returns the lower right screen position of the currently visible and
 * non-clipped space inside the currently processed window.
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 *
 * ```c
 * struct nk_vec2 nk_window_get_content_region_max(struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns `nk_vec2` struct with lower right screen position (no scrollbar offset)
 * of the visible space inside the current window

 */
NK_API struct nk_vec2 nk_window_get_content_region_max(const struct nk_context *ctx);

/**
 * # # nk_window_get_content_region_size
 * \returns the size of the currently visible and non-clipped space inside the
 * currently processed window
 *
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 *
 * ```c
 * struct nk_vec2 nk_window_get_content_region_size(struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns `nk_vec2` struct with size the visible space inside the current window

 */
NK_API struct nk_vec2 nk_window_get_content_region_size(const struct nk_context *ctx);

/**
 * # # nk_window_get_canvas
 * \returns the draw command buffer. Can be used to draw custom widgets
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 * !!! \warning
 *     Do not keep the returned command buffer pointer around it is only valid until `nk_end`
 *
 * ```c
 * struct nk_command_buffer* nk_window_get_canvas(struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns a pointer to window internal `nk_command_buffer` struct used as
 * drawing canvas. Can be used to do custom drawing.
 */
NK_API struct nk_command_buffer* nk_window_get_canvas(const struct nk_context* ctx);

/**
 * # # nk_window_get_scroll
 * Gets the scroll offset for the current window
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 *
 * ```c
 * void nk_window_get_scroll(struct nk_context *ctx, nk_uint *offset_x, nk_uint *offset_y);
 * ```
 *
 * Parameter    | Description
 * -------------|-----------------------------------------------------------
 * \param[in] ctx      | Must point to an previously initialized `nk_context` struct
 * \param[in] offset_x | A pointer to the x offset output (or NULL to ignore)
 * \param[in] offset_y | A pointer to the y offset output (or NULL to ignore)

 */
NK_API void nk_window_get_scroll(const struct nk_context *ctx, nk_uint *offset_x, nk_uint *offset_y);

/**
 * # # nk_window_has_focus
 * \returns if the currently processed window is currently active
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 * ```c
 * nk_bool nk_window_has_focus(const struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns `false(0)` if current window is not active or `true(1)` if it is

 */
NK_API nk_bool nk_window_has_focus(const struct nk_context *ctx);

/**
 * # # nk_window_is_hovered
 * Return if the current window is being hovered
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 * ```c
 * nk_bool nk_window_is_hovered(struct nk_context *ctx);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns `true(1)` if current window is hovered or `false(0)` otherwise

 */
NK_API nk_bool nk_window_is_hovered(const struct nk_context *ctx);

/**
 * # # nk_window_is_collapsed
 * \returns if the window with given name is currently minimized/collapsed
 * ```c
 * nk_bool nk_window_is_collapsed(struct nk_context *ctx, const char *name);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of window you want to check if it is collapsed
 *
 * \returns `true(1)` if current window is minimized and `false(0)` if window not
 * found or is not minimized

 */
NK_API nk_bool nk_window_is_collapsed(const struct nk_context *ctx, const char *name);

/**
 * # # nk_window_is_closed
 * \returns if the window with given name was closed by calling `nk_close`
 * ```c
 * nk_bool nk_window_is_closed(struct nk_context *ctx, const char *name);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of window you want to check if it is closed
 *
 * \returns `true(1)` if current window was closed or `false(0)` window not found or not closed

 */
NK_API nk_bool nk_window_is_closed(const struct nk_context *ctx, const char* name);

/**
 * # # nk_window_is_hidden
 * \returns if the window with given name is hidden
 * ```c
 * nk_bool nk_window_is_hidden(struct nk_context *ctx, const char *name);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of window you want to check if it is hidden
 *
 * \returns `true(1)` if current window is hidden or `false(0)` window not found or visible

 */
NK_API nk_bool nk_window_is_hidden(const struct nk_context *ctx, const char* name);

/**
 * # # nk_window_is_active
 * Same as nk_window_has_focus for some reason
 * ```c
 * nk_bool nk_window_is_active(struct nk_context *ctx, const char *name);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of window you want to check if it is active
 *
 * \returns `true(1)` if current window is active or `false(0)` window not found or not active
 */
NK_API nk_bool nk_window_is_active(const struct nk_context *ctx, const char* name);

/**
 * # # nk_window_is_any_hovered
 * \returns if the any window is being hovered
 * ```c
 * nk_bool nk_window_is_any_hovered(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns `true(1)` if any window is hovered or `false(0)` otherwise
 */
NK_API nk_bool nk_window_is_any_hovered(const struct nk_context *ctx);

/**
 * # # nk_item_is_any_active
 * \returns if the any window is being hovered or any widget is currently active.
 * Can be used to decide if input should be processed by UI or your specific input handling.
 * Example could be UI and 3D camera to move inside a 3D space.
 * ```c
 * nk_bool nk_item_is_any_active(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 *
 * \returns `true(1)` if any window is hovered or any item is active or `false(0)` otherwise

 */
NK_API nk_bool nk_item_is_any_active(const struct nk_context *ctx);

/**
 * # # nk_window_set_bounds
 * Updates position and size of window with passed in name
 * ```c
 * void nk_window_set_bounds(struct nk_context*, const char *name, struct nk_rect bounds);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of the window to modify both position and size
 * \param[in] bounds  | Must point to a `nk_rect` struct with the new position and size

 */
NK_API void nk_window_set_bounds(struct nk_context *ctx, const char *name, struct nk_rect bounds);

/**
 * # # nk_window_set_position
 * Updates position of window with passed name
 * ```c
 * void nk_window_set_position(struct nk_context*, const char *name, struct nk_vec2 pos);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of the window to modify both position
 * \param[in] pos     | Must point to a `nk_vec2` struct with the new position

 */
NK_API void nk_window_set_position(struct nk_context *ctx, const char *name, struct nk_vec2 pos);

/**
 * # # nk_window_set_size
 * Updates size of window with passed in name
 * ```c
 * void nk_window_set_size(struct nk_context*, const char *name, struct nk_vec2);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of the window to modify both window size
 * \param[in] size    | Must point to a `nk_vec2` struct with new window size

 */
NK_API void nk_window_set_size(struct nk_context *ctx, const char *name, struct nk_vec2 size);

/**
 * # # nk_window_set_focus
 * Sets the window with given name as active
 * ```c
 * void nk_window_set_focus(struct nk_context*, const char *name);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of the window to set focus on

 */
NK_API void nk_window_set_focus(struct nk_context *ctx, const char *name);

/**
 * # # nk_window_set_scroll
 * Sets the scroll offset for the current window
 * !!! \warning
 *     Only call this function between calls `nk_begin_xxx` and `nk_end`
 *
 * ```c
 * void nk_window_set_scroll(struct nk_context *ctx, nk_uint offset_x, nk_uint offset_y);
 * ```
 *
 * Parameter    | Description
 * -------------|-----------------------------------------------------------
 * \param[in] ctx      | Must point to an previously initialized `nk_context` struct
 * \param[in] offset_x | The x offset to scroll to
 * \param[in] offset_y | The y offset to scroll to

 */
NK_API void nk_window_set_scroll(struct nk_context *ctx, nk_uint offset_x, nk_uint offset_y);

/**
 * # # nk_window_close
 * Closes a window and marks it for being freed at the end of the frame
 * ```c
 * void nk_window_close(struct nk_context *ctx, const char *name);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of the window to close

 */
NK_API void nk_window_close(struct nk_context *ctx, const char *name);

/**
 * # # nk_window_collapse
 * Updates collapse state of a window with given name
 * ```c
 * void nk_window_collapse(struct nk_context*, const char *name, enum nk_collapse_states state);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of the window to close
 * \param[in] state   | value out of nk_collapse_states section

 */
NK_API void nk_window_collapse(struct nk_context *ctx, const char *name, enum nk_collapse_states state);

/**
 * # # nk_window_collapse_if
 * Updates collapse state of a window with given name if given condition is met
 * ```c
 * void nk_window_collapse_if(struct nk_context*, const char *name, enum nk_collapse_states, int cond);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of the window to either collapse or maximize
 * \param[in] state   | value out of nk_collapse_states section the window should be put into
 * \param[in] cond    | condition that has to be met to actually commit the collapse state change

 */
NK_API void nk_window_collapse_if(struct nk_context *ctx, const char *name, enum nk_collapse_states state, int cond);

/**
 * # # nk_window_show
 * updates visibility state of a window with given name
 * ```c
 * void nk_window_show(struct nk_context*, const char *name, enum nk_show_states);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of the window to either collapse or maximize
 * \param[in] state   | state with either visible or hidden to modify the window with
 */
NK_API void nk_window_show(struct nk_context *ctx, const char *name, enum nk_show_states state);

/**
 * # # nk_window_show_if
 * Updates visibility state of a window with given name if a given condition is met
 * ```c
 * void nk_window_show_if(struct nk_context*, const char *name, enum nk_show_states, int cond);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] name    | Identifier of the window to either hide or show
 * \param[in] state   | state with either visible or hidden to modify the window with
 * \param[in] cond    | condition that has to be met to actually commit the visibility state change

 */
NK_API void nk_window_show_if(struct nk_context *ctx, const char *name, enum nk_show_states state, int cond);

/**
 * # # nk_window_show_if
 * Line for visual separation. Draws a line with thickness determined by the current row height.
 * ```c
 * void nk_rule_horizontal(struct nk_context *ctx, struct nk_color color, nk_bool rounding)
 * ```
 *
 * Parameter       | Description
 * ----------------|-------------------------------------------------------
 * \param[in] ctx         | Must point to an previously initialized `nk_context` struct
 * \param[in] color       | Color of the horizontal line
 * \param[in] rounding    | Whether or not to make the line round
 */
NK_API void nk_rule_horizontal(struct nk_context *ctx, struct nk_color color, nk_bool rounding);

/* =============================================================================
 *
 *                                  LAYOUT
 *
 * =============================================================================*/
/**
 * \page Layouting
 * Layouting in general describes placing widget inside a window with position and size.
 * While in this particular implementation there are five different APIs for layouting
 * each with different trade offs between control and ease of use. <br /><br />
 *
 * All layouting methods in this library are based around the concept of a row.
 * A row has a height the window content grows by and a number of columns and each
 * layouting method specifies how each widget is placed inside the row.
 * After a row has been allocated by calling a layouting functions and then
 * filled with widgets will advance an internal pointer over the allocated row. <br /><br />
 *
 * To actually define a layout you just call the appropriate layouting function
 * and each subsequent widget call will place the widget as specified. Important
 * here is that if you define more widgets then columns defined inside the layout
 * functions it will allocate the next row without you having to make another layouting call. <br /><br />
 *
 * Biggest limitation with using all these APIs outside the `nk_layout_space_xxx` API
 * is that you have to define the row height for each. However the row height
 * often depends on the height of the font. <br /><br />
 *
 * To fix that internally nuklear uses a minimum row height that is set to the
 * height plus padding of currently active font and overwrites the row height
 * value if zero. <br /><br />
 *
 * If you manually want to change the minimum row height then
 * use nk_layout_set_min_row_height, and use nk_layout_reset_min_row_height to
 * reset it back to be derived from font height. <br /><br />
 *
 * Also if you change the font in nuklear it will automatically change the minimum
 * row height for you and. This means if you change the font but still want
 * a minimum row height smaller than the font you have to repush your value. <br /><br />
 *
 * For actually more advanced UI I would even recommend using the `nk_layout_space_xxx`
 * layouting method in combination with a cassowary constraint solver (there are
 * some versions on github with permissive license model) to take over all control over widget
 * layouting yourself. However for quick and dirty layouting using all the other layouting
 * functions should be fine.
 *
 * # Usage
 * 1. __nk_layout_row_dynamic__<br /><br />
 *    The easiest layouting function is `nk_layout_row_dynamic`. It provides each
 *    widgets with same horizontal space inside the row and dynamically grows
 *    if the owning window grows in width. So the number of columns dictates
 *    the size of each widget dynamically by formula:
 *
 *    ```c
 *    widget_width = (window_width - padding - spacing) * (1/column_count)
 *    ```
 *
 *    Just like all other layouting APIs if you define more widget than columns this
 *    library will allocate a new row and keep all layouting parameters previously
 *    defined.
 *
 *    ```c
 *    if (nk_begin_xxx(...) {
 *        // first row with height: 30 composed of two widgets
 *        nk_layout_row_dynamic(&ctx, 30, 2);
 *        nk_widget(...);
 *        nk_widget(...);
 *        //
 *        // second row with same parameter as defined above
 *        nk_widget(...);
 *        nk_widget(...);
 *        //
 *        // third row uses 0 for height which will use auto layouting
 *        nk_layout_row_dynamic(&ctx, 0, 2);
 *        nk_widget(...);
 *        nk_widget(...);
 *    }
 *    nk_end(...);
 *    ```
 *
 * 2. __nk_layout_row_static__<br /><br />
 *    Another easy layouting function is `nk_layout_row_static`. It provides each
 *    widget with same horizontal pixel width inside the row and does not grow
 *    if the owning window scales smaller or bigger.
 *
 *    ```c
 *    if (nk_begin_xxx(...) {
 *        // first row with height: 30 composed of two widgets with width: 80
 *        nk_layout_row_static(&ctx, 30, 80, 2);
 *        nk_widget(...);
 *        nk_widget(...);
 *        //
 *        // second row with same parameter as defined above
 *        nk_widget(...);
 *        nk_widget(...);
 *        //
 *        // third row uses 0 for height which will use auto layouting
 *        nk_layout_row_static(&ctx, 0, 80, 2);
 *        nk_widget(...);
 *        nk_widget(...);
 *    }
 *    nk_end(...);
 *    ```
 *
 * 3. __nk_layout_row_xxx__<br /><br />
 *    A little bit more advanced layouting API are functions `nk_layout_row_begin`,
 *    `nk_layout_row_push` and `nk_layout_row_end`. They allow to directly
 *    specify each column pixel or window ratio in a row. It supports either
 *    directly setting per column pixel width or widget window ratio but not
 *    both. Furthermore it is a immediate mode API so each value is directly
 *    pushed before calling a widget. Therefore the layout is not automatically
 *    repeating like the last two layouting functions.
 *
 *    ```c
 *    if (nk_begin_xxx(...) {
 *        // first row with height: 25 composed of two widgets with width 60 and 40
 *        nk_layout_row_begin(ctx, NK_STATIC, 25, 2);
 *        nk_layout_row_push(ctx, 60);
 *        nk_widget(...);
 *        nk_layout_row_push(ctx, 40);
 *        nk_widget(...);
 *        nk_layout_row_end(ctx);
 *        //
 *        // second row with height: 25 composed of two widgets with window ratio 0.25 and 0.75
 *        nk_layout_row_begin(ctx, NK_DYNAMIC, 25, 2);
 *        nk_layout_row_push(ctx, 0.25f);
 *        nk_widget(...);
 *        nk_layout_row_push(ctx, 0.75f);
 *        nk_widget(...);
 *        nk_layout_row_end(ctx);
 *        //
 *        // third row with auto generated height: composed of two widgets with window ratio 0.25 and 0.75
 *        nk_layout_row_begin(ctx, NK_DYNAMIC, 0, 2);
 *        nk_layout_row_push(ctx, 0.25f);
 *        nk_widget(...);
 *        nk_layout_row_push(ctx, 0.75f);
 *        nk_widget(...);
 *        nk_layout_row_end(ctx);
 *    }
 *    nk_end(...);
 *    ```
 *
 * 4. __nk_layout_row__<br /><br />
 *    The array counterpart to API nk_layout_row_xxx is the single nk_layout_row
 *    functions. Instead of pushing either pixel or window ratio for every widget
 *    it allows to define it by array. The trade of for less control is that
 *    `nk_layout_row` is automatically repeating. Otherwise the behavior is the
 *    same.
 *
 *    ```c
 *    if (nk_begin_xxx(...) {
 *        // two rows with height: 30 composed of two widgets with width 60 and 40
 *        const float ratio[] = {60,40};
 *        nk_layout_row(ctx, NK_STATIC, 30, 2, ratio);
 *        nk_widget(...);
 *        nk_widget(...);
 *        nk_widget(...);
 *        nk_widget(...);
 *        //
 *        // two rows with height: 30 composed of two widgets with window ratio 0.25 and 0.75
 *        const float ratio[] = {0.25, 0.75};
 *        nk_layout_row(ctx, NK_DYNAMIC, 30, 2, ratio);
 *        nk_widget(...);
 *        nk_widget(...);
 *        nk_widget(...);
 *        nk_widget(...);
 *        //
 *        // two rows with auto generated height composed of two widgets with window ratio 0.25 and 0.75
 *        const float ratio[] = {0.25, 0.75};
 *        nk_layout_row(ctx, NK_DYNAMIC, 30, 2, ratio);
 *        nk_widget(...);
 *        nk_widget(...);
 *        nk_widget(...);
 *        nk_widget(...);
 *    }
 *    nk_end(...);
 *    ```
 *
 * 5. __nk_layout_row_template_xxx__<br /><br />
 *    The most complex and second most flexible API is a simplified flexbox version without
 *    line wrapping and weights for dynamic widgets. It is an immediate mode API but
 *    unlike `nk_layout_row_xxx` it has auto repeat behavior and needs to be called
 *    before calling the templated widgets.
 *    The row template layout has three different per widget size specifier. The first
 *    one is the `nk_layout_row_template_push_static`  with fixed widget pixel width.
 *    They do not grow if the row grows and will always stay the same.
 *    The second size specifier is `nk_layout_row_template_push_variable`
 *    which defines a minimum widget size but it also can grow if more space is available
 *    not taken by other widgets.
 *    Finally there are dynamic widgets with `nk_layout_row_template_push_dynamic`
 *    which are completely flexible and unlike variable widgets can even shrink
 *    to zero if not enough space is provided.
 *
 *    ```c
 *    if (nk_begin_xxx(...) {
 *        // two rows with height: 30 composed of three widgets
 *        nk_layout_row_template_begin(ctx, 30);
 *        nk_layout_row_template_push_dynamic(ctx);
 *        nk_layout_row_template_push_variable(ctx, 80);
 *        nk_layout_row_template_push_static(ctx, 80);
 *        nk_layout_row_template_end(ctx);
 *        //
 *        // first row
 *        nk_widget(...); // dynamic widget can go to zero if not enough space
 *        nk_widget(...); // variable widget with min 80 pixel but can grow bigger if enough space
 *        nk_widget(...); // static widget with fixed 80 pixel width
 *        //
 *        // second row same layout
 *        nk_widget(...);
 *        nk_widget(...);
 *        nk_widget(...);
 *    }
 *    nk_end(...);
 *    ```
 *
 * 6. __nk_layout_space_xxx__<br /><br />
 *    Finally the most flexible API directly allows you to place widgets inside the
 *    window. The space layout API is an immediate mode API which does not support
 *    row auto repeat and directly sets position and size of a widget. Position
 *    and size hereby can be either specified as ratio of allocated space or
 *    allocated space local position and pixel size. Since this API is quite
 *    powerful there are a number of utility functions to get the available space
 *    and convert between local allocated space and screen space.
 *
 *    ```c
 *    if (nk_begin_xxx(...) {
 *        // static row with height: 500 (you can set column count to INT_MAX if you don't want to be bothered)
 *        nk_layout_space_begin(ctx, NK_STATIC, 500, INT_MAX);
 *        nk_layout_space_push(ctx, nk_rect(0,0,150,200));
 *        nk_widget(...);
 *        nk_layout_space_push(ctx, nk_rect(200,200,100,200));
 *        nk_widget(...);
 *        nk_layout_space_end(ctx);
 *        //
 *        // dynamic row with height: 500 (you can set column count to INT_MAX if you don't want to be bothered)
 *        nk_layout_space_begin(ctx, NK_DYNAMIC, 500, INT_MAX);
 *        nk_layout_space_push(ctx, nk_rect(0.5,0.5,0.1,0.1));
 *        nk_widget(...);
 *        nk_layout_space_push(ctx, nk_rect(0.7,0.6,0.1,0.1));
 *        nk_widget(...);
 *    }
 *    nk_end(...);
 *    ```
 *
 * # Reference
 * Function                                     | Description
 * ---------------------------------------------|------------------------------------
 * \ref nk_layout_set_min_row_height            | Set the currently used minimum row height to a specified value
 * \ref nk_layout_reset_min_row_height          | Resets the currently used minimum row height to font height
 * \ref nk_layout_widget_bounds                 | Calculates current width a static layout row can fit inside a window
 * \ref nk_layout_ratio_from_pixel              | Utility functions to calculate window ratio from pixel size
 * \ref nk_layout_row_dynamic                   | Current layout is divided into n same sized growing columns
 * \ref nk_layout_row_static                    | Current layout is divided into n same fixed sized columns
 * \ref nk_layout_row_begin                     | Starts a new row with given height and number of columns
 * \ref nk_layout_row_push                      | Pushes another column with given size or window ratio
 * \ref nk_layout_row_end                       | Finished previously started row
 * \ref nk_layout_row                           | Specifies row columns in array as either window ratio or size
 * \ref nk_layout_row_template_begin            | Begins the row template declaration
 * \ref nk_layout_row_template_push_dynamic     | Adds a dynamic column that dynamically grows and can go to zero if not enough space
 * \ref nk_layout_row_template_push_variable    | Adds a variable column that dynamically grows but does not shrink below specified pixel width
 * \ref nk_layout_row_template_push_static      | Adds a static column that does not grow and will always have the same size
 * \ref nk_layout_row_template_end              | Marks the end of the row template
 * \ref nk_layout_space_begin                   | Begins a new layouting space that allows to specify each widgets position and size
 * \ref nk_layout_space_push                    | Pushes position and size of the next widget in own coordinate space either as pixel or ratio
 * \ref nk_layout_space_end                     | Marks the end of the layouting space
 * \ref nk_layout_space_bounds                  | Callable after nk_layout_space_begin and returns total space allocated
 * \ref nk_layout_space_to_screen               | Converts vector from nk_layout_space coordinate space into screen space
 * \ref nk_layout_space_to_local                | Converts vector from screen space into nk_layout_space coordinates
 * \ref nk_layout_space_rect_to_screen          | Converts rectangle from nk_layout_space coordinate space into screen space
 * \ref nk_layout_space_rect_to_local           | Converts rectangle from screen space into nk_layout_space coordinates
 */



enum nk_widget_align {
    NK_WIDGET_ALIGN_LEFT        = 0x01,
    NK_WIDGET_ALIGN_CENTERED    = 0x02,
    NK_WIDGET_ALIGN_RIGHT       = 0x04,
    NK_WIDGET_ALIGN_TOP         = 0x08,
    NK_WIDGET_ALIGN_MIDDLE      = 0x10,
    NK_WIDGET_ALIGN_BOTTOM      = 0x20
};
enum nk_widget_alignment {
    NK_WIDGET_LEFT        = NK_WIDGET_ALIGN_MIDDLE|NK_WIDGET_ALIGN_LEFT,
    NK_WIDGET_CENTERED    = NK_WIDGET_ALIGN_MIDDLE|NK_WIDGET_ALIGN_CENTERED,
    NK_WIDGET_RIGHT       = NK_WIDGET_ALIGN_MIDDLE|NK_WIDGET_ALIGN_RIGHT
};

/**
 * Sets the currently used minimum row height.
 * !!! \warning
 *     The passed height needs to include both your preferred row height
 *     as well as padding. No internal padding is added.
 *
 * ```c
 * void nk_layout_set_min_row_height(struct nk_context*, float height);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] height  | New minimum row height to be used for auto generating the row height
 */
NK_API void nk_layout_set_min_row_height(struct nk_context*, float height);

/**
 * Reset the currently used minimum row height back to `font_height + text_padding + padding`
 * ```c
 * void nk_layout_reset_min_row_height(struct nk_context*);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 */
NK_API void nk_layout_reset_min_row_height(struct nk_context*);

/**
 * \brief Returns the width of the next row allocate by one of the layouting functions
 *
 * \details
 * ```c
 * struct nk_rect nk_layout_widget_bounds(struct nk_context*);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 *
 * \return `nk_rect` with both position and size of the next row
 */
NK_API struct nk_rect nk_layout_widget_bounds(const struct nk_context *ctx);

/**
 * \brief Utility functions to calculate window ratio from pixel size
 *
 * \details
 * ```c
 * float nk_layout_ratio_from_pixel(struct nk_context*, float pixel_width);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] pixel   | Pixel_width to convert to window ratio
 *
 * \returns `nk_rect` with both position and size of the next row
 */
NK_API float nk_layout_ratio_from_pixel(const struct nk_context *ctx, float pixel_width);

/**
 * \brief Sets current row layout to share horizontal space
 * between @cols number of widgets evenly. Once called all subsequent widget
 * calls greater than @cols will allocate a new row with same layout.
 *
 * \details
 * ```c
 * void nk_layout_row_dynamic(struct nk_context *ctx, float height, int cols);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] height  | Holds height of each widget in row or zero for auto layouting
 * \param[in] columns | Number of widget inside row
 */
NK_API void nk_layout_row_dynamic(struct nk_context *ctx, float height, int cols);

/**
 * \brief Sets current row layout to fill @cols number of widgets
 * in row with same @item_width horizontal size. Once called all subsequent widget
 * calls greater than @cols will allocate a new row with same layout.
 *
 * \details
 * ```c
 * void nk_layout_row_static(struct nk_context *ctx, float height, int item_width, int cols);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] height  | Holds height of each widget in row or zero for auto layouting
 * \param[in] width   | Holds pixel width of each widget in the row
 * \param[in] columns | Number of widget inside row
 */
NK_API void nk_layout_row_static(struct nk_context *ctx, float height, int item_width, int cols);

/**
 * \brief Starts a new dynamic or fixed row with given height and columns.
 *
 * \details
 * ```c
 * void nk_layout_row_begin(struct nk_context *ctx, enum nk_layout_format fmt, float row_height, int cols);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] fmt     | either `NK_DYNAMIC` for window ratio or `NK_STATIC` for fixed size columns
 * \param[in] height  | holds height of each widget in row or zero for auto layouting
 * \param[in] columns | Number of widget inside row
 */
NK_API void nk_layout_row_begin(struct nk_context *ctx, enum nk_layout_format fmt, float row_height, int cols);

/**
 * \breif Specifies either window ratio or width of a single column
 *
 * \details
 * ```c
 * void nk_layout_row_push(struct nk_context*, float value);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] value   | either a window ratio or fixed width depending on @fmt in previous `nk_layout_row_begin` call
 */
NK_API void nk_layout_row_push(struct nk_context*, float value);

/**
 * \brief Finished previously started row
 *
 * \details
 * ```c
 * void nk_layout_row_end(struct nk_context*);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 */
NK_API void nk_layout_row_end(struct nk_context*);

/**
 * \brief Specifies row columns in array as either window ratio or size
 *
 * \details
 * ```c
 * void nk_layout_row(struct nk_context*, enum nk_layout_format, float height, int cols, const float *ratio);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] fmt     | Either `NK_DYNAMIC` for window ratio or `NK_STATIC` for fixed size columns
 * \param[in] height  | Holds height of each widget in row or zero for auto layouting
 * \param[in] columns | Number of widget inside row
 */
NK_API void nk_layout_row(struct nk_context*, enum nk_layout_format, float height, int cols, const float *ratio);

/**
 * # # nk_layout_row_template_begin
 * Begins the row template declaration
 * ```c
 * void nk_layout_row_template_begin(struct nk_context*, float row_height);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] height  | Holds height of each widget in row or zero for auto layouting
 */
NK_API void nk_layout_row_template_begin(struct nk_context*, float row_height);

/**
 * # # nk_layout_row_template_push_dynamic
 * Adds a dynamic column that dynamically grows and can go to zero if not enough space
 * ```c
 * void nk_layout_row_template_push_dynamic(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] height  | Holds height of each widget in row or zero for auto layouting
 */
NK_API void nk_layout_row_template_push_dynamic(struct nk_context*);

/**
 * # # nk_layout_row_template_push_variable
 * Adds a variable column that dynamically grows but does not shrink below specified pixel width
 * ```c
 * void nk_layout_row_template_push_variable(struct nk_context*, float min_width);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] width   | Holds the minimum pixel width the next column must always be
 */
NK_API void nk_layout_row_template_push_variable(struct nk_context*, float min_width);

/**
 * # # nk_layout_row_template_push_static
 * Adds a static column that does not grow and will always have the same size
 * ```c
 * void nk_layout_row_template_push_static(struct nk_context*, float width);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] width   | Holds the absolute pixel width value the next column must be
 */
NK_API void nk_layout_row_template_push_static(struct nk_context*, float width);

/**
 * # # nk_layout_row_template_end
 * Marks the end of the row template
 * ```c
 * void nk_layout_row_template_end(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 */
NK_API void nk_layout_row_template_end(struct nk_context*);

/**
 * # # nk_layout_space_begin
 * Begins a new layouting space that allows to specify each widgets position and size.
 * ```c
 * void nk_layout_space_begin(struct nk_context*, enum nk_layout_format, float height, int widget_count);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_begin_xxx`
 * \param[in] fmt     | Either `NK_DYNAMIC` for window ratio or `NK_STATIC` for fixed size columns
 * \param[in] height  | Holds height of each widget in row or zero for auto layouting
 * \param[in] columns | Number of widgets inside row
 */
NK_API void nk_layout_space_begin(struct nk_context*, enum nk_layout_format, float height, int widget_count);

/**
 * # # nk_layout_space_push
 * Pushes position and size of the next widget in own coordinate space either as pixel or ratio
 * ```c
 * void nk_layout_space_push(struct nk_context *ctx, struct nk_rect bounds);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_layout_space_begin`
 * \param[in] bounds  | Position and size in laoyut space local coordinates
 */
NK_API void nk_layout_space_push(struct nk_context*, struct nk_rect bounds);

/**
 * # # nk_layout_space_end
 * Marks the end of the layout space
 * ```c
 * void nk_layout_space_end(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_layout_space_begin`
 */
NK_API void nk_layout_space_end(struct nk_context*);

/**
 * # # nk_layout_space_bounds
 * Utility function to calculate total space allocated for `nk_layout_space`
 * ```c
 * struct nk_rect nk_layout_space_bounds(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_layout_space_begin`
 *
 * \returns `nk_rect` holding the total space allocated
 */
NK_API struct nk_rect nk_layout_space_bounds(const struct nk_context *ctx);

/**
 * # # nk_layout_space_to_screen
 * Converts vector from nk_layout_space coordinate space into screen space
 * ```c
 * struct nk_vec2 nk_layout_space_to_screen(struct nk_context*, struct nk_vec2);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_layout_space_begin`
 * \param[in] vec     | Position to convert from layout space into screen coordinate space
 *
 * \returns transformed `nk_vec2` in screen space coordinates
 */
NK_API struct nk_vec2 nk_layout_space_to_screen(const struct nk_context* ctx, struct nk_vec2 vec);

/**
 * # # nk_layout_space_to_local
 * Converts vector from layout space into screen space
 * ```c
 * struct nk_vec2 nk_layout_space_to_local(struct nk_context*, struct nk_vec2);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_layout_space_begin`
 * \param[in] vec     | Position to convert from screen space into layout coordinate space
 *
 * \returns transformed `nk_vec2` in layout space coordinates
 */
NK_API struct nk_vec2 nk_layout_space_to_local(const struct nk_context *ctx, struct nk_vec2 vec);

/**
 * # # nk_layout_space_rect_to_screen
 * Converts rectangle from screen space into layout space
 * ```c
 * struct nk_rect nk_layout_space_rect_to_screen(struct nk_context*, struct nk_rect);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_layout_space_begin`
 * \param[in] bounds  | Rectangle to convert from layout space into screen space
 *
 * \returns transformed `nk_rect` in screen space coordinates
 */
NK_API struct nk_rect nk_layout_space_rect_to_screen(const struct nk_context *ctx, struct nk_rect bounds);

/**
 * # # nk_layout_space_rect_to_local
 * Converts rectangle from layout space into screen space
 * ```c
 * struct nk_rect nk_layout_space_rect_to_local(struct nk_context*, struct nk_rect);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_layout_space_begin`
 * \param[in] bounds  | Rectangle to convert from layout space into screen space
 *
 * \returns transformed `nk_rect` in layout space coordinates
 */
NK_API struct nk_rect nk_layout_space_rect_to_local(const struct nk_context *ctx, struct nk_rect bounds);

/**
 * # # nk_spacer
 * Spacer is a dummy widget that consumes space as usual but doesn't draw anything
 * ```c
 * void nk_spacer(struct nk_context* );
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after call `nk_layout_space_begin`
 *
 */
NK_API void nk_spacer(struct nk_context *ctx);


/* =============================================================================
 *
 *                                  GROUP
 *
 * =============================================================================*/
/**
 * \page Groups
 * Groups are basically windows inside windows. They allow to subdivide space
 * in a window to layout widgets as a group. Almost all more complex widget
 * layouting requirements can be solved using groups and basic layouting
 * fuctionality. Groups just like windows are identified by an unique name and
 * internally keep track of scrollbar offsets by default. However additional
 * versions are provided to directly manage the scrollbar.
 *
 * # Usage
 * To create a group you have to call one of the three `nk_group_begin_xxx`
 * functions to start group declarations and `nk_group_end` at the end. Furthermore it
 * is required to check the return value of `nk_group_begin_xxx` and only process
 * widgets inside the window if the value is not 0.
 * Nesting groups is possible and even encouraged since many layouting schemes
 * can only be achieved by nesting. Groups, unlike windows, need `nk_group_end`
 * to be only called if the corresponding `nk_group_begin_xxx` call does not return 0:
 *
 * ```c
 * if (nk_group_begin_xxx(ctx, ...) {
 *     // [... widgets ...]
 *     nk_group_end(ctx);
 * }
 * ```
 *
 * In the grand concept groups can be called after starting a window
 * with `nk_begin_xxx` and before calling `nk_end`:
 *
 * ```c
 * struct nk_context ctx;
 * nk_init_xxx(&ctx, ...);
 * while (1) {
 *     // Input
 *     Event evt;
 *     nk_input_begin(&ctx);
 *     while (GetEvent(&evt)) {
 *         if (evt.type == MOUSE_MOVE)
 *             nk_input_motion(&ctx, evt.motion.x, evt.motion.y);
 *         else if (evt.type == [...]) {
 *             nk_input_xxx(...);
 *         }
 *     }
 *     nk_input_end(&ctx);
 *     //
 *     // Window
 *     if (nk_begin_xxx(...) {
 *         // [...widgets...]
 *         nk_layout_row_dynamic(...);
 *         if (nk_group_begin_xxx(ctx, ...) {
 *             //[... widgets ...]
 *             nk_group_end(ctx);
 *         }
 *     }
 *     nk_end(ctx);
 *     //
 *     // Draw
 *     const struct nk_command *cmd = 0;
 *     nk_foreach(cmd, &ctx) {
 *     switch (cmd->type) {
 *     case NK_COMMAND_LINE:
 *         your_draw_line_function(...)
 *         break;
 *     case NK_COMMAND_RECT
 *         your_draw_rect_function(...)
 *         break;
 *     case ...:
 *         // [...]
 *     }
 *     nk_clear(&ctx);
 * }
 * nk_free(&ctx);
 * ```
 * # Reference
 * Function                        | Description
 * --------------------------------|-------------------------------------------
 * \ref nk_group_begin                  | Start a new group with internal scrollbar handling
 * \ref nk_group_begin_titled           | Start a new group with separated name and title and internal scrollbar handling
 * \ref nk_group_end                    | Ends a group. Should only be called if nk_group_begin returned non-zero
 * \ref nk_group_scrolled_offset_begin  | Start a new group with manual separated handling of scrollbar x- and y-offset
 * \ref nk_group_scrolled_begin         | Start a new group with manual scrollbar handling
 * \ref nk_group_scrolled_end           | Ends a group with manual scrollbar handling. Should only be called if nk_group_begin returned non-zero
 * \ref nk_group_get_scroll             | Gets the scroll offset for the given group
 * \ref nk_group_set_scroll             | Sets the scroll offset for the given group
 */

 /**
 * \brief Starts a new widget group. Requires a previous layouting function to specify a pos/size.
 * ```c
 * nk_bool nk_group_begin(struct nk_context*, const char *title, nk_flags);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] title   | Must be an unique identifier for this group that is also used for the group header
 * \param[in] flags   | Window flags defined in the nk_panel_flags section with a number of different group behaviors
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
NK_API nk_bool nk_group_begin(struct nk_context*, const char *title, nk_flags);

 /**
 * \brief Starts a new widget group. Requires a previous layouting function to specify a pos/size.
 * ```c
 * nk_bool nk_group_begin_titled(struct nk_context*, const char *name, const char *title, nk_flags);
 * ```
 *
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] id      | Must be an unique identifier for this group
 * \param[in] title   | Group header title
 * \param[in] flags   | Window flags defined in the nk_panel_flags section with a number of different group behaviors
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
NK_API nk_bool nk_group_begin_titled(struct nk_context*, const char *name, const char *title, nk_flags);

/**
 * # # nk_group_end
 * Ends a widget group
 * ```c
 * void nk_group_end(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 */
NK_API void nk_group_end(struct nk_context*);

/**
 * # # nk_group_scrolled_offset_begin
 * starts a new widget group. requires a previous layouting function to specify
 * a size. Does not keep track of scrollbar.
 * ```c
 * nk_bool nk_group_scrolled_offset_begin(struct nk_context*, nk_uint *x_offset, nk_uint *y_offset, const char *title, nk_flags flags);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] x_offset| Scrollbar x-offset to offset all widgets inside the group horizontally.
 * \param[in] y_offset| Scrollbar y-offset to offset all widgets inside the group vertically
 * \param[in] title   | Window unique group title used to both identify and display in the group header
 * \param[in] flags   | Window flags from the nk_panel_flags section
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
NK_API nk_bool nk_group_scrolled_offset_begin(struct nk_context*, nk_uint *x_offset, nk_uint *y_offset, const char *title, nk_flags flags);

/**
 * # # nk_group_scrolled_begin
 * Starts a new widget group. requires a previous
 * layouting function to specify a size. Does not keep track of scrollbar.
 * ```c
 * nk_bool nk_group_scrolled_begin(struct nk_context*, struct nk_scroll *off, const char *title, nk_flags);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] off     | Both x- and y- scroll offset. Allows for manual scrollbar control
 * \param[in] title   | Window unique group title used to both identify and display in the group header
 * \param[in] flags   | Window flags from nk_panel_flags section
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
NK_API nk_bool nk_group_scrolled_begin(struct nk_context*, struct nk_scroll *off, const char *title, nk_flags);

/**
 * # # nk_group_scrolled_end
 * Ends a widget group after calling nk_group_scrolled_offset_begin or nk_group_scrolled_begin.
 * ```c
 * void nk_group_scrolled_end(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 */
NK_API void nk_group_scrolled_end(struct nk_context*);

/**
 * # # nk_group_get_scroll
 * Gets the scroll position of the given group.
 * ```c
 * void nk_group_get_scroll(struct nk_context*, const char *id, nk_uint *x_offset, nk_uint *y_offset);
 * ```
 *
 * Parameter    | Description
 * -------------|-----------------------------------------------------------
 * \param[in] ctx      | Must point to an previously initialized `nk_context` struct
 * \param[in] id       | The id of the group to get the scroll position of
 * \param[in] x_offset | A pointer to the x offset output (or NULL to ignore)
 * \param[in] y_offset | A pointer to the y offset output (or NULL to ignore)
 */
NK_API void nk_group_get_scroll(struct nk_context*, const char *id, nk_uint *x_offset, nk_uint *y_offset);

/**
 * # # nk_group_set_scroll
 * Sets the scroll position of the given group.
 * ```c
 * void nk_group_set_scroll(struct nk_context*, const char *id, nk_uint x_offset, nk_uint y_offset);
 * ```
 *
 * Parameter    | Description
 * -------------|-----------------------------------------------------------
 * \param[in] ctx      | Must point to an previously initialized `nk_context` struct
 * \param[in] id       | The id of the group to scroll
 * \param[in] x_offset | The x offset to scroll to
 * \param[in] y_offset | The y offset to scroll to
 */
NK_API void nk_group_set_scroll(struct nk_context*, const char *id, nk_uint x_offset, nk_uint y_offset);

/* =============================================================================
 *
 *                                  TREE
 *
 * =============================================================================*/
/**
 * \page Tree
 * Trees represent two different concept. First the concept of a collapsible
 * UI section that can be either in a hidden or visible state. They allow the UI
 * user to selectively minimize the current set of visible UI to comprehend.
 * The second concept are tree widgets for visual UI representation of trees.<br /><br />
 *
 * Trees thereby can be nested for tree representations and multiple nested
 * collapsible UI sections. All trees are started by calling of the
 * `nk_tree_xxx_push_tree` functions and ended by calling one of the
 * `nk_tree_xxx_pop_xxx()` functions. Each starting functions takes a title label
 * and optionally an image to be displayed and the initial collapse state from
 * the nk_collapse_states section.<br /><br />
 *
 * The runtime state of the tree is either stored outside the library by the caller
 * or inside which requires a unique ID. The unique ID can either be generated
 * automatically from `__FILE__` and `__LINE__` with function `nk_tree_push`,
 * by `__FILE__` and a user provided ID generated for example by loop index with
 * function `nk_tree_push_id` or completely provided from outside by user with
 * function `nk_tree_push_hashed`.
 *
 * # Usage
 * To create a tree you have to call one of the seven `nk_tree_xxx_push_xxx`
 * functions to start a collapsible UI section and `nk_tree_xxx_pop` to mark the
 * end.
 * Each starting function will either return `false(0)` if the tree is collapsed
 * or hidden and therefore does not need to be filled with content or `true(1)`
 * if visible and required to be filled.
 *
 * !!! Note
 *     The tree header does not require and layouting function and instead
 *     calculates a auto height based on the currently used font size
 *
 * The tree ending functions only need to be called if the tree content is
 * actually visible. So make sure the tree push function is guarded by `if`
 * and the pop call is only taken if the tree is visible.
 *
 * ```c
 * if (nk_tree_push(ctx, NK_TREE_TAB, "Tree", NK_MINIMIZED)) {
 *     nk_layout_row_dynamic(...);
 *     nk_widget(...);
 *     nk_tree_pop(ctx);
 * }
 * ```
 *
 * # Reference
 * Function                    | Description
 * ----------------------------|-------------------------------------------
 * nk_tree_push                | Start a collapsible UI section with internal state management
 * nk_tree_push_id             | Start a collapsible UI section with internal state management callable in a look
 * nk_tree_push_hashed         | Start a collapsible UI section with internal state management with full control over internal unique ID use to store state
 * nk_tree_image_push          | Start a collapsible UI section with image and label header
 * nk_tree_image_push_id       | Start a collapsible UI section with image and label header and internal state management callable in a look
 * nk_tree_image_push_hashed   | Start a collapsible UI section with image and label header and internal state management with full control over internal unique ID use to store state
 * nk_tree_pop                 | Ends a collapsible UI section
 * nk_tree_state_push          | Start a collapsible UI section with external state management
 * nk_tree_state_image_push    | Start a collapsible UI section with image and label header and external state management
 * nk_tree_state_pop           | Ends a collapsabale UI section
 *
 * # nk_tree_type
 * Flag            | Description
 * ----------------|----------------------------------------
 * NK_TREE_NODE    | Highlighted tree header to mark a collapsible UI section
 * NK_TREE_TAB     | Non-highlighted tree header closer to tree representations
 */

/**
 * # # nk_tree_push
 * Starts a collapsible UI section with internal state management
 * !!! \warning
 *     To keep track of the runtime tree collapsible state this function uses
 *     defines `__FILE__` and `__LINE__` to generate a unique ID. If you want
 *     to call this function in a loop please use `nk_tree_push_id` or
 *     `nk_tree_push_hashed` instead.
 *
 * ```c
 * #define nk_tree_push(ctx, type, title, state)
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] type    | Value from the nk_tree_type section to visually mark a tree node header as either a collapseable UI section or tree node
 * \param[in] title   | Label printed in the tree header
 * \param[in] state   | Initial tree state value out of nk_collapse_states
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
#define nk_tree_push(ctx, type, title, state) nk_tree_push_hashed(ctx, type, title, state, NK_FILE_LINE,nk_strlen(NK_FILE_LINE),__LINE__)

/**
 * # # nk_tree_push_id
 * Starts a collapsible UI section with internal state management callable in a look
 * ```c
 * #define nk_tree_push_id(ctx, type, title, state, id)
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] type    | Value from the nk_tree_type section to visually mark a tree node header as either a collapseable UI section or tree node
 * \param[in] title   | Label printed in the tree header
 * \param[in] state   | Initial tree state value out of nk_collapse_states
 * \param[in] id      | Loop counter index if this function is called in a loop
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
#define nk_tree_push_id(ctx, type, title, state, id) nk_tree_push_hashed(ctx, type, title, state, NK_FILE_LINE,nk_strlen(NK_FILE_LINE),id)

/**
 * # # nk_tree_push_hashed
 * Start a collapsible UI section with internal state management with full
 * control over internal unique ID used to store state
 * ```c
 * nk_bool nk_tree_push_hashed(struct nk_context*, enum nk_tree_type, const char *title, enum nk_collapse_states initial_state, const char *hash, int len,int seed);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] type    | Value from the nk_tree_type section to visually mark a tree node header as either a collapseable UI section or tree node
 * \param[in] title   | Label printed in the tree header
 * \param[in] state   | Initial tree state value out of nk_collapse_states
 * \param[in] hash    | Memory block or string to generate the ID from
 * \param[in] len     | Size of passed memory block or string in __hash__
 * \param[in] seed    | Seeding value if this function is called in a loop or default to `0`
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
NK_API nk_bool nk_tree_push_hashed(struct nk_context*, enum nk_tree_type, const char *title, enum nk_collapse_states initial_state, const char *hash, int len,int seed);

/**
 * # # nk_tree_image_push
 * Start a collapsible UI section with image and label header
 * !!! \warning
 *     To keep track of the runtime tree collapsible state this function uses
 *     defines `__FILE__` and `__LINE__` to generate a unique ID. If you want
 *     to call this function in a loop please use `nk_tree_image_push_id` or
 *     `nk_tree_image_push_hashed` instead.
 *
 * ```c
 * #define nk_tree_image_push(ctx, type, img, title, state)
 * ```
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] type    | Value from the nk_tree_type section to visually mark a tree node header as either a collapseable UI section or tree node
 * \param[in] img     | Image to display inside the header on the left of the label
 * \param[in] title   | Label printed in the tree header
 * \param[in] state   | Initial tree state value out of nk_collapse_states
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
#define nk_tree_image_push(ctx, type, img, title, state) nk_tree_image_push_hashed(ctx, type, img, title, state, NK_FILE_LINE,nk_strlen(NK_FILE_LINE),__LINE__)

/**
 * # # nk_tree_image_push_id
 * Start a collapsible UI section with image and label header and internal state
 * management callable in a look
 *
 * ```c
 * #define nk_tree_image_push_id(ctx, type, img, title, state, id)
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] type    | Value from the nk_tree_type section to visually mark a tree node header as either a collapseable UI section or tree node
 * \param[in] img     | Image to display inside the header on the left of the label
 * \param[in] title   | Label printed in the tree header
 * \param[in] state   | Initial tree state value out of nk_collapse_states
 * \param[in] id      | Loop counter index if this function is called in a loop
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
#define nk_tree_image_push_id(ctx, type, img, title, state, id) nk_tree_image_push_hashed(ctx, type, img, title, state, NK_FILE_LINE,nk_strlen(NK_FILE_LINE),id)

/**
 * # # nk_tree_image_push_hashed
 * Start a collapsible UI section with internal state management with full
 * control over internal unique ID used to store state
 * ```c
 * nk_bool nk_tree_image_push_hashed(struct nk_context*, enum nk_tree_type, struct nk_image, const char *title, enum nk_collapse_states initial_state, const char *hash, int len,int seed);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct
 * \param[in] type    | Value from the nk_tree_type section to visually mark a tree node header as either a collapseable UI section or tree node
 * \param[in] img     | Image to display inside the header on the left of the label
 * \param[in] title   | Label printed in the tree header
 * \param[in] state   | Initial tree state value out of nk_collapse_states
 * \param[in] hash    | Memory block or string to generate the ID from
 * \param[in] len     | Size of passed memory block or string in __hash__
 * \param[in] seed    | Seeding value if this function is called in a loop or default to `0`
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
NK_API nk_bool nk_tree_image_push_hashed(struct nk_context*, enum nk_tree_type, struct nk_image, const char *title, enum nk_collapse_states initial_state, const char *hash, int len,int seed);

/**
 * # # nk_tree_pop
 * Ends a collapsabale UI section
 * ```c
 * void nk_tree_pop(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after calling `nk_tree_xxx_push_xxx`
 */
NK_API void nk_tree_pop(struct nk_context*);

/**
 * # # nk_tree_state_push
 * Start a collapsible UI section with external state management
 * ```c
 * nk_bool nk_tree_state_push(struct nk_context*, enum nk_tree_type, const char *title, enum nk_collapse_states *state);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after calling `nk_tree_xxx_push_xxx`
 * \param[in] type    | Value from the nk_tree_type section to visually mark a tree node header as either a collapseable UI section or tree node
 * \param[in] title   | Label printed in the tree header
 * \param[in] state   | Persistent state to update
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
NK_API nk_bool nk_tree_state_push(struct nk_context*, enum nk_tree_type, const char *title, enum nk_collapse_states *state);

/**
 * # # nk_tree_state_image_push
 * Start a collapsible UI section with image and label header and external state management
 * ```c
 * nk_bool nk_tree_state_image_push(struct nk_context*, enum nk_tree_type, struct nk_image, const char *title, enum nk_collapse_states *state);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after calling `nk_tree_xxx_push_xxx`
 * \param[in] img     | Image to display inside the header on the left of the label
 * \param[in] type    | Value from the nk_tree_type section to visually mark a tree node header as either a collapseable UI section or tree node
 * \param[in] title   | Label printed in the tree header
 * \param[in] state   | Persistent state to update
 *
 * \returns `true(1)` if visible and fillable with widgets or `false(0)` otherwise
 */
NK_API nk_bool nk_tree_state_image_push(struct nk_context*, enum nk_tree_type, struct nk_image, const char *title, enum nk_collapse_states *state);

/**
 * # # nk_tree_state_pop
 * Ends a collapsabale UI section
 * ```c
 * void nk_tree_state_pop(struct nk_context*);
 * ```
 *
 * Parameter   | Description
 * ------------|-----------------------------------------------------------
 * \param[in] ctx     | Must point to an previously initialized `nk_context` struct after calling `nk_tree_xxx_push_xxx`
 */
NK_API void nk_tree_state_pop(struct nk_context*);

#define nk_tree_element_push(ctx, type, title, state, sel) nk_tree_element_push_hashed(ctx, type, title, state, sel, NK_FILE_LINE,nk_strlen(NK_FILE_LINE),__LINE__)
#define nk_tree_element_push_id(ctx, type, title, state, sel, id) nk_tree_element_push_hashed(ctx, type, title, state, sel, NK_FILE_LINE,nk_strlen(NK_FILE_LINE),id)
NK_API nk_bool nk_tree_element_push_hashed(struct nk_context*, enum nk_tree_type, const char *title, enum nk_collapse_states initial_state, nk_bool *selected, const char *hash, int len, int seed);
NK_API nk_bool nk_tree_element_image_push_hashed(struct nk_context*, enum nk_tree_type, struct nk_image, const char *title, enum nk_collapse_states initial_state, nk_bool *selected, const char *hash, int len,int seed);
NK_API void nk_tree_element_pop(struct nk_context*);

/* =============================================================================
 *
 *                                  LIST VIEW
 *
 * ============================================================================= */
struct nk_list_view {
/* public: */
    int begin, end, count;
/* private: */
    int total_height;
    struct nk_context *ctx;
    nk_uint *scroll_pointer;
    nk_uint scroll_value;
};
NK_API nk_bool nk_list_view_begin(struct nk_context*, struct nk_list_view *out, const char *id, nk_flags, int row_height, int row_count);
NK_API void nk_list_view_end(struct nk_list_view*);
/* =============================================================================
 *
 *                                  WIDGET
 *
 * ============================================================================= */
enum nk_widget_layout_states {
    NK_WIDGET_INVALID, /**< The widget cannot be seen and is completely out of view */
    NK_WIDGET_VALID,   /**< The widget is completely inside the window and can be updated and drawn */
    NK_WIDGET_ROM,     /**< The widget is partially visible and cannot be updated */
    NK_WIDGET_DISABLED /**< The widget is manually disabled and acts like NK_WIDGET_ROM */
};
enum nk_widget_states {
    NK_WIDGET_STATE_MODIFIED    = NK_FLAG(1),
    NK_WIDGET_STATE_INACTIVE    = NK_FLAG(2), /**!< widget is neither active nor hovered */
    NK_WIDGET_STATE_ENTERED     = NK_FLAG(3), /**!< widget has been hovered on the current frame */
    NK_WIDGET_STATE_HOVER       = NK_FLAG(4), /**!< widget is being hovered */
    NK_WIDGET_STATE_ACTIVED     = NK_FLAG(5),/**!< widget is currently activated */
    NK_WIDGET_STATE_LEFT        = NK_FLAG(6), /**!< widget is from this frame on not hovered anymore */
    NK_WIDGET_STATE_HOVERED     = NK_WIDGET_STATE_HOVER|NK_WIDGET_STATE_MODIFIED, /**!< widget is being hovered */
    NK_WIDGET_STATE_ACTIVE      = NK_WIDGET_STATE_ACTIVED|NK_WIDGET_STATE_MODIFIED /**!< widget is currently activated */
};
NK_API enum nk_widget_layout_states nk_widget(struct nk_rect*, const struct nk_context*);
NK_API enum nk_widget_layout_states nk_widget_fitting(struct nk_rect*, const struct nk_context*, struct nk_vec2);
NK_API struct nk_rect nk_widget_bounds(const struct nk_context*);
NK_API struct nk_vec2 nk_widget_position(const struct nk_context*);
NK_API struct nk_vec2 nk_widget_size(const struct nk_context*);
NK_API float nk_widget_width(const struct nk_context*);
NK_API float nk_widget_height(const struct nk_context*);
NK_API nk_bool nk_widget_is_hovered(const struct nk_context*);
NK_API nk_bool nk_widget_is_mouse_clicked(const struct nk_context*, enum nk_buttons);
NK_API nk_bool nk_widget_has_mouse_click_down(const struct nk_context*, enum nk_buttons, nk_bool down);
NK_API void nk_spacing(struct nk_context*, int cols);
NK_API void nk_widget_disable_begin(struct nk_context* ctx);
NK_API void nk_widget_disable_end(struct nk_context* ctx);
/* =============================================================================
 *
 *                                  TEXT
 *
 * ============================================================================= */
enum nk_text_align {
    NK_TEXT_ALIGN_LEFT        = 0x01,
    NK_TEXT_ALIGN_CENTERED    = 0x02,
    NK_TEXT_ALIGN_RIGHT       = 0x04,
    NK_TEXT_ALIGN_TOP         = 0x08,
    NK_TEXT_ALIGN_MIDDLE      = 0x10,
    NK_TEXT_ALIGN_BOTTOM      = 0x20
};
enum nk_text_alignment {
    NK_TEXT_LEFT        = NK_TEXT_ALIGN_MIDDLE|NK_TEXT_ALIGN_LEFT,
    NK_TEXT_CENTERED    = NK_TEXT_ALIGN_MIDDLE|NK_TEXT_ALIGN_CENTERED,
    NK_TEXT_RIGHT       = NK_TEXT_ALIGN_MIDDLE|NK_TEXT_ALIGN_RIGHT
};
NK_API void nk_text(struct nk_context*, const char*, int, nk_flags);
NK_API void nk_text_colored(struct nk_context*, const char*, int, nk_flags, struct nk_color);
NK_API void nk_text_wrap(struct nk_context*, const char*, int);
NK_API void nk_text_wrap_colored(struct nk_context*, const char*, int, struct nk_color);
NK_API void nk_label(struct nk_context*, const char*, nk_flags align);
NK_API void nk_label_colored(struct nk_context*, const char*, nk_flags align, struct nk_color);
NK_API void nk_label_wrap(struct nk_context*, const char*);
NK_API void nk_label_colored_wrap(struct nk_context*, const char*, struct nk_color);
NK_API void nk_image(struct nk_context*, struct nk_image);
NK_API void nk_image_color(struct nk_context*, struct nk_image, struct nk_color);
#ifdef NK_INCLUDE_STANDARD_VARARGS
NK_API void nk_labelf(struct nk_context*, nk_flags, NK_PRINTF_FORMAT_STRING const char*, ...) NK_PRINTF_VARARG_FUNC(3);
NK_API void nk_labelf_colored(struct nk_context*, nk_flags, struct nk_color, NK_PRINTF_FORMAT_STRING const char*,...) NK_PRINTF_VARARG_FUNC(4);
NK_API void nk_labelf_wrap(struct nk_context*, NK_PRINTF_FORMAT_STRING const char*,...) NK_PRINTF_VARARG_FUNC(2);
NK_API void nk_labelf_colored_wrap(struct nk_context*, struct nk_color, NK_PRINTF_FORMAT_STRING const char*,...) NK_PRINTF_VARARG_FUNC(3);
NK_API void nk_labelfv(struct nk_context*, nk_flags, NK_PRINTF_FORMAT_STRING const char*, va_list) NK_PRINTF_VALIST_FUNC(3);
NK_API void nk_labelfv_colored(struct nk_context*, nk_flags, struct nk_color, NK_PRINTF_FORMAT_STRING const char*, va_list) NK_PRINTF_VALIST_FUNC(4);
NK_API void nk_labelfv_wrap(struct nk_context*, NK_PRINTF_FORMAT_STRING const char*, va_list) NK_PRINTF_VALIST_FUNC(2);
NK_API void nk_labelfv_colored_wrap(struct nk_context*, struct nk_color, NK_PRINTF_FORMAT_STRING const char*, va_list) NK_PRINTF_VALIST_FUNC(3);
NK_API void nk_value_bool(struct nk_context*, const char *prefix, int);
NK_API void nk_value_int(struct nk_context*, const char *prefix, int);
NK_API void nk_value_uint(struct nk_context*, const char *prefix, unsigned int);
NK_API void nk_value_float(struct nk_context*, const char *prefix, float);
NK_API void nk_value_color_byte(struct nk_context*, const char *prefix, struct nk_color);
NK_API void nk_value_color_float(struct nk_context*, const char *prefix, struct nk_color);
NK_API void nk_value_color_hex(struct nk_context*, const char *prefix, struct nk_color);
#endif
/* =============================================================================
 *
 *                                  BUTTON
 *
 * ============================================================================= */
NK_API nk_bool nk_button_text(struct nk_context*, const char *title, int len);
NK_API nk_bool nk_button_label(struct nk_context*, const char *title);
NK_API nk_bool nk_button_color(struct nk_context*, struct nk_color);
NK_API nk_bool nk_button_symbol(struct nk_context*, enum nk_symbol_type);
NK_API nk_bool nk_button_image(struct nk_context*, struct nk_image img);
NK_API nk_bool nk_button_symbol_label(struct nk_context*, enum nk_symbol_type, const char*, nk_flags text_alignment);
NK_API nk_bool nk_button_symbol_text(struct nk_context*, enum nk_symbol_type, const char*, int, nk_flags alignment);
NK_API nk_bool nk_button_image_label(struct nk_context*, struct nk_image img, const char*, nk_flags text_alignment);
NK_API nk_bool nk_button_image_text(struct nk_context*, struct nk_image img, const char*, int, nk_flags alignment);
NK_API nk_bool nk_button_text_styled(struct nk_context*, const struct nk_style_button*, const char *title, int len);
NK_API nk_bool nk_button_label_styled(struct nk_context*, const struct nk_style_button*, const char *title);
NK_API nk_bool nk_button_symbol_styled(struct nk_context*, const struct nk_style_button*, enum nk_symbol_type);
NK_API nk_bool nk_button_image_styled(struct nk_context*, const struct nk_style_button*, struct nk_image img);
NK_API nk_bool nk_button_symbol_text_styled(struct nk_context*,const struct nk_style_button*, enum nk_symbol_type, const char*, int, nk_flags alignment);
NK_API nk_bool nk_button_symbol_label_styled(struct nk_context *ctx, const struct nk_style_button *style, enum nk_symbol_type symbol, const char *title, nk_flags align);
NK_API nk_bool nk_button_image_label_styled(struct nk_context*,const struct nk_style_button*, struct nk_image img, const char*, nk_flags text_alignment);
NK_API nk_bool nk_button_image_text_styled(struct nk_context*,const struct nk_style_button*, struct nk_image img, const char*, int, nk_flags alignment);
NK_API void nk_button_set_behavior(struct nk_context*, enum nk_button_behavior);
NK_API nk_bool nk_button_push_behavior(struct nk_context*, enum nk_button_behavior);
NK_API nk_bool nk_button_pop_behavior(struct nk_context*);
/* =============================================================================
 *
 *                                  CHECKBOX
 *
 * ============================================================================= */
NK_API nk_bool nk_check_label(struct nk_context*, const char*, nk_bool active);
NK_API nk_bool nk_check_text(struct nk_context*, const char*, int, nk_bool active);
NK_API nk_bool nk_check_text_align(struct nk_context*, const char*, int, nk_bool active, nk_flags widget_alignment, nk_flags text_alignment);
NK_API unsigned nk_check_flags_label(struct nk_context*, const char*, unsigned int flags, unsigned int value);
NK_API unsigned nk_check_flags_text(struct nk_context*, const char*, int, unsigned int flags, unsigned int value);
NK_API nk_bool nk_checkbox_label(struct nk_context*, const char*, nk_bool *active);
NK_API nk_bool nk_checkbox_label_align(struct nk_context *ctx, const char *label, nk_bool *active, nk_flags widget_alignment, nk_flags text_alignment);
NK_API nk_bool nk_checkbox_text(struct nk_context*, const char*, int, nk_bool *active);
NK_API nk_bool nk_checkbox_text_align(struct nk_context *ctx, const char *text, int len, nk_bool *active, nk_flags widget_alignment, nk_flags text_alignment);
NK_API nk_bool nk_checkbox_flags_label(struct nk_context*, const char*, unsigned int *flags, unsigned int value);
NK_API nk_bool nk_checkbox_flags_text(struct nk_context*, const char*, int, unsigned int *flags, unsigned int value);
/* =============================================================================
 *
 *                                  RADIO BUTTON
 *
 * ============================================================================= */
NK_API nk_bool nk_radio_label(struct nk_context*, const char*, nk_bool *active);
NK_API nk_bool nk_radio_label_align(struct nk_context *ctx, const char *label, nk_bool *active, nk_flags widget_alignment, nk_flags text_alignment);
NK_API nk_bool nk_radio_text(struct nk_context*, const char*, int, nk_bool *active);
NK_API nk_bool nk_radio_text_align(struct nk_context *ctx, const char *text, int len, nk_bool *active, nk_flags widget_alignment, nk_flags text_alignment);
NK_API nk_bool nk_option_label(struct nk_context*, const char*, nk_bool active);
NK_API nk_bool nk_option_label_align(struct nk_context *ctx, const char *label, nk_bool active, nk_flags widget_alignment, nk_flags text_alignment);
NK_API nk_bool nk_option_text(struct nk_context*, const char*, int, nk_bool active);
NK_API nk_bool nk_option_text_align(struct nk_context *ctx, const char *text, int len, nk_bool is_active, nk_flags widget_alignment, nk_flags text_alignment);
/* =============================================================================
 *
 *                                  SELECTABLE
 *
 * ============================================================================= */
NK_API nk_bool nk_selectable_label(struct nk_context*, const char*, nk_flags align, nk_bool *value);
NK_API nk_bool nk_selectable_text(struct nk_context*, const char*, int, nk_flags align, nk_bool *value);
NK_API nk_bool nk_selectable_image_label(struct nk_context*,struct nk_image,  const char*, nk_flags align, nk_bool *value);
NK_API nk_bool nk_selectable_image_text(struct nk_context*,struct nk_image, const char*, int, nk_flags align, nk_bool *value);
NK_API nk_bool nk_selectable_symbol_label(struct nk_context*,enum nk_symbol_type,  const char*, nk_flags align, nk_bool *value);
NK_API nk_bool nk_selectable_symbol_text(struct nk_context*,enum nk_symbol_type, const char*, int, nk_flags align, nk_bool *value);

NK_API nk_bool nk_select_label(struct nk_context*, const char*, nk_flags align, nk_bool value);
NK_API nk_bool nk_select_text(struct nk_context*, const char*, int, nk_flags align, nk_bool value);
NK_API nk_bool nk_select_image_label(struct nk_context*, struct nk_image,const char*, nk_flags align, nk_bool value);
NK_API nk_bool nk_select_image_text(struct nk_context*, struct nk_image,const char*, int, nk_flags align, nk_bool value);
NK_API nk_bool nk_select_symbol_label(struct nk_context*,enum nk_symbol_type,  const char*, nk_flags align, nk_bool value);
NK_API nk_bool nk_select_symbol_text(struct nk_context*,enum nk_symbol_type, const char*, int, nk_flags align, nk_bool value);

/* =============================================================================
 *
 *                                  SLIDER
 *
 * ============================================================================= */
NK_API float nk_slide_float(struct nk_context*, float min, float val, float max, float step);
NK_API int nk_slide_int(struct nk_context*, int min, int val, int max, int step);
NK_API nk_bool nk_slider_float(struct nk_context*, float min, float *val, float max, float step);
NK_API nk_bool nk_slider_int(struct nk_context*, int min, int *val, int max, int step);

/* =============================================================================
 *
 *                                   KNOB
 *
 * ============================================================================= */
NK_API nk_bool nk_knob_float(struct nk_context*, float min, float *val, float max, float step, enum nk_heading zero_direction, float dead_zone_degrees);
NK_API nk_bool nk_knob_int(struct nk_context*, int min, int *val, int max, int step, enum nk_heading zero_direction, float dead_zone_degrees);

/* =============================================================================
 *
 *                                  PROGRESSBAR
 *
 * ============================================================================= */
NK_API nk_bool nk_progress(struct nk_context*, nk_size *cur, nk_size max, nk_bool modifyable);
NK_API nk_size nk_prog(struct nk_context*, nk_size cur, nk_size max, nk_bool modifyable);

/* =============================================================================
 *
 *                                  COLOR PICKER
 *
 * ============================================================================= */
NK_API struct nk_colorf nk_color_picker(struct nk_context*, struct nk_colorf, enum nk_color_format);
NK_API nk_bool nk_color_pick(struct nk_context*, struct nk_colorf*, enum nk_color_format);
/* =============================================================================
 *
 *                                  PROPERTIES
 *
 * =============================================================================*/
/**
 * \page Properties
 * Properties are the main value modification widgets in Nuklear. Changing a value
 * can be achieved by dragging, adding/removing incremental steps on button click
 * or by directly typing a number.
 *
 * # Usage
 * Each property requires a unique name for identification that is also used for
 * displaying a label. If you want to use the same name multiple times make sure
 * add a '#' before your name. The '#' will not be shown but will generate a
 * unique ID. Each property also takes in a minimum and maximum value. If you want
 * to make use of the complete number range of a type just use the provided
 * type limits from `limits.h`. For example `INT_MIN` and `INT_MAX` for
 * `nk_property_int` and `nk_propertyi`. In additional each property takes in
 * a increment value that will be added or subtracted if either the increment
 * decrement button is clicked. Finally there is a value for increment per pixel
 * dragged that is added or subtracted from the value.
 *
 * ```c
 * int value = 0;
 * struct nk_context ctx;
 * nk_init_xxx(&ctx, ...);
 * while (1) {
 *     // Input
 *     Event evt;
 *     nk_input_begin(&ctx);
 *     while (GetEvent(&evt)) {
 *         if (evt.type == MOUSE_MOVE)
 *             nk_input_motion(&ctx, evt.motion.x, evt.motion.y);
 *         else if (evt.type == [...]) {
 *             nk_input_xxx(...);
 *         }
 *     }
 *     nk_input_end(&ctx);
 *     //
 *     // Window
 *     if (nk_begin_xxx(...) {
 *         // Property
 *         nk_layout_row_dynamic(...);
 *         nk_property_int(ctx, "ID", INT_MIN, &value, INT_MAX, 1, 1);
 *     }
 *     nk_end(ctx);
 *     //
 *     // Draw
 *     const struct nk_command *cmd = 0;
 *     nk_foreach(cmd, &ctx) {
 *     switch (cmd->type) {
 *     case NK_COMMAND_LINE:
 *         your_draw_line_function(...)
 *         break;
 *     case NK_COMMAND_RECT
 *         your_draw_rect_function(...)
 *         break;
 *     case ...:
 *         // [...]
 *     }
 *     nk_clear(&ctx);
 * }
 * nk_free(&ctx);
 * ```
 *
 * # Reference
 * Function            | Description
 * --------------------|-------------------------------------------
 * \ref nk_property_int     | Integer property directly modifying a passed in value
 * \ref nk_property_float   | Float property directly modifying a passed in value
 * \ref nk_property_double  | Double property directly modifying a passed in value
 * \ref nk_propertyi        | Integer property returning the modified int value
 * \ref nk_propertyf        | Float property returning the modified float value
 * \ref nk_propertyd        | Double property returning the modified double value
 *

 * # # nk_property_int
 * Integer property directly modifying a passed in value
 * !!! \warning
 *     To generate a unique property ID using the same label make sure to insert
 *     a `#` at the beginning. It will not be shown but guarantees correct behavior.
 *
 * ```c
 * nk_bool nk_property_int(struct nk_context *ctx, const char *name, int min, int *val, int max, int step, float inc_per_pixel);
 * ```
 *
 * Parameter           | Description
 * --------------------|-----------------------------------------------------------
 * \param[in] ctx             | Must point to an previously initialized `nk_context` struct after calling a layouting function
 * \param[in] name            | String used both as a label as well as a unique identifier
 * \param[in] min             | Minimum value not allowed to be underflown
 * \param[in] val             | Integer pointer to be modified
 * \param[in] max             | Maximum value not allowed to be overflown
 * \param[in] step            | Increment added and subtracted on increment and decrement button
 * \param[in] inc_per_pixel   | Value per pixel added or subtracted on dragging
 *
 * \returns `true(1)` if the value changed
 */
NK_API nk_bool nk_property_int(struct nk_context*, const char *name, int min, int *val, int max, int step, float inc_per_pixel);

/**
 * # # nk_property_float
 * Float property directly modifying a passed in value
 * !!! \warning
 *     To generate a unique property ID using the same label make sure to insert
 *     a `#` at the beginning. It will not be shown but guarantees correct behavior.
 *
 * ```c
 * nk_bool nk_property_float(struct nk_context *ctx, const char *name, float min, float *val, float max, float step, float inc_per_pixel);
 * ```
 *
 * Parameter           | Description
 * --------------------|-----------------------------------------------------------
 * \param[in] ctx             | Must point to an previously initialized `nk_context` struct after calling a layouting function
 * \param[in] name            | String used both as a label as well as a unique identifier
 * \param[in] min             | Minimum value not allowed to be underflown
 * \param[in] val             | Float pointer to be modified
 * \param[in] max             | Maximum value not allowed to be overflown
 * \param[in] step            | Increment added and subtracted on increment and decrement button
 * \param[in] inc_per_pixel   | Value per pixel added or subtracted on dragging
 *
 * \returns `true(1)` if the value changed
 */
NK_API nk_bool nk_property_float(struct nk_context*, const char *name, float min, float *val, float max, float step, float inc_per_pixel);

/**
 * # # nk_property_double
 * Double property directly modifying a passed in value
 * !!! \warning
 *     To generate a unique property ID using the same label make sure to insert
 *     a `#` at the beginning. It will not be shown but guarantees correct behavior.
 *
 * ```c
 * nk_bool nk_property_double(struct nk_context *ctx, const char *name, double min, double *val, double max, double step, double inc_per_pixel);
 * ```
 *
 * Parameter           | Description
 * --------------------|-----------------------------------------------------------
 * \param[in] ctx             | Must point to an previously initialized `nk_context` struct after calling a layouting function
 * \param[in] name            | String used both as a label as well as a unique identifier
 * \param[in] min             | Minimum value not allowed to be underflown
 * \param[in] val             | Double pointer to be modified
 * \param[in] max             | Maximum value not allowed to be overflown
 * \param[in] step            | Increment added and subtracted on increment and decrement button
 * \param[in] inc_per_pixel   | Value per pixel added or subtracted on dragging
 *
 * \returns `true(1)` if the value changed
 */
NK_API nk_bool nk_property_double(struct nk_context*, const char *name, double min, double *val, double max, double step, float inc_per_pixel);

/**
 * # # nk_propertyi
 * Integer property modifying a passed in value and returning the new value
 * !!! \warning
 *     To generate a unique property ID using the same label make sure to insert
 *     a `#` at the beginning. It will not be shown but guarantees correct behavior.
 *
 * ```c
 * int nk_propertyi(struct nk_context *ctx, const char *name, int min, int val, int max, int step, float inc_per_pixel);
 * ```
 *
 * \param[in] ctx              Must point to an previously initialized `nk_context` struct after calling a layouting function
 * \param[in] name             String used both as a label as well as a unique identifier
 * \param[in] min              Minimum value not allowed to be underflown
 * \param[in] val              Current integer value to be modified and returned
 * \param[in] max              Maximum value not allowed to be overflown
 * \param[in] step             Increment added and subtracted on increment and decrement button
 * \param[in] inc_per_pixel    Value per pixel added or subtracted on dragging
 *
 * \returns the new modified integer value
 */
NK_API int nk_propertyi(struct nk_context*, const char *name, int min, int val, int max, int step, float inc_per_pixel);

/**
 * # # nk_propertyf
 * Float property modifying a passed in value and returning the new value
 * !!! \warning
 *     To generate a unique property ID using the same label make sure to insert
 *     a `#` at the beginning. It will not be shown but guarantees correct behavior.
 *
 * ```c
 * float nk_propertyf(struct nk_context *ctx, const char *name, float min, float val, float max, float step, float inc_per_pixel);
 * ```
 *
 * \param[in] ctx              Must point to an previously initialized `nk_context` struct after calling a layouting function
 * \param[in] name             String used both as a label as well as a unique identifier
 * \param[i
Download .txt
gitextract_0l_orq51/

├── .editorconfig
├── .gitignore
├── .gitmodules
├── CMakeLists.txt
├── LICENSE
├── README.md
├── examples/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── minshell.html
│   ├── raylib-nuklear-demo.c
│   ├── raylib-nuklear-example.c
│   ├── raylib-nuklear-font-default.c
│   ├── raylib-nuklear-font.c
│   └── raylib-nuklear-texture.c
├── include/
│   ├── CMakeLists.txt
│   ├── nuklear.h
│   └── raylib-nuklear.h
└── test/
    ├── CMakeLists.txt
    ├── raylib-assert.h
    └── raylib-nuklear-test.c
Download .txt
SYMBOL INDEX (2348 symbols across 8 files)

FILE: examples/raylib-nuklear-demo.c
  type nk_context (line 74) | struct nk_context
  type nk_colorf (line 75) | struct nk_colorf
  function main (line 85) | int main(void) {
  function UpdateDrawFrame (line 132) | void UpdateDrawFrame(void) {

FILE: examples/raylib-nuklear-example.c
  function main (line 34) | int main(void)

FILE: examples/raylib-nuklear-font-default.c
  function main (line 35) | int main(void)

FILE: examples/raylib-nuklear-font.c
  function main (line 34) | int main(void)

FILE: examples/raylib-nuklear-texture.c
  function main (line 18) | int main(void)

FILE: include/nuklear.h
  type NK_INT8 (line 428) | typedef NK_INT8 nk_char;
  type NK_UINT8 (line 429) | typedef NK_UINT8 nk_uchar;
  type NK_UINT8 (line 430) | typedef NK_UINT8 nk_byte;
  type NK_INT16 (line 431) | typedef NK_INT16 nk_short;
  type NK_UINT16 (line 432) | typedef NK_UINT16 nk_ushort;
  type NK_INT32 (line 433) | typedef NK_INT32 nk_int;
  type NK_UINT32 (line 434) | typedef NK_UINT32 nk_uint;
  type NK_SIZE_TYPE (line 435) | typedef NK_SIZE_TYPE nk_size;
  type NK_POINTER_TYPE (line 436) | typedef NK_POINTER_TYPE nk_ptr;
  type NK_BOOL (line 437) | typedef NK_BOOL nk_bool;
  type nk_uint (line 439) | typedef nk_uint nk_hash;
  type nk_uint (line 440) | typedef nk_uint nk_flags;
  type nk_uint (line 441) | typedef nk_uint nk_rune;
  type nk_buffer (line 462) | struct nk_buffer
  type nk_allocator (line 463) | struct nk_allocator
  type nk_command_buffer (line 464) | struct nk_command_buffer
  type nk_draw_command (line 465) | struct nk_draw_command
  type nk_convert_config (line 466) | struct nk_convert_config
  type nk_style_item (line 467) | struct nk_style_item
  type nk_text_edit (line 468) | struct nk_text_edit
  type nk_draw_list (line 469) | struct nk_draw_list
  type nk_user_font (line 470) | struct nk_user_font
  type nk_panel (line 471) | struct nk_panel
  type nk_context (line 472) | struct nk_context
  type nk_draw_vertex_layout_element (line 473) | struct nk_draw_vertex_layout_element
  type nk_style_button (line 474) | struct nk_style_button
  type nk_style_toggle (line 475) | struct nk_style_toggle
  type nk_style_selectable (line 476) | struct nk_style_selectable
  type nk_style_slide (line 477) | struct nk_style_slide
  type nk_style_progress (line 478) | struct nk_style_progress
  type nk_style_scrollbar (line 479) | struct nk_style_scrollbar
  type nk_style_edit (line 480) | struct nk_style_edit
  type nk_style_property (line 481) | struct nk_style_property
  type nk_style_chart (line 482) | struct nk_style_chart
  type nk_style_combo (line 483) | struct nk_style_combo
  type nk_style_tab (line 484) | struct nk_style_tab
  type nk_style_window_header (line 485) | struct nk_style_window_header
  type nk_style_window (line 486) | struct nk_style_window
  type nk_color (line 489) | struct nk_color {nk_byte r,g,b,a;}
  type nk_colorf (line 490) | struct nk_colorf {float r,g,b,a;}
  type nk_vec2 (line 491) | struct nk_vec2 {float x,y;}
  type nk_vec2i (line 492) | struct nk_vec2i {short x, y;}
  type nk_rect (line 493) | struct nk_rect {float x,y,w,h;}
  type nk_recti (line 494) | struct nk_recti {short x,y,w,h;}
  type nk_handle (line 496) | typedef union {void *ptr; int id;} nk_handle;
  type nk_image (line 497) | struct nk_image {nk_handle handle; nk_ushort w, h; nk_ushort region[4];}
  type nk_nine_slice (line 498) | struct nk_nine_slice {struct nk_image img; nk_ushort l, t, r, b;}
  type nk_cursor (line 499) | struct nk_cursor {struct nk_image img; struct nk_vec2 size, offset;}
  type nk_scroll (line 500) | struct nk_scroll {nk_uint x, y;}
  type nk_heading (line 506) | enum nk_heading         {NK_UP, NK_RIGHT, NK_DOWN, NK_LEFT}
  type nk_button_behavior (line 507) | enum nk_button_behavior {NK_BUTTON_DEFAULT, NK_BUTTON_REPEATER}
  type nk_modify (line 508) | enum nk_modify          {NK_FIXED = nk_false, NK_MODIFIABLE = nk_true}
  type nk_orientation (line 509) | enum nk_orientation     {NK_VERTICAL, NK_HORIZONTAL}
  type nk_collapse_states (line 510) | enum nk_collapse_states {NK_MINIMIZED = nk_false, NK_MAXIMIZED = nk_true}
  type nk_show_states (line 511) | enum nk_show_states     {NK_HIDDEN = nk_false, NK_SHOWN = nk_true}
  type nk_chart_type (line 512) | enum nk_chart_type      {NK_CHART_LINES, NK_CHART_COLUMN, NK_CHART_MAX}
  type nk_chart_event (line 513) | enum nk_chart_event     {NK_CHART_HOVERING = 0x01, NK_CHART_CLICKED = 0x02}
  type nk_color_format (line 514) | enum nk_color_format    {NK_RGB, NK_RGBA}
  type nk_popup_type (line 515) | enum nk_popup_type      {NK_POPUP_STATIC, NK_POPUP_DYNAMIC}
  type nk_layout_format (line 516) | enum nk_layout_format   {NK_DYNAMIC, NK_STATIC}
  type nk_tree_type (line 517) | enum nk_tree_type       {NK_TREE_NODE, NK_TREE_TAB}
  type nk_tooltip_pos (line 519) | enum nk_tooltip_pos {
  type nk_bool (line 535) | typedef nk_bool(*nk_plugin_filter)(const struct nk_text_edit*, nk_rune u...
  type nk_text_edit (line 536) | struct nk_text_edit
  type nk_allocator (line 539) | struct nk_allocator {
  type nk_symbol_type (line 544) | enum nk_symbol_type {
  type nk_context (line 622) | struct nk_context
  type nk_user_font (line 622) | struct nk_user_font
  type nk_context (line 648) | struct nk_context
  type nk_user_font (line 648) | struct nk_user_font
  type nk_context (line 668) | struct nk_context
  type nk_allocator (line 668) | struct nk_allocator
  type nk_user_font (line 668) | struct nk_user_font
  type nk_context (line 688) | struct nk_context
  type nk_buffer (line 688) | struct nk_buffer
  type nk_buffer (line 688) | struct nk_buffer
  type nk_user_font (line 688) | struct nk_user_font
  type nk_context (line 703) | struct nk_context
  type nk_context (line 715) | struct nk_context
  type nk_context (line 729) | struct nk_context
  type nk_keys (line 800) | enum nk_keys {
  type nk_buttons (line 835) | enum nk_buttons {
  type nk_context (line 856) | struct nk_context
  type nk_context (line 870) | struct nk_context
  type nk_context (line 884) | struct nk_context
  type nk_keys (line 884) | enum nk_keys
  type nk_context (line 900) | struct nk_context
  type nk_buttons (line 900) | enum nk_buttons
  type nk_context (line 916) | struct nk_context
  type nk_vec2 (line 916) | struct nk_vec2
  type nk_context (line 935) | struct nk_context
  type nk_context (line 951) | struct nk_context
  type nk_context (line 968) | struct nk_context
  type nk_context (line 981) | struct nk_context
  type nk_anti_aliasing (line 1214) | enum nk_anti_aliasing {NK_ANTI_ALIASING_OFF, NK_ANTI_ALIASING_ON}
  type nk_convert_result (line 1215) | enum nk_convert_result {
  type nk_draw_null_texture (line 1222) | struct nk_draw_null_texture {
  type nk_convert_config (line 1226) | struct nk_convert_config {
  type nk_context (line 1252) | struct nk_context
  type nk_context (line 1267) | struct nk_context
  type nk_command (line 1267) | struct nk_command
  type nk_context (line 1312) | struct nk_context
  type nk_buffer (line 1312) | struct nk_buffer
  type nk_buffer (line 1312) | struct nk_buffer
  type nk_buffer (line 1312) | struct nk_buffer
  type nk_convert_config (line 1312) | struct nk_convert_config
  type nk_context (line 1327) | struct nk_context
  type nk_buffer (line 1327) | struct nk_buffer
  type nk_context (line 1346) | struct nk_context
  type nk_buffer (line 1346) | struct nk_buffer
  type nk_draw_command (line 1365) | struct nk_draw_command
  type nk_buffer (line 1365) | struct nk_buffer
  type nk_context (line 1365) | struct nk_context
  type nk_panel_flags (line 1538) | enum nk_panel_flags {
  type nk_context (line 1572) | struct nk_context
  type nk_rect (line 1572) | struct nk_rect
  type nk_context (line 1595) | struct nk_context
  type nk_rect (line 1595) | struct nk_rect
  type nk_context (line 1611) | struct nk_context
  type nk_context (line 1629) | struct nk_context
  type nk_context (line 1648) | struct nk_context
  type nk_context (line 1667) | struct nk_context
  type nk_context (line 1686) | struct nk_context
  type nk_context (line 1704) | struct nk_context
  type nk_context (line 1723) | struct nk_context
  type nk_context (line 1744) | struct nk_context
  type nk_context (line 1766) | struct nk_context
  type nk_context (line 1788) | struct nk_context
  type nk_context (line 1810) | struct nk_context
  type nk_context (line 1831) | struct nk_context
  type nk_context (line 1852) | struct nk_context
  type nk_context (line 1871) | struct nk_context
  type nk_context (line 1889) | struct nk_context
  type nk_context (line 1907) | struct nk_context
  type nk_context (line 1925) | struct nk_context
  type nk_context (line 1942) | struct nk_context
  type nk_context (line 1959) | struct nk_context
  type nk_context (line 1975) | struct nk_context
  type nk_context (line 1990) | struct nk_context
  type nk_context (line 2008) | struct nk_context
  type nk_context (line 2024) | struct nk_context
  type nk_rect (line 2024) | struct nk_rect
  type nk_context (line 2040) | struct nk_context
  type nk_vec2 (line 2040) | struct nk_vec2
  type nk_context (line 2056) | struct nk_context
  type nk_vec2 (line 2056) | struct nk_vec2
  type nk_context (line 2071) | struct nk_context
  type nk_context (line 2090) | struct nk_context
  type nk_context (line 2105) | struct nk_context
  type nk_context (line 2121) | struct nk_context
  type nk_collapse_states (line 2121) | enum nk_collapse_states
  type nk_context (line 2138) | struct nk_context
  type nk_collapse_states (line 2138) | enum nk_collapse_states
  type nk_context (line 2153) | struct nk_context
  type nk_show_states (line 2153) | enum nk_show_states
  type nk_context (line 2170) | struct nk_context
  type nk_show_states (line 2170) | enum nk_show_states
  type nk_context (line 2185) | struct nk_context
  type nk_color (line 2185) | struct nk_color
  type nk_widget_align (line 2459) | enum nk_widget_align {
  type nk_widget_alignment (line 2467) | enum nk_widget_alignment {
  type nk_context (line 2486) | struct nk_context
  type nk_context (line 2496) | struct nk_context
  type nk_context (line 2510) | struct nk_context
  type nk_context (line 2525) | struct nk_context
  type nk_context (line 2541) | struct nk_context
  type nk_context (line 2558) | struct nk_context
  type nk_context (line 2573) | struct nk_context
  type nk_layout_format (line 2573) | enum nk_layout_format
  type nk_context (line 2586) | struct nk_context
  type nk_context (line 2598) | struct nk_context
  type nk_context (line 2613) | struct nk_context
  type nk_layout_format (line 2613) | enum nk_layout_format
  type nk_context (line 2627) | struct nk_context
  type nk_context (line 2641) | struct nk_context
  type nk_context (line 2655) | struct nk_context
  type nk_context (line 2669) | struct nk_context
  type nk_context (line 2682) | struct nk_context
  type nk_context (line 2698) | struct nk_context
  type nk_layout_format (line 2698) | enum nk_layout_format
  type nk_context (line 2712) | struct nk_context
  type nk_rect (line 2712) | struct nk_rect
  type nk_context (line 2725) | struct nk_context
  type nk_context (line 2740) | struct nk_context
  type nk_context (line 2756) | struct nk_context
  type nk_vec2 (line 2756) | struct nk_vec2
  type nk_context (line 2772) | struct nk_context
  type nk_vec2 (line 2772) | struct nk_vec2
  type nk_context (line 2788) | struct nk_context
  type nk_rect (line 2788) | struct nk_rect
  type nk_context (line 2804) | struct nk_context
  type nk_rect (line 2804) | struct nk_rect
  type nk_context (line 2818) | struct nk_context
  type nk_context (line 2925) | struct nk_context
  type nk_context (line 2940) | struct nk_context
  type nk_context (line 2953) | struct nk_context
  type nk_context (line 2973) | struct nk_context
  type nk_context (line 2992) | struct nk_context
  type nk_scroll (line 2992) | struct nk_scroll
  type nk_context (line 3005) | struct nk_context
  type nk_context (line 3021) | struct nk_context
  type nk_context (line 3037) | struct nk_context
  type nk_context (line 3173) | struct nk_context
  type nk_tree_type (line 3173) | enum nk_tree_type
  type nk_collapse_states (line 3173) | enum nk_collapse_states
  type nk_context (line 3242) | struct nk_context
  type nk_tree_type (line 3242) | enum nk_tree_type
  type nk_image (line 3242) | struct nk_image
  type nk_collapse_states (line 3242) | enum nk_collapse_states
  type nk_context (line 3255) | struct nk_context
  type nk_context (line 3273) | struct nk_context
  type nk_tree_type (line 3273) | enum nk_tree_type
  type nk_collapse_states (line 3273) | enum nk_collapse_states
  type nk_context (line 3292) | struct nk_context
  type nk_tree_type (line 3292) | enum nk_tree_type
  type nk_image (line 3292) | struct nk_image
  type nk_collapse_states (line 3292) | enum nk_collapse_states
  type nk_context (line 3305) | struct nk_context
  type nk_context (line 3309) | struct nk_context
  type nk_tree_type (line 3309) | enum nk_tree_type
  type nk_collapse_states (line 3309) | enum nk_collapse_states
  type nk_context (line 3310) | struct nk_context
  type nk_tree_type (line 3310) | enum nk_tree_type
  type nk_image (line 3310) | struct nk_image
  type nk_collapse_states (line 3310) | enum nk_collapse_states
  type nk_context (line 3311) | struct nk_context
  type nk_list_view (line 3318) | struct nk_list_view {
  type nk_context (line 3327) | struct nk_context
  type nk_list_view (line 3327) | struct nk_list_view
  type nk_list_view (line 3328) | struct nk_list_view
  type nk_widget_layout_states (line 3334) | enum nk_widget_layout_states {
  type nk_widget_states (line 3340) | enum nk_widget_states {
  type nk_rect (line 3350) | struct nk_rect
  type nk_context (line 3350) | struct nk_context
  type nk_rect (line 3351) | struct nk_rect
  type nk_context (line 3351) | struct nk_context
  type nk_vec2 (line 3351) | struct nk_vec2
  type nk_context (line 3352) | struct nk_context
  type nk_context (line 3353) | struct nk_context
  type nk_context (line 3354) | struct nk_context
  type nk_context (line 3355) | struct nk_context
  type nk_context (line 3356) | struct nk_context
  type nk_context (line 3357) | struct nk_context
  type nk_context (line 3358) | struct nk_context
  type nk_buttons (line 3358) | enum nk_buttons
  type nk_context (line 3359) | struct nk_context
  type nk_buttons (line 3359) | enum nk_buttons
  type nk_context (line 3360) | struct nk_context
  type nk_context (line 3361) | struct nk_context
  type nk_context (line 3362) | struct nk_context
  type nk_text_align (line 3368) | enum nk_text_align {
  type nk_text_alignment (line 3376) | enum nk_text_alignment {
  type nk_context (line 3381) | struct nk_context
  type nk_context (line 3382) | struct nk_context
  type nk_color (line 3382) | struct nk_color
  type nk_context (line 3383) | struct nk_context
  type nk_context (line 3384) | struct nk_context
  type nk_color (line 3384) | struct nk_color
  type nk_context (line 3385) | struct nk_context
  type nk_context (line 3386) | struct nk_context
  type nk_color (line 3386) | struct nk_color
  type nk_context (line 3387) | struct nk_context
  type nk_context (line 3388) | struct nk_context
  type nk_color (line 3388) | struct nk_color
  type nk_context (line 3389) | struct nk_context
  type nk_image (line 3389) | struct nk_image
  type nk_context (line 3390) | struct nk_context
  type nk_image (line 3390) | struct nk_image
  type nk_color (line 3390) | struct nk_color
  type nk_context (line 3392) | struct nk_context
  type nk_context (line 3393) | struct nk_context
  type nk_color (line 3393) | struct nk_color
  type nk_context (line 3394) | struct nk_context
  type nk_context (line 3395) | struct nk_context
  type nk_color (line 3395) | struct nk_color
  type nk_context (line 3396) | struct nk_context
  type nk_context (line 3397) | struct nk_context
  type nk_color (line 3397) | struct nk_color
  type nk_context (line 3398) | struct nk_context
  type nk_context (line 3399) | struct nk_context
  type nk_color (line 3399) | struct nk_color
  type nk_context (line 3400) | struct nk_context
  type nk_context (line 3401) | struct nk_context
  type nk_context (line 3402) | struct nk_context
  type nk_context (line 3403) | struct nk_context
  type nk_context (line 3404) | struct nk_context
  type nk_color (line 3404) | struct nk_color
  type nk_context (line 3405) | struct nk_context
  type nk_color (line 3405) | struct nk_color
  type nk_context (line 3406) | struct nk_context
  type nk_color (line 3406) | struct nk_color
  type nk_context (line 3413) | struct nk_context
  type nk_context (line 3414) | struct nk_context
  type nk_context (line 3415) | struct nk_context
  type nk_color (line 3415) | struct nk_color
  type nk_context (line 3416) | struct nk_context
  type nk_symbol_type (line 3416) | enum nk_symbol_type
  type nk_context (line 3417) | struct nk_context
  type nk_image (line 3417) | struct nk_image
  type nk_context (line 3418) | struct nk_context
  type nk_symbol_type (line 3418) | enum nk_symbol_type
  type nk_context (line 3419) | struct nk_context
  type nk_symbol_type (line 3419) | enum nk_symbol_type
  type nk_context (line 3420) | struct nk_context
  type nk_image (line 3420) | struct nk_image
  type nk_context (line 3421) | struct nk_context
  type nk_image (line 3421) | struct nk_image
  type nk_context (line 3422) | struct nk_context
  type nk_style_button (line 3422) | struct nk_style_button
  type nk_context (line 3423) | struct nk_context
  type nk_style_button (line 3423) | struct nk_style_button
  type nk_context (line 3424) | struct nk_context
  type nk_style_button (line 3424) | struct nk_style_button
  type nk_symbol_type (line 3424) | enum nk_symbol_type
  type nk_context (line 3425) | struct nk_context
  type nk_style_button (line 3425) | struct nk_style_button
  type nk_image (line 3425) | struct nk_image
  type nk_context (line 3426) | struct nk_context
  type nk_style_button (line 3426) | struct nk_style_button
  type nk_symbol_type (line 3426) | enum nk_symbol_type
  type nk_context (line 3427) | struct nk_context
  type nk_style_button (line 3427) | struct nk_style_button
  type nk_symbol_type (line 3427) | enum nk_symbol_type
  type nk_context (line 3428) | struct nk_context
  type nk_style_button (line 3428) | struct nk_style_button
  type nk_image (line 3428) | struct nk_image
  type nk_context (line 3429) | struct nk_context
  type nk_style_button (line 3429) | struct nk_style_button
  type nk_image (line 3429) | struct nk_image
  type nk_context (line 3430) | struct nk_context
  type nk_button_behavior (line 3430) | enum nk_button_behavior
  type nk_context (line 3431) | struct nk_context
  type nk_button_behavior (line 3431) | enum nk_button_behavior
  type nk_context (line 3432) | struct nk_context
  type nk_context (line 3438) | struct nk_context
  type nk_context (line 3439) | struct nk_context
  type nk_context (line 3440) | struct nk_context
  type nk_context (line 3441) | struct nk_context
  type nk_context (line 3442) | struct nk_context
  type nk_context (line 3443) | struct nk_context
  type nk_context (line 3444) | struct nk_context
  type nk_context (line 3445) | struct nk_context
  type nk_context (line 3446) | struct nk_context
  type nk_context (line 3447) | struct nk_context
  type nk_context (line 3448) | struct nk_context
  type nk_context (line 3454) | struct nk_context
  type nk_context (line 3455) | struct nk_context
  type nk_context (line 3456) | struct nk_context
  type nk_context (line 3457) | struct nk_context
  type nk_context (line 3458) | struct nk_context
  type nk_context (line 3459) | struct nk_context
  type nk_context (line 3460) | struct nk_context
  type nk_context (line 3461) | struct nk_context
  type nk_context (line 3467) | struct nk_context
  type nk_context (line 3468) | struct nk_context
  type nk_context (line 3469) | struct nk_context
  type nk_image (line 3469) | struct nk_image
  type nk_context (line 3470) | struct nk_context
  type nk_image (line 3470) | struct nk_image
  type nk_context (line 3471) | struct nk_context
  type nk_symbol_type (line 3471) | enum nk_symbol_type
  type nk_context (line 3472) | struct nk_context
  type nk_symbol_type (line 3472) | enum nk_symbol_type
  type nk_context (line 3474) | struct nk_context
  type nk_context (line 3475) | struct nk_context
  type nk_context (line 3476) | struct nk_context
  type nk_image (line 3476) | struct nk_image
  type nk_context (line 3477) | struct nk_context
  type nk_image (line 3477) | struct nk_image
  type nk_context (line 3478) | struct nk_context
  type nk_symbol_type (line 3478) | enum nk_symbol_type
  type nk_context (line 3479) | struct nk_context
  type nk_symbol_type (line 3479) | enum nk_symbol_type
  type nk_context (line 3486) | struct nk_context
  type nk_context (line 3487) | struct nk_context
  type nk_context (line 3488) | struct nk_context
  type nk_context (line 3489) | struct nk_context
  type nk_context (line 3496) | struct nk_context
  type nk_heading (line 3496) | enum nk_heading
  type nk_context (line 3497) | struct nk_context
  type nk_heading (line 3497) | enum nk_heading
  type nk_context (line 3504) | struct nk_context
  type nk_context (line 3505) | struct nk_context
  type nk_context (line 3512) | struct nk_context
  type nk_colorf (line 3512) | struct nk_colorf
  type nk_color_format (line 3512) | enum nk_color_format
  type nk_context (line 3513) | struct nk_context
  type nk_colorf (line 3513) | struct nk_colorf
  type nk_color_format (line 3513) | enum nk_color_format
  type nk_context (line 3613) | struct nk_context
  type nk_context (line 3638) | struct nk_context
  type nk_context (line 3663) | struct nk_context
  type nk_context (line 3686) | struct nk_context
  type nk_context (line 3709) | struct nk_context
  type nk_context (line 3732) | struct nk_context
  type nk_edit_flags (line 3739) | enum nk_edit_flags {
  type nk_edit_types (line 3754) | enum nk_edit_types {
  type nk_edit_events (line 3760) | enum nk_edit_events {
  type nk_context (line 3767) | struct nk_context
  type nk_context (line 3768) | struct nk_context
  type nk_context (line 3769) | struct nk_context
  type nk_text_edit (line 3769) | struct nk_text_edit
  type nk_context (line 3770) | struct nk_context
  type nk_context (line 3771) | struct nk_context
  type nk_context (line 3777) | struct nk_context
  type nk_chart_type (line 3777) | enum nk_chart_type
  type nk_context (line 3778) | struct nk_context
  type nk_chart_type (line 3778) | enum nk_chart_type
  type nk_color (line 3778) | struct nk_color
  type nk_color (line 3778) | struct nk_color
  type nk_context (line 3779) | struct nk_context
  type nk_chart_type (line 3779) | enum nk_chart_type
  type nk_context (line 3780) | struct nk_context
  type nk_chart_type (line 3780) | enum nk_chart_type
  type nk_color (line 3780) | struct nk_color
  type nk_color (line 3780) | struct nk_color
  type nk_context (line 3781) | struct nk_context
  type nk_context (line 3782) | struct nk_context
  type nk_context (line 3783) | struct nk_context
  type nk_context (line 3784) | struct nk_context
  type nk_chart_type (line 3784) | enum nk_chart_type
  type nk_context (line 3785) | struct nk_context
  type nk_chart_type (line 3785) | enum nk_chart_type
  type nk_context (line 3791) | struct nk_context
  type nk_popup_type (line 3791) | enum nk_popup_type
  type nk_rect (line 3791) | struct nk_rect
  type nk_context (line 3792) | struct nk_context
  type nk_context (line 3793) | struct nk_context
  type nk_context (line 3794) | struct nk_context
  type nk_context (line 3795) | struct nk_context
  type nk_context (line 3801) | struct nk_context
  type nk_vec2 (line 3801) | struct nk_vec2
  type nk_context (line 3802) | struct nk_context
  type nk_vec2 (line 3802) | struct nk_vec2
  type nk_context (line 3803) | struct nk_context
  type nk_vec2 (line 3803) | struct nk_vec2
  type nk_context (line 3804) | struct nk_context
  type nk_vec2 (line 3804) | struct nk_vec2
  type nk_context (line 3805) | struct nk_context
  type nk_vec2 (line 3805) | struct nk_vec2
  type nk_context (line 3806) | struct nk_context
  type nk_vec2 (line 3806) | struct nk_vec2
  type nk_context (line 3807) | struct nk_context
  type nk_vec2 (line 3807) | struct nk_vec2
  type nk_context (line 3808) | struct nk_context
  type nk_vec2 (line 3808) | struct nk_vec2
  type nk_context (line 3814) | struct nk_context
  type nk_vec2 (line 3814) | struct nk_vec2
  type nk_context (line 3815) | struct nk_context
  type nk_vec2 (line 3815) | struct nk_vec2
  type nk_context (line 3816) | struct nk_context
  type nk_color (line 3816) | struct nk_color
  type nk_vec2 (line 3816) | struct nk_vec2
  type nk_context (line 3817) | struct nk_context
  type nk_symbol_type (line 3817) | enum nk_symbol_type
  type nk_vec2 (line 3817) | struct nk_vec2
  type nk_context (line 3818) | struct nk_context
  type nk_symbol_type (line 3818) | enum nk_symbol_type
  type nk_vec2 (line 3818) | struct nk_vec2
  type nk_context (line 3819) | struct nk_context
  type nk_symbol_type (line 3819) | enum nk_symbol_type
  type nk_vec2 (line 3819) | struct nk_vec2
  type nk_context (line 3820) | struct nk_context
  type nk_image (line 3820) | struct nk_image
  type nk_vec2 (line 3820) | struct nk_vec2
  type nk_context (line 3821) | struct nk_context
  type nk_image (line 3821) | struct nk_image
  type nk_vec2 (line 3821) | struct nk_vec2
  type nk_context (line 3822) | struct nk_context
  type nk_image (line 3822) | struct nk_image
  type nk_vec2 (line 3822) | struct nk_vec2
  type nk_context (line 3823) | struct nk_context
  type nk_context (line 3824) | struct nk_context
  type nk_context (line 3825) | struct nk_context
  type nk_image (line 3825) | struct nk_image
  type nk_context (line 3826) | struct nk_context
  type nk_image (line 3826) | struct nk_image
  type nk_context (line 3827) | struct nk_context
  type nk_symbol_type (line 3827) | enum nk_symbol_type
  type nk_context (line 3828) | struct nk_context
  type nk_symbol_type (line 3828) | enum nk_symbol_type
  type nk_context (line 3829) | struct nk_context
  type nk_context (line 3830) | struct nk_context
  type nk_context (line 3836) | struct nk_context
  type nk_vec2 (line 3836) | struct nk_vec2
  type nk_rect (line 3836) | struct nk_rect
  type nk_context (line 3837) | struct nk_context
  type nk_context (line 3838) | struct nk_context
  type nk_context (line 3839) | struct nk_context
  type nk_image (line 3839) | struct nk_image
  type nk_context (line 3840) | struct nk_context
  type nk_image (line 3840) | struct nk_image
  type nk_context (line 3841) | struct nk_context
  type nk_symbol_type (line 3841) | enum nk_symbol_type
  type nk_context (line 3842) | struct nk_context
  type nk_symbol_type (line 3842) | enum nk_symbol_type
  type nk_context (line 3843) | struct nk_context
  type nk_context (line 3844) | struct nk_context
  type nk_context (line 3850) | struct nk_context
  type nk_context (line 3851) | struct nk_context
  type nk_tooltip_pos (line 3851) | enum nk_tooltip_pos
  type nk_vec2 (line 3851) | struct nk_vec2
  type nk_context (line 3853) | struct nk_context
  type nk_context (line 3854) | struct nk_context
  type nk_context (line 3855) | struct nk_context
  type nk_tooltip_pos (line 3855) | enum nk_tooltip_pos
  type nk_vec2 (line 3855) | struct nk_vec2
  type nk_context (line 3856) | struct nk_context
  type nk_tooltip_pos (line 3856) | enum nk_tooltip_pos
  type nk_vec2 (line 3856) | struct nk_vec2
  type nk_context (line 3858) | struct nk_context
  type nk_context (line 3859) | struct nk_context
  type nk_tooltip_pos (line 3859) | enum nk_tooltip_pos
  type nk_vec2 (line 3859) | struct nk_vec2
  type nk_context (line 3860) | struct nk_context
  type nk_context (line 3866) | struct nk_context
  type nk_context (line 3867) | struct nk_context
  type nk_context (line 3868) | struct nk_context
  type nk_vec2 (line 3868) | struct nk_vec2
  type nk_context (line 3869) | struct nk_context
  type nk_vec2 (line 3869) | struct nk_vec2
  type nk_context (line 3870) | struct nk_context
  type nk_image (line 3870) | struct nk_image
  type nk_vec2 (line 3870) | struct nk_vec2
  type nk_context (line 3871) | struct nk_context
  type nk_image (line 3871) | struct nk_image
  type nk_vec2 (line 3871) | struct nk_vec2
  type nk_context (line 3872) | struct nk_context
  type nk_image (line 3872) | struct nk_image
  type nk_vec2 (line 3872) | struct nk_vec2
  type nk_context (line 3873) | struct nk_context
  type nk_symbol_type (line 3873) | enum nk_symbol_type
  type nk_vec2 (line 3873) | struct nk_vec2
  type nk_context (line 3874) | struct nk_context
  type nk_symbol_type (line 3874) | enum nk_symbol_type
  type nk_vec2 (line 3874) | struct nk_vec2
  type nk_context (line 3875) | struct nk_context
  type nk_symbol_type (line 3875) | enum nk_symbol_type
  type nk_vec2 (line 3875) | struct nk_vec2
  type nk_context (line 3876) | struct nk_context
  type nk_context (line 3877) | struct nk_context
  type nk_context (line 3878) | struct nk_context
  type nk_image (line 3878) | struct nk_image
  type nk_context (line 3879) | struct nk_context
  type nk_image (line 3879) | struct nk_image
  type nk_context (line 3880) | struct nk_context
  type nk_symbol_type (line 3880) | enum nk_symbol_type
  type nk_context (line 3881) | struct nk_context
  type nk_symbol_type (line 3881) | enum nk_symbol_type
  type nk_context (line 3882) | struct nk_context
  type nk_context (line 3883) | struct nk_context
  type nk_style_colors (line 3892) | enum nk_style_colors {
  type nk_style_cursor (line 3927) | enum nk_style_cursor {
  type nk_context (line 3937) | struct nk_context
  type nk_context (line 3938) | struct nk_context
  type nk_color (line 3938) | struct nk_color
  type nk_context (line 3939) | struct nk_context
  type nk_style_cursor (line 3939) | enum nk_style_cursor
  type nk_cursor (line 3939) | struct nk_cursor
  type nk_context (line 3940) | struct nk_context
  type nk_cursor (line 3940) | struct nk_cursor
  type nk_style_colors (line 3941) | enum nk_style_colors
  type nk_context (line 3942) | struct nk_context
  type nk_user_font (line 3942) | struct nk_user_font
  type nk_context (line 3943) | struct nk_context
  type nk_style_cursor (line 3943) | enum nk_style_cursor
  type nk_context (line 3944) | struct nk_context
  type nk_context (line 3945) | struct nk_context
  type nk_context (line 3947) | struct nk_context
  type nk_user_font (line 3947) | struct nk_user_font
  type nk_context (line 3948) | struct nk_context
  type nk_context (line 3949) | struct nk_context
  type nk_vec2 (line 3949) | struct nk_vec2
  type nk_vec2 (line 3949) | struct nk_vec2
  type nk_context (line 3950) | struct nk_context
  type nk_style_item (line 3950) | struct nk_style_item
  type nk_style_item (line 3950) | struct nk_style_item
  type nk_context (line 3951) | struct nk_context
  type nk_context (line 3952) | struct nk_context
  type nk_color (line 3952) | struct nk_color
  type nk_color (line 3952) | struct nk_color
  type nk_context (line 3954) | struct nk_context
  type nk_context (line 3955) | struct nk_context
  type nk_context (line 3956) | struct nk_context
  type nk_context (line 3957) | struct nk_context
  type nk_context (line 3958) | struct nk_context
  type nk_context (line 3959) | struct nk_context
  type nk_colorf (line 3970) | struct nk_colorf
  type nk_color (line 3972) | struct nk_color
  type nk_colorf (line 3980) | struct nk_colorf
  type nk_colorf (line 3985) | struct nk_colorf
  type nk_colorf (line 3986) | struct nk_colorf
  type nk_color (line 4001) | struct nk_color
  type nk_color (line 4002) | struct nk_color
  type nk_color (line 4003) | struct nk_color
  type nk_color (line 4004) | struct nk_color
  type nk_color (line 4005) | struct nk_color
  type nk_color (line 4007) | struct nk_color
  type nk_color (line 4008) | struct nk_color
  type nk_color (line 4009) | struct nk_color
  type nk_color (line 4011) | struct nk_color
  type nk_color (line 4012) | struct nk_color
  type nk_color (line 4013) | struct nk_color
  type nk_color (line 4014) | struct nk_color
  type nk_color (line 4015) | struct nk_color
  type nk_color (line 4016) | struct nk_color
  type nk_color (line 4018) | struct nk_color
  type nk_color (line 4019) | struct nk_color
  type nk_color (line 4020) | struct nk_color
  type nk_color (line 4021) | struct nk_color
  type nk_color (line 4022) | struct nk_color
  type nk_color (line 4023) | struct nk_color
  type nk_image (line 4034) | struct nk_image
  type nk_rect (line 4035) | struct nk_rect
  type nk_rect (line 4036) | struct nk_rect
  type nk_rect (line 4037) | struct nk_rect
  type nk_nine_slice (line 4046) | struct nk_nine_slice
  type nk_rect (line 4047) | struct nk_rect
  type nk_rect (line 4048) | struct nk_rect
  type nk_rect (line 4049) | struct nk_rect
  type nk_vec2 (line 4056) | struct nk_vec2
  type nk_rect (line 4056) | struct nk_rect
  type nk_heading (line 4056) | enum nk_heading
  type nk_vec2 (line 4066) | struct nk_vec2
  type nk_vec2 (line 4066) | struct nk_vec2
  type nk_rect (line 4069) | struct nk_rect
  type nk_rect (line 4070) | struct nk_rect
  type nk_user_font_glyph (line 4255) | struct nk_user_font_glyph
  type nk_user_font_glyph (line 4258) | struct nk_user_font_glyph
  type nk_user_font_glyph (line 4262) | struct nk_user_font_glyph {
  type nk_user_font (line 4270) | struct nk_user_font {
  type nk_font_coord_type (line 4281) | enum nk_font_coord_type {
  type nk_font (line 4286) | struct nk_font
  type nk_baked_font (line 4287) | struct nk_baked_font {
  type nk_font_config (line 4296) | struct nk_font_config {
  type nk_font_glyph (line 4317) | struct nk_font_glyph {
  type nk_font (line 4324) | struct nk_font {
  type nk_font_atlas_format (line 4336) | enum nk_font_atlas_format {
  type nk_font_atlas (line 4341) | struct nk_font_atlas {
  type nk_font_atlas (line 4367) | struct nk_font_atlas
  type nk_font_atlas (line 4369) | struct nk_font_atlas
  type nk_allocator (line 4369) | struct nk_allocator
  type nk_font_atlas (line 4370) | struct nk_font_atlas
  type nk_allocator (line 4370) | struct nk_allocator
  type nk_allocator (line 4370) | struct nk_allocator
  type nk_font_atlas (line 4371) | struct nk_font_atlas
  type nk_font_atlas (line 4373) | struct nk_font_atlas
  type nk_font_config (line 4373) | struct nk_font_config
  type nk_font_atlas (line 4375) | struct nk_font_atlas
  type nk_font_config (line 4375) | struct nk_font_config
  type nk_font_atlas (line 4377) | struct nk_font_atlas
  type nk_font_config (line 4377) | struct nk_font_config
  type nk_font_atlas (line 4379) | struct nk_font_atlas
  type nk_font_config (line 4379) | struct nk_font_config
  type nk_font_atlas (line 4381) | struct nk_font_atlas
  type nk_font_config (line 4381) | struct nk_font_config
  type nk_font_atlas (line 4382) | struct nk_font_atlas
  type nk_font_config (line 4382) | struct nk_font_config
  type nk_font_atlas (line 4383) | struct nk_font_atlas
  type nk_font_atlas_format (line 4383) | enum nk_font_atlas_format
  type nk_font_atlas (line 4384) | struct nk_font_atlas
  type nk_draw_null_texture (line 4384) | struct nk_draw_null_texture
  type nk_font (line 4385) | struct nk_font
  type nk_font_atlas (line 4386) | struct nk_font_atlas
  type nk_font_atlas (line 4387) | struct nk_font_atlas
  type nk_memory_status (line 4427) | struct nk_memory_status {
  type nk_allocation_type (line 4436) | enum nk_allocation_type {
  type nk_buffer_allocation_type (line 4441) | enum nk_buffer_allocation_type {
  type nk_buffer_marker (line 4447) | struct nk_buffer_marker {
  type nk_memory (line 4452) | struct nk_memory {void *ptr;nk_size size;}
  type nk_buffer (line 4453) | struct nk_buffer {
  type nk_buffer (line 4466) | struct nk_buffer
  type nk_buffer (line 4468) | struct nk_buffer
  type nk_allocator (line 4468) | struct nk_allocator
  type nk_buffer (line 4469) | struct nk_buffer
  type nk_memory_status (line 4470) | struct nk_memory_status
  type nk_buffer (line 4470) | struct nk_buffer
  type nk_buffer (line 4471) | struct nk_buffer
  type nk_buffer_allocation_type (line 4471) | enum nk_buffer_allocation_type
  type nk_buffer (line 4472) | struct nk_buffer
  type nk_buffer_allocation_type (line 4472) | enum nk_buffer_allocation_type
  type nk_buffer (line 4473) | struct nk_buffer
  type nk_buffer_allocation_type (line 4473) | enum nk_buffer_allocation_type
  type nk_buffer (line 4474) | struct nk_buffer
  type nk_buffer (line 4475) | struct nk_buffer
  type nk_buffer (line 4476) | struct nk_buffer
  type nk_buffer (line 4477) | struct nk_buffer
  type nk_buffer (line 4478) | struct nk_buffer
  type nk_str (line 4490) | struct nk_str {
  type nk_str (line 4496) | struct nk_str
  type nk_str (line 4498) | struct nk_str
  type nk_allocator (line 4498) | struct nk_allocator
  type nk_str (line 4499) | struct nk_str
  type nk_str (line 4500) | struct nk_str
  type nk_str (line 4501) | struct nk_str
  type nk_str (line 4503) | struct nk_str
  type nk_str (line 4504) | struct nk_str
  type nk_str (line 4505) | struct nk_str
  type nk_str (line 4506) | struct nk_str
  type nk_str (line 4507) | struct nk_str
  type nk_str (line 4508) | struct nk_str
  type nk_str (line 4510) | struct nk_str
  type nk_str (line 4511) | struct nk_str
  type nk_str (line 4513) | struct nk_str
  type nk_str (line 4514) | struct nk_str
  type nk_str (line 4515) | struct nk_str
  type nk_str (line 4516) | struct nk_str
  type nk_str (line 4517) | struct nk_str
  type nk_str (line 4518) | struct nk_str
  type nk_str (line 4520) | struct nk_str
  type nk_str (line 4521) | struct nk_str
  type nk_str (line 4522) | struct nk_str
  type nk_str (line 4523) | struct nk_str
  type nk_str (line 4525) | struct nk_str
  type nk_str (line 4526) | struct nk_str
  type nk_str (line 4527) | struct nk_str
  type nk_str (line 4528) | struct nk_str
  type nk_str (line 4529) | struct nk_str
  type nk_str (line 4531) | struct nk_str
  type nk_str (line 4532) | struct nk_str
  type nk_str (line 4533) | struct nk_str
  type nk_str (line 4534) | struct nk_str
  type nk_text_edit (line 4575) | struct nk_text_edit
  type nk_clipboard (line 4576) | struct nk_clipboard {
  type nk_text_undo_record (line 4582) | struct nk_text_undo_record {
  type nk_text_undo_state (line 4589) | struct nk_text_undo_state {
  type nk_text_edit_type (line 4598) | enum nk_text_edit_type {
  type nk_text_edit_mode (line 4603) | enum nk_text_edit_mode {
  type nk_text_edit (line 4609) | struct nk_text_edit {
  type nk_text_edit (line 4630) | struct nk_text_edit
  type nk_text_edit (line 4631) | struct nk_text_edit
  type nk_text_edit (line 4632) | struct nk_text_edit
  type nk_text_edit (line 4633) | struct nk_text_edit
  type nk_text_edit (line 4634) | struct nk_text_edit
  type nk_text_edit (line 4635) | struct nk_text_edit
  type nk_text_edit (line 4636) | struct nk_text_edit
  type nk_text_edit (line 4640) | struct nk_text_edit
  type nk_text_edit (line 4642) | struct nk_text_edit
  type nk_allocator (line 4642) | struct nk_allocator
  type nk_text_edit (line 4643) | struct nk_text_edit
  type nk_text_edit (line 4644) | struct nk_text_edit
  type nk_text_edit (line 4645) | struct nk_text_edit
  type nk_text_edit (line 4646) | struct nk_text_edit
  type nk_text_edit (line 4647) | struct nk_text_edit
  type nk_text_edit (line 4648) | struct nk_text_edit
  type nk_text_edit (line 4649) | struct nk_text_edit
  type nk_text_edit (line 4650) | struct nk_text_edit
  type nk_text_edit (line 4651) | struct nk_text_edit
  type nk_text_edit (line 4652) | struct nk_text_edit
  type nk_command_type (line 4708) | enum nk_command_type {
  type nk_command (line 4731) | struct nk_command {
  type nk_command_scissor (line 4739) | struct nk_command_scissor {
  type nk_command_line (line 4745) | struct nk_command_line {
  type nk_command_curve (line 4753) | struct nk_command_curve {
  type nk_command_rect (line 4762) | struct nk_command_rect {
  type nk_command_rect_filled (line 4771) | struct nk_command_rect_filled {
  type nk_command_rect_multi_color (line 4779) | struct nk_command_rect_multi_color {
  type nk_command_triangle (line 4789) | struct nk_command_triangle {
  type nk_command_triangle_filled (line 4798) | struct nk_command_triangle_filled {
  type nk_command_circle (line 4806) | struct nk_command_circle {
  type nk_command_circle_filled (line 4814) | struct nk_command_circle_filled {
  type nk_command_arc (line 4821) | struct nk_command_arc {
  type nk_command_arc_filled (line 4830) | struct nk_command_arc_filled {
  type nk_command_polygon (line 4838) | struct nk_command_polygon {
  type nk_command_polygon_filled (line 4846) | struct nk_command_polygon_filled {
  type nk_command_polyline (line 4853) | struct nk_command_polyline {
  type nk_command_image (line 4861) | struct nk_command_image {
  type nk_command_custom (line 4871) | struct nk_command_custom {
  type nk_command_text (line 4879) | struct nk_command_text {
  type nk_command_clipping (line 4891) | enum nk_command_clipping {
  type nk_command_buffer (line 4896) | struct nk_command_buffer {
  type nk_command_buffer (line 4905) | struct nk_command_buffer
  type nk_color (line 4905) | struct nk_color
  type nk_command_buffer (line 4906) | struct nk_command_buffer
  type nk_color (line 4906) | struct nk_color
  type nk_command_buffer (line 4907) | struct nk_command_buffer
  type nk_rect (line 4907) | struct nk_rect
  type nk_color (line 4907) | struct nk_color
  type nk_command_buffer (line 4908) | struct nk_command_buffer
  type nk_rect (line 4908) | struct nk_rect
  type nk_color (line 4908) | struct nk_color
  type nk_command_buffer (line 4909) | struct nk_command_buffer
  type nk_color (line 4909) | struct nk_color
  type nk_command_buffer (line 4910) | struct nk_command_buffer
  type nk_color (line 4910) | struct nk_color
  type nk_command_buffer (line 4911) | struct nk_command_buffer
  type nk_color (line 4911) | struct nk_color
  type nk_command_buffer (line 4912) | struct nk_command_buffer
  type nk_color (line 4912) | struct nk_color
  type nk_command_buffer (line 4915) | struct nk_command_buffer
  type nk_rect (line 4915) | struct nk_rect
  type nk_color (line 4915) | struct nk_color
  type nk_command_buffer (line 4916) | struct nk_command_buffer
  type nk_rect (line 4916) | struct nk_rect
  type nk_color (line 4916) | struct nk_color
  type nk_color (line 4916) | struct nk_color
  type nk_color (line 4916) | struct nk_color
  type nk_color (line 4916) | struct nk_color
  type nk_command_buffer (line 4917) | struct nk_command_buffer
  type nk_rect (line 4917) | struct nk_rect
  type nk_color (line 4917) | struct nk_color
  type nk_command_buffer (line 4918) | struct nk_command_buffer
  type nk_color (line 4918) | struct nk_color
  type nk_command_buffer (line 4919) | struct nk_command_buffer
  type nk_color (line 4919) | struct nk_color
  type nk_command_buffer (line 4920) | struct nk_command_buffer
  type nk_color (line 4920) | struct nk_color
  type nk_command_buffer (line 4923) | struct nk_command_buffer
  type nk_rect (line 4923) | struct nk_rect
  type nk_image (line 4923) | struct nk_image
  type nk_color (line 4923) | struct nk_color
  type nk_command_buffer (line 4924) | struct nk_command_buffer
  type nk_rect (line 4924) | struct nk_rect
  type nk_nine_slice (line 4924) | struct nk_nine_slice
  type nk_color (line 4924) | struct nk_color
  type nk_command_buffer (line 4925) | struct nk_command_buffer
  type nk_rect (line 4925) | struct nk_rect
  type nk_user_font (line 4925) | struct nk_user_font
  type nk_color (line 4925) | struct nk_color
  type nk_color (line 4925) | struct nk_color
  type nk_command_buffer (line 4926) | struct nk_command_buffer
  type nk_rect (line 4926) | struct nk_rect
  type nk_command_buffer (line 4927) | struct nk_command_buffer
  type nk_rect (line 4927) | struct nk_rect
  type nk_mouse_button (line 4934) | struct nk_mouse_button {
  type nk_mouse (line 4939) | struct nk_mouse {
  type nk_key (line 4953) | struct nk_key {
  type nk_keyboard (line 4957) | struct nk_keyboard {
  type nk_input (line 4963) | struct nk_input {
  type nk_input (line 4968) | struct nk_input
  type nk_buttons (line 4968) | enum nk_buttons
  type nk_input (line 4969) | struct nk_input
  type nk_buttons (line 4969) | enum nk_buttons
  type nk_rect (line 4969) | struct nk_rect
  type nk_input (line 4970) | struct nk_input
  type nk_buttons (line 4970) | enum nk_buttons
  type nk_rect (line 4970) | struct nk_rect
  type nk_input (line 4971) | struct nk_input
  type nk_buttons (line 4971) | enum nk_buttons
  type nk_rect (line 4971) | struct nk_rect
  type nk_input (line 4972) | struct nk_input
  type nk_buttons (line 4972) | enum nk_buttons
  type nk_rect (line 4972) | struct nk_rect
  type nk_input (line 4973) | struct nk_input
  type nk_buttons (line 4973) | enum nk_buttons
  type nk_rect (line 4973) | struct nk_rect
  type nk_input (line 4974) | struct nk_input
  type nk_rect (line 4974) | struct nk_rect
  type nk_input (line 4975) | struct nk_input
  type nk_rect (line 4975) | struct nk_rect
  type nk_input (line 4976) | struct nk_input
  type nk_rect (line 4976) | struct nk_rect
  type nk_input (line 4977) | struct nk_input
  type nk_input (line 4978) | struct nk_input
  type nk_buttons (line 4978) | enum nk_buttons
  type nk_rect (line 4978) | struct nk_rect
  type nk_input (line 4979) | struct nk_input
  type nk_buttons (line 4979) | enum nk_buttons
  type nk_input (line 4980) | struct nk_input
  type nk_buttons (line 4980) | enum nk_buttons
  type nk_input (line 4981) | struct nk_input
  type nk_buttons (line 4981) | enum nk_buttons
  type nk_input (line 4982) | struct nk_input
  type nk_keys (line 4982) | enum nk_keys
  type nk_input (line 4983) | struct nk_input
  type nk_keys (line 4983) | enum nk_keys
  type nk_input (line 4984) | struct nk_input
  type nk_keys (line 4984) | enum nk_keys
  type nk_uint (line 5009) | typedef nk_uint nk_draw_index;
  type nk_ushort (line 5011) | typedef nk_ushort nk_draw_index;
  type nk_draw_list_stroke (line 5013) | enum nk_draw_list_stroke {
  type nk_draw_vertex_layout_attribute (line 5018) | enum nk_draw_vertex_layout_attribute {
  type nk_draw_vertex_layout_format (line 5025) | enum nk_draw_vertex_layout_format {
  type nk_draw_vertex_layout_element (line 5054) | struct nk_draw_vertex_layout_element {
  type nk_draw_command (line 5060) | struct nk_draw_command {
  type nk_draw_list (line 5069) | struct nk_draw_list {
  type nk_draw_list (line 5095) | struct nk_draw_list
  type nk_draw_list (line 5096) | struct nk_draw_list
  type nk_convert_config (line 5096) | struct nk_convert_config
  type nk_buffer (line 5096) | struct nk_buffer
  type nk_buffer (line 5096) | struct nk_buffer
  type nk_buffer (line 5096) | struct nk_buffer
  type nk_anti_aliasing (line 5096) | enum nk_anti_aliasing
  type nk_anti_aliasing (line 5096) | enum nk_anti_aliasing
  type nk_draw_list (line 5100) | struct nk_draw_list
  type nk_buffer (line 5100) | struct nk_buffer
  type nk_draw_command (line 5101) | struct nk_draw_command
  type nk_buffer (line 5101) | struct nk_buffer
  type nk_draw_list (line 5101) | struct nk_draw_list
  type nk_draw_list (line 5102) | struct nk_draw_list
  type nk_buffer (line 5102) | struct nk_buffer
  type nk_draw_list (line 5105) | struct nk_draw_list
  type nk_draw_list (line 5106) | struct nk_draw_list
  type nk_vec2 (line 5106) | struct nk_vec2
  type nk_draw_list (line 5107) | struct nk_draw_list
  type nk_vec2 (line 5107) | struct nk_vec2
  type nk_draw_list (line 5108) | struct nk_draw_list
  type nk_vec2 (line 5108) | struct nk_vec2
  type nk_draw_list (line 5109) | struct nk_draw_list
  type nk_vec2 (line 5109) | struct nk_vec2
  type nk_vec2 (line 5109) | struct nk_vec2
  type nk_draw_list (line 5110) | struct nk_draw_list
  type nk_vec2 (line 5110) | struct nk_vec2
  type nk_vec2 (line 5110) | struct nk_vec2
  type nk_vec2 (line 5110) | struct nk_vec2
  type nk_draw_list (line 5111) | struct nk_draw_list
  type nk_color (line 5111) | struct nk_color
  type nk_draw_list (line 5112) | struct nk_draw_list
  type nk_color (line 5112) | struct nk_color
  type nk_draw_list_stroke (line 5112) | enum nk_draw_list_stroke
  type nk_draw_list (line 5115) | struct nk_draw_list
  type nk_vec2 (line 5115) | struct nk_vec2
  type nk_vec2 (line 5115) | struct nk_vec2
  type nk_color (line 5115) | struct nk_color
  type nk_draw_list (line 5116) | struct nk_draw_list
  type nk_rect (line 5116) | struct nk_rect
  type nk_color (line 5116) | struct nk_color
  type nk_draw_list (line 5117) | struct nk_draw_list
  type nk_vec2 (line 5117) | struct nk_vec2
  type nk_vec2 (line 5117) | struct nk_vec2
  type nk_vec2 (line 5117) | struct nk_vec2
  type nk_color (line 5117) | struct nk_color
  type nk_draw_list (line 5118) | struct nk_draw_list
  type nk_vec2 (line 5118) | struct nk_vec2
  type nk_color (line 5118) | struct nk_color
  type nk_draw_list (line 5119) | struct nk_draw_list
  type nk_vec2 (line 5119) | struct nk_vec2
  type nk_vec2 (line 5119) | struct nk_vec2
  type nk_vec2 (line 5119) | struct nk_vec2
  type nk_vec2 (line 5119) | struct nk_vec2
  type nk_color (line 5119) | struct nk_color
  type nk_draw_list (line 5120) | struct nk_draw_list
  type nk_vec2 (line 5120) | struct nk_vec2
  type nk_color (line 5120) | struct nk_color
  type nk_draw_list_stroke (line 5120) | enum nk_draw_list_stroke
  type nk_anti_aliasing (line 5120) | enum nk_anti_aliasing
  type nk_draw_list (line 5123) | struct nk_draw_list
  type nk_rect (line 5123) | struct nk_rect
  type nk_color (line 5123) | struct nk_color
  type nk_draw_list (line 5124) | struct nk_draw_list
  type nk_rect (line 5124) | struct nk_rect
  type nk_color (line 5124) | struct nk_color
  type nk_color (line 5124) | struct nk_color
  type nk_color (line 5124) | struct nk_color
  type nk_color (line 5124) | struct nk_color
  type nk_draw_list (line 5125) | struct nk_draw_list
  type nk_vec2 (line 5125) | struct nk_vec2
  type nk_vec2 (line 5125) | struct nk_vec2
  type nk_vec2 (line 5125) | struct nk_vec2
  type nk_color (line 5125) | struct nk_color
  type nk_draw_list (line 5126) | struct nk_draw_list
  type nk_vec2 (line 5126) | struct nk_vec2
  type nk_color (line 5126) | struct nk_color
  type nk_draw_list (line 5127) | struct nk_draw_list
  type nk_vec2 (line 5127) | struct nk_vec2
  type nk_color (line 5127) | struct nk_color
  type nk_anti_aliasing (line 5127) | enum nk_anti_aliasing
  type nk_draw_list (line 5130) | struct nk_draw_list
  type nk_image (line 5130) | struct nk_image
  type nk_rect (line 5130) | struct nk_rect
  type nk_color (line 5130) | struct nk_color
  type nk_draw_list (line 5131) | struct nk_draw_list
  type nk_user_font (line 5131) | struct nk_user_font
  type nk_rect (line 5131) | struct nk_rect
  type nk_color (line 5131) | struct nk_color
  type nk_draw_list (line 5133) | struct nk_draw_list
  type nk_style_item_type (line 5143) | enum nk_style_item_type {
  type nk_color (line 5150) | struct nk_color
  type nk_image (line 5151) | struct nk_image
  type nk_nine_slice (line 5152) | struct nk_nine_slice
  type nk_style_item (line 5155) | struct nk_style_item {
  type nk_style_text (line 5160) | struct nk_style_text {
  type nk_style_button (line 5167) | struct nk_style_button {
  type nk_style_toggle (line 5197) | struct nk_style_toggle {
  type nk_style_selectable (line 5229) | struct nk_style_selectable {
  type nk_style_slider (line 5266) | struct nk_style_slider {
  type nk_style_knob (line 5307) | struct nk_style_knob {
  type nk_style_progress (line 5340) | struct nk_style_progress {
  type nk_style_scrollbar (line 5368) | struct nk_style_scrollbar {
  type nk_style_edit (line 5403) | struct nk_style_edit {
  type nk_style_property (line 5439) | struct nk_style_property {
  type nk_style_chart (line 5472) | struct nk_style_chart {
  type nk_style_combo (line 5488) | struct nk_style_combo {
  type nk_style_tab (line 5521) | struct nk_style_tab {
  type nk_style_header_align (line 5545) | enum nk_style_header_align {
  type nk_style_window_header (line 5549) | struct nk_style_window_header {
  type nk_style_window (line 5574) | struct nk_style_window {
  type nk_style (line 5614) | struct nk_style {
  type nk_color (line 5641) | struct nk_color
  type nk_image (line 5642) | struct nk_image
  type nk_nine_slice (line 5643) | struct nk_nine_slice
  type nk_panel_type (line 5656) | enum nk_panel_type {
  type nk_panel_set (line 5666) | enum nk_panel_set {
  type nk_chart_slot (line 5672) | struct nk_chart_slot {
  type nk_chart (line 5683) | struct nk_chart {
  type nk_panel_row_layout_type (line 5689) | enum nk_panel_row_layout_type {
  type nk_row_layout (line 5701) | struct nk_row_layout {
  type nk_popup_buffer (line 5717) | struct nk_popup_buffer {
  type nk_menu_state (line 5725) | struct nk_menu_state {
  type nk_panel (line 5730) | struct nk_panel {
  type nk_table (line 5756) | struct nk_table
  type nk_window_flags (line 5757) | enum nk_window_flags {
  type nk_popup_state (line 5768) | struct nk_popup_state {
  type nk_edit_state (line 5780) | struct nk_edit_state {
  type nk_property_state (line 5793) | struct nk_property_state {
  type nk_window (line 5810) | struct nk_window {
  type nk (line 5906) | struct nk
  type nk (line 5908) | struct nk
  type nk (line 5910) | struct nk
  type nk (line 5911) | struct nk
  type nk (line 5912) | enum nk
  type nk_configuration_stacks (line 5922) | struct nk_configuration_stacks {
  type nk_table (line 5938) | struct nk_table {
  type nk_table (line 5947) | struct nk_table
  type nk_panel (line 5948) | struct nk_panel
  type nk_window (line 5949) | struct nk_window
  type nk_page_element (line 5952) | struct nk_page_element {
  type nk_page (line 5958) | struct nk_page {
  type nk_pool (line 5964) | struct nk_pool {
  type nk_context (line 5975) | struct nk_context {
  type Big (line 6083) | struct Big {T x; char c;}
  type nk_rect (line 6217) | struct nk_rect
  type nk_rect (line 6218) | struct nk_rect
  type nk_vec2 (line 6218) | struct nk_vec2
  type nk_rect (line 6219) | struct nk_rect
  type nk_rect (line 6219) | struct nk_rect
  type nk_user_font (line 6249) | struct nk_user_font
  type nk_user_font (line 6250) | struct nk_user_font
  type nk_vec2 (line 6250) | struct nk_vec2
  type nk_allocator (line 6255) | struct nk_allocator
  type nk_buffer_allocation_type (line 6270) | enum nk_buffer_allocation_type
  type nk_buffer (line 6271) | struct nk_buffer
  type nk_buffer_allocation_type (line 6271) | enum nk_buffer_allocation_type
  type nk_buffer (line 6272) | struct nk_buffer
  type nk_command_buffer (line 6275) | struct nk_command_buffer
  type nk_buffer (line 6275) | struct nk_buffer
  type nk_command_clipping (line 6275) | enum nk_command_clipping
  type nk_command_buffer (line 6276) | struct nk_command_buffer
  type nk_command_buffer (line 6277) | struct nk_command_buffer
  type nk_command_type (line 6277) | enum nk_command_type
  type nk_command_buffer (line 6278) | struct nk_command_buffer
  type nk_symbol_type (line 6278) | enum nk_symbol_type
  type nk_rect (line 6278) | struct nk_rect
  type nk_color (line 6278) | struct nk_color
  type nk_color (line 6278) | struct nk_color
  type nk_user_font (line 6278) | struct nk_user_font
  type nk_context (line 6281) | struct nk_context
  type nk_command_buffer (line 6281) | struct nk_command_buffer
  type nk_context (line 6282) | struct nk_context
  type nk_window (line 6282) | struct nk_window
  type nk_context (line 6283) | struct nk_context
  type nk_window (line 6283) | struct nk_window
  type nk_context (line 6284) | struct nk_context
  type nk_window (line 6284) | struct nk_window
  type nk_context (line 6285) | struct nk_context
  type nk_command_buffer (line 6285) | struct nk_command_buffer
  type nk_context (line 6286) | struct nk_context
  type nk_window (line 6286) | struct nk_window
  type nk_context (line 6287) | struct nk_context
  type nk_text_edit (line 6290) | struct nk_text_edit
  type nk_text_edit_type (line 6290) | enum nk_text_edit_type
  type nk_text_edit (line 6291) | struct nk_text_edit
  type nk_user_font (line 6291) | struct nk_user_font
  type nk_text_edit (line 6292) | struct nk_text_edit
  type nk_user_font (line 6292) | struct nk_user_font
  type nk_text_edit (line 6293) | struct nk_text_edit
  type nk_keys (line 6293) | enum nk_keys
  type nk_user_font (line 6293) | struct nk_user_font
  type nk_window_insert_location (line 6296) | enum nk_window_insert_location {
  type nk_context (line 6300) | struct nk_context
  type nk_context (line 6301) | struct nk_context
  type nk_window (line 6301) | struct nk_window
  type nk_context (line 6302) | struct nk_context
  type nk_window (line 6302) | struct nk_window
  type nk_context (line 6303) | struct nk_context
  type nk_context (line 6304) | struct nk_context
  type nk_window (line 6304) | struct nk_window
  type nk_window_insert_location (line 6304) | enum nk_window_insert_location
  type nk_pool (line 6307) | struct nk_pool
  type nk_allocator (line 6307) | struct nk_allocator
  type nk_pool (line 6308) | struct nk_pool
  type nk_pool (line 6309) | struct nk_pool
  type nk_pool (line 6310) | struct nk_pool
  type nk_context (line 6313) | struct nk_context
  type nk_context (line 6314) | struct nk_context
  type nk_page_element (line 6314) | struct nk_page_element
  type nk_context (line 6315) | struct nk_context
  type nk_page_element (line 6315) | struct nk_page_element
  type nk_context (line 6318) | struct nk_context
  type nk_window (line 6319) | struct nk_window
  type nk_table (line 6319) | struct nk_table
  type nk_context (line 6320) | struct nk_context
  type nk_table (line 6320) | struct nk_table
  type nk_window (line 6321) | struct nk_window
  type nk_table (line 6321) | struct nk_table
  type nk_context (line 6322) | struct nk_context
  type nk_window (line 6322) | struct nk_window
  type nk_window (line 6323) | struct nk_window
  type nk_context (line 6326) | struct nk_context
  type nk_context (line 6327) | struct nk_context
  type nk_panel (line 6327) | struct nk_panel
  type nk_style (line 6329) | struct nk_style
  type nk_panel_type (line 6329) | enum nk_panel_type
  type nk_style (line 6330) | struct nk_style
  type nk_panel_type (line 6330) | enum nk_panel_type
  type nk_style (line 6331) | struct nk_style
  type nk_panel_type (line 6331) | enum nk_panel_type
  type nk_panel_type (line 6332) | enum nk_panel_type
  type nk_panel_type (line 6333) | enum nk_panel_type
  type nk_context (line 6334) | struct nk_context
  type nk_panel_type (line 6334) | enum nk_panel_type
  type nk_context (line 6335) | struct nk_context
  type nk_style (line 6338) | struct nk_style
  type nk_panel_type (line 6338) | enum nk_panel_type
  type nk_context (line 6339) | struct nk_context
  type nk_window (line 6339) | struct nk_window
  type nk_context (line 6340) | struct nk_context
  type nk_layout_format (line 6340) | enum nk_layout_format
  type nk_context (line 6341) | struct nk_context
  type nk_window (line 6341) | struct nk_window
  type nk_rect (line 6342) | struct nk_rect
  type nk_context (line 6342) | struct nk_context
  type nk_window (line 6342) | struct nk_window
  type nk_rect (line 6343) | struct nk_rect
  type nk_context (line 6343) | struct nk_context
  type nk_rect (line 6344) | struct nk_rect
  type nk_context (line 6344) | struct nk_context
  type nk_context (line 6347) | struct nk_context
  type nk_rect (line 6347) | struct nk_rect
  type nk_rect (line 6347) | struct nk_rect
  type nk_panel_type (line 6347) | enum nk_panel_type
  type nk_text (line 6350) | struct nk_text {
  type nk_command_buffer (line 6355) | struct nk_command_buffer
  type nk_rect (line 6355) | struct nk_rect
  type nk_text (line 6355) | struct nk_text
  type nk_user_font (line 6355) | struct nk_user_font
  type nk_command_buffer (line 6356) | struct nk_command_buffer
  type nk_rect (line 6356) | struct nk_rect
  type nk_text (line 6356) | struct nk_text
  type nk_user_font (line 6356) | struct nk_user_font
  type nk_rect (line 6359) | struct nk_rect
  type nk_input (line 6359) | struct nk_input
  type nk_button_behavior (line 6359) | enum nk_button_behavior
  type nk_command_buffer (line 6360) | struct nk_command_buffer
  type nk_rect (line 6360) | struct nk_rect
  type nk_style_button (line 6360) | struct nk_style_button
  type nk_command_buffer (line 6361) | struct nk_command_buffer
  type nk_rect (line 6361) | struct nk_rect
  type nk_style_button (line 6361) | struct nk_style_button
  type nk_input (line 6361) | struct nk_input
  type nk_button_behavior (line 6361) | enum nk_button_behavior
  type nk_rect (line 6361) | struct nk_rect
  type nk_command_buffer (line 6362) | struct nk_command_buffer
  type nk_rect (line 6362) | struct nk_rect
  type nk_rect (line 6362) | struct nk_rect
  type nk_style_button (line 6362) | struct nk_style_button
  type nk_user_font (line 6362) | struct nk_user_font
  type nk_command_buffer (line 6363) | struct nk_command_buffer
  type nk_rect (line 6363) | struct nk_rect
  type nk_button_behavior (line 6363) | enum nk_button_behavior
  type nk_style_button (line 6363) | struct nk_style_button
  type nk_input (line 6363) | struct nk_input
  type nk_user_font (line 6363) | struct nk_user_font
  type nk_command_buffer (line 6364) | struct nk_command_buffer
  type nk_rect (line 6364) | struct nk_rect
  type nk_rect (line 6364) | struct nk_rect
  type nk_style_button (line 6364) | struct nk_style_button
  type nk_symbol_type (line 6364) | enum nk_symbol_type
  type nk_user_font (line 6364) | struct nk_user_font
  type nk_command_buffer (line 6365) | struct nk_command_buffer
  type nk_rect (line 6365) | struct nk_rect
  type nk_symbol_type (line 6365) | enum nk_symbol_type
  type nk_button_behavior (line 6365) | enum nk_button_behavior
  type nk_style_button (line 6365) | struct nk_style_button
  type nk_input (line 6365) | struct nk_input
  type nk_user_font (line 6365) | struct nk_user_font
  type nk_command_buffer (line 6366) | struct nk_command_buffer
  type nk_rect (line 6366) | struct nk_rect
  type nk_rect (line 6366) | struct nk_rect
  type nk_style_button (line 6366) | struct nk_style_button
  type nk_image (line 6366) | struct nk_image
  type nk_command_buffer (line 6367) | struct nk_command_buffer
  type nk_rect (line 6367) | struct nk_rect
  type nk_image (line 6367) | struct nk_image
  type nk_button_behavior (line 6367) | enum nk_button_behavior
  type nk_style_button (line 6367) | struct nk_style_button
  type nk_input (line 6367) | struct nk_input
  type nk_command_buffer (line 6368) | struct nk_command_buffer
  type nk_rect (line 6368) | struct nk_rect
  type nk_rect (line 6368) | struct nk_rect
  type nk_rect (line 6368) | struct nk_rect
  type nk_style_button (line 6368) | struct nk_style_button
  type nk_symbol_type (line 6368) | enum nk_symbol_type
  type nk_user_font (line 6368) | struct nk_user_font
  type nk_command_buffer (line 6369) | struct nk_command_buffer
  type nk_rect (line 6369) | struct nk_rect
  type nk_symbol_type (line 6369) | enum nk_symbol_type
  type nk_button_behavior (line 6369) | enum nk_button_behavior
  type nk_style_button (line 6369) | struct nk_style_button
  type nk_user_font (line 6369) | struct nk_user_font
  type nk_input (line 6369) | struct nk_input
  type nk_command_buffer (line 6370) | struct nk_command_buffer
  type nk_rect (line 6370) | struct nk_rect
  type nk_rect (line 6370) | struct nk_rect
  type nk_rect (line 6370) | struct nk_rect
  type nk_style_button (line 6370) | struct nk_style_button
  type nk_user_font (line 6370) | struct nk_user_font
  type nk_image (line 6370) | struct nk_image
  type nk_command_buffer (line 6371) | struct nk_command_buffer
  type nk_rect (line 6371) | struct nk_rect
  type nk_image (line 6371) | struct nk_image
  type nk_button_behavior (line 6371) | enum nk_button_behavior
  type nk_style_button (line 6371) | struct nk_style_button
  type nk_user_font (line 6371) | struct nk_user_font
  type nk_input (line 6371) | struct nk_input
  type nk_toggle_type (line 6374) | enum nk_toggle_type {
  type nk_input (line 6378) | struct nk_input
  type nk_rect (line 6378) | struct nk_rect
  type nk_command_buffer (line 6379) | struct nk_command_buffer
  type nk_style_toggle (line 6379) | struct nk_style_toggle
  type nk_rect (line 6379) | struct nk_rect
  type nk_rect (line 6379) | struct nk_rect
  type nk_rect (line 6379) | struct nk_rect
  type nk_user_font (line 6379) | struct nk_user_font
  type nk_command_buffer (line 6380) | struct nk_command_buffer
  type nk_style_toggle (line 6380) | struct nk_style_toggle
  type nk_rect (line 6380) | struct nk_rect
  type nk_rect (line 6380) | struct nk_rect
  type nk_rect (line 6380) | struct nk_rect
  type nk_user_font (line 6380) | struct nk_user_font
  type nk_command_buffer (line 6381) | struct nk_command_buffer
  type nk_rect (line 6381) | struct nk_rect
  type nk_toggle_type (line 6381) | enum nk_toggle_type
  type nk_style_toggle (line 6381) | struct nk_style_toggle
  type nk_input (line 6381) | struct nk_input
  type nk_user_font (line 6381) | struct nk_user_font
  type nk_input (line 6384) | struct nk_input
  type nk_rect (line 6384) | struct nk_rect
  type nk_rect (line 6384) | struct nk_rect
  type nk_command_buffer (line 6385) | struct nk_command_buffer
  type nk_style_progress (line 6385) | struct nk_style_progress
  type nk_rect (line 6385) | struct nk_rect
  type nk_rect (line 6385) | struct nk_rect
  type nk_command_buffer (line 6386) | struct nk_command_buffer
  type nk_rect (line 6386) | struct nk_rect
  type nk_style_progress (line 6386) | struct nk_style_progress
  type nk_input (line 6386) | struct nk_input
  type nk_rect (line 6389) | struct nk_rect
  type nk_rect (line 6389) | struct nk_rect
  type nk_input (line 6389) | struct nk_input
  type nk_rect (line 6389) | struct nk_rect
  type nk_command_buffer (line 6390) | struct nk_command_buffer
  type nk_style_slider (line 6390) | struct nk_style_slider
  type nk_rect (line 6390) | struct nk_rect
  type nk_rect (line 6390) | struct nk_rect
  type nk_command_buffer (line 6391) | struct nk_command_buffer
  type nk_rect (line 6391) | struct nk_rect
  type nk_style_slider (line 6391) | struct nk_style_slider
  type nk_input (line 6391) | struct nk_input
  type nk_user_font (line 6391) | struct nk_user_font
  type nk_input (line 6394) | struct nk_input
  type nk_rect (line 6394) | struct nk_rect
  type nk_rect (line 6394) | struct nk_rect
  type nk_rect (line 6394) | struct nk_rect
  type nk_rect (line 6394) | struct nk_rect
  type nk_orientation (line 6394) | enum nk_orientation
  type nk_command_buffer (line 6395) | struct nk_command_buffer
  type nk_style_scrollbar (line 6395) | struct nk_style_scrollbar
  type nk_rect (line 6395) | struct nk_rect
  type nk_rect (line 6395) | struct nk_rect
  type nk_command_buffer (line 6396) | struct nk_command_buffer
  type nk_rect (line 6396) | struct nk_rect
  type nk_style_scrollbar (line 6396) | struct nk_style_scrollbar
  type nk_input (line 6396) | struct nk_input
  type nk_user_font (line 6396) | struct nk_user_font
  type nk_command_buffer (line 6397) | struct nk_command_buffer
  type nk_rect (line 6397) | struct nk_rect
  type nk_style_scrollbar (line 6397) | struct nk_style_scrollbar
  type nk_input (line 6397) | struct nk_input
  type nk_user_font (line 6397) | struct nk_user_font
  type nk_command_buffer (line 6400) | struct nk_command_buffer
  type nk_style_selectable (line 6400) | struct nk_style_selectable
  type nk_rect (line 6400) | struct nk_rect
  type nk_rect (line 6400) | struct nk_rect
  type nk_image (line 6400) | struct nk_image
  type nk_symbol_type (line 6400) | enum nk_symbol_type
  type nk_user_font (line 6400) | struct nk_user_font
  type nk_command_buffer (line 6401) | struct nk_command_buffer
  type nk_rect (line 6401) | struct nk_rect
  type nk_style_selectable (line 6401) | struct nk_style_selectable
  type nk_input (line 6401) | struct nk_input
  type nk_user_font (line 6401) | struct nk_user_font
  type nk_command_buffer (line 6402) | struct nk_command_buffer
  type nk_rect (line 6402) | struct nk_rect
  type nk_image (line 6402) | struct nk_image
  type nk_style_selectable (line 6402) | struct nk_style_selectable
  type nk_input (line 6402) | struct nk_input
  type nk_user_font (line 6402) | struct nk_user_font
  type nk_command_buffer (line 6405) | struct nk_command_buffer
  type nk_style_edit (line 6405) | struct nk_style_edit
  type nk_user_font (line 6405) | struct nk_user_font
  type nk_color (line 6405) | struct nk_color
  type nk_color (line 6405) | struct nk_color
  type nk_command_buffer (line 6406) | struct nk_command_buffer
  type nk_rect (line 6406) | struct nk_rect
  type nk_text_edit (line 6406) | struct nk_text_edit
  type nk_style_edit (line 6406) | struct nk_style_edit
  type nk_input (line 6406) | struct nk_input
  type nk_user_font (line 6406) | struct nk_user_font
  type nk_rect (line 6409) | struct nk_rect
  type nk_rect (line 6409) | struct nk_rect
  type nk_rect (line 6409) | struct nk_rect
  type nk_rect (line 6409) | struct nk_rect
  type nk_colorf (line 6409) | struct nk_colorf
  type nk_input (line 6409) | struct nk_input
  type nk_command_buffer (line 6410) | struct nk_command_buffer
  type nk_rect (line 6410) | struct nk_rect
  type nk_rect (line 6410) | struct nk_rect
  type nk_rect (line 6410) | struct nk_rect
  type nk_colorf (line 6410) | struct nk_colorf
  type nk_command_buffer (line 6411) | struct nk_command_buffer
  type nk_colorf (line 6411) | struct nk_colorf
  type nk_color_format (line 6411) | enum nk_color_format
  type nk_rect (line 6411) | struct nk_rect
  type nk_vec2 (line 6411) | struct nk_vec2
  type nk_input (line 6411) | struct nk_input
  type nk_user_font (line 6411) | struct nk_user_font
  type nk_property_status (line 6414) | enum nk_property_status {
  type nk_property_filter (line 6419) | enum nk_property_filter {
  type nk_property_kind (line 6423) | enum nk_property_kind {
  type nk_property_variant (line 6433) | struct nk_property_variant {
  type nk_input (line 6444) | struct nk_input
  type nk_rect (line 6444) | struct nk_rect
  type nk_property_variant (line 6444) | struct nk_property_variant
  type nk_input (line 6445) | struct nk_input
  type nk_rect (line 6445) | struct nk_rect
  type nk_rect (line 6445) | struct nk_rect
  type nk_rect (line 6445) | struct nk_rect
  type nk_rect (line 6445) | struct nk_rect
  type nk_property_variant (line 6445) | struct nk_property_variant
  type nk_command_buffer (line 6446) | struct nk_command_buffer
  type nk_style_property (line 6446) | struct nk_style_property
  type nk_rect (line 6446) | struct nk_rect
  type nk_rect (line 6446) | struct nk_rect
  type nk_user_font (line 6446) | struct nk_user_font
  type nk_command_buffer (line 6447) | struct nk_command_buffer
  type nk_rect (line 6447) | struct nk_rect
  type nk_property_variant (line 6447) | struct nk_property_variant
  type nk_style_property (line 6447) | struct nk_style_property
  type nk_property_filter (line 6447) | enum nk_property_filter
  type nk_input (line 6447) | struct nk_input
  type nk_user_font (line 6447) | struct nk_user_font
  type nk_text_edit (line 6447) | struct nk_text_edit
  type nk_button_behavior (line 6447) | enum nk_button_behavior
  type nk_context (line 6448) | struct nk_context
  type nk_property_variant (line 6448) | struct nk_property_variant
  type nk_property_filter (line 6448) | enum nk_property_filter
  type nk_allocator (line 6474) | struct nk_allocator
  type nk_allocator (line 6474) | struct nk_allocator
  function nk_stbtt_free (line 6478) | static void
  function NK_LIB (line 6530) | NK_LIB float
  function NK_LIB (line 6544) | NK_LIB float
  function NK_LIB (line 6559) | NK_LIB float
  function NK_LIB (line 6577) | NK_LIB float
  function NK_LIB (line 6596) | NK_LIB float
  function NK_LIB (line 6620) | NK_LIB nk_uint
  function NK_LIB (line 6633) | NK_LIB double
  function NK_LIB (line 6650) | NK_LIB int
  function NK_LIB (line 6657) | NK_LIB int
  function NK_LIB (line 6663) | NK_LIB int
  function NK_LIB (line 6676) | NK_LIB int
  function NK_LIB (line 6693) | NK_LIB float
  function nk_rect (line 6698) | nk_rect
  function nk_rect (line 6703) | nk_rect
  function nk_rect (line 6711) | nk_rect
  function nk_rect (line 6721) | nk_rect
  function nk_rect (line 6726) | nk_rect
  function nk_rect (line 6731) | nk_rect
  function nk_vec2 (line 6736) | nk_vec2
  function nk_vec2 (line 6743) | nk_vec2
  function nk_rect (line 6750) | nk_rect
  function nk_rect (line 6762) | nk_rect
  function nk_vec2 (line 6772) | nk_vec2
  function nk_vec2 (line 6779) | nk_vec2
  function nk_vec2 (line 6787) | nk_vec2
  function nk_vec2 (line 6792) | nk_vec2
  function NK_LIB (line 6797) | NK_LIB void
  function NK_API (line 6811) | NK_API void
  function NK_LIB (line 6859) | NK_LIB nk_bool nk_is_lower(int c) {return (c >= 'a' && c <= 'z') || (c >...
  function NK_LIB (line 6860) | NK_LIB nk_bool nk_is_upper(int c){return (c >= 'A' && c <= 'Z') || (c >=...
  function NK_LIB (line 6861) | NK_LIB int nk_to_upper(int c) {return (c >= 'a' && c <= 'z') ? (c - ('a'...
  function NK_LIB (line 6862) | NK_LIB int nk_to_lower(int c) {return (c >= 'A' && c <= 'Z') ? (c - ('a'...
  function NK_LIB (line 6865) | NK_LIB void*
  function NK_LIB (line 6923) | NK_LIB void
  function NK_LIB (line 6975) | NK_LIB void
  function NK_API (line 6981) | NK_API int
  function NK_API (line 6989) | NK_API int
  function NK_API (line 7014) | NK_API double
  function NK_API (line 7072) | NK_API float
  function NK_API (line 7081) | NK_API int
  function NK_API (line 7103) | NK_API int
  function NK_INTERN (line 7128) | NK_INTERN int
  function NK_INTERN (line 7141) | NK_INTERN int
  function NK_API (line 7150) | NK_API int
  function NK_API (line 7167) | NK_API int
  function NK_API (line 7288) | NK_API int
  function NK_LIB (line 7293) | NK_LIB int
  function NK_INTERN (line 7313) | NK_INTERN void
  function NK_LIB (line 7326) | NK_LIB char*
  function NK_LIB (line 7351) | NK_LIB char*
  function NK_INTERN (line 7432) | NK_INTERN int
  function NK_LIB (line 7751) | NK_LIB int
  function NK_API (line 7768) | NK_API nk_hash
  function NK_LIB (line 7833) | NK_LIB char*
  function NK_LIB (line 7867) | NK_LIB int
  function nk_vec2 (line 7915) | nk_vec2
  function NK_INTERN (line 7985) | NK_INTERN int
  function nk_color (line 8001) | nk_color
  function nk_color (line 8011) | nk_color
  function nk_color (line 8021) | nk_color
  function nk_color (line 8033) | nk_color
  function NK_API (line 8045) | NK_API void
  function NK_API (line 8060) | NK_API void
  function nk_color (line 8073) | nk_color
  function nk_color (line 8078) | nk_color
  function nk_color (line 8083) | nk_color
  function nk_color (line 8093) | nk_color
  function nk_color (line 8098) | nk_color
  function nk_color (line 8103) | nk_color
  function nk_color (line 8113) | nk_color
  function nk_color (line 8123) | nk_color
  function nk_color (line 8128) | nk_color
  function nk_color (line 8133) | nk_color
  function nk_color (line 8143) | nk_color
  function nk_color (line 8148) | nk_color
  function nk_color (line 8153) | nk_color
  function nk_color (line 8158) | nk_color
  function nk_color (line 8163) | nk_color
  function nk_color (line 8168) | nk_color
  function nk_color (line 8173) | nk_color
  function nk_color (line 8178) | nk_color
  function nk_color (line 8187) | nk_color
  function nk_color (line 8192) | nk_color
  function nk_colorf (line 8197) | nk_colorf
  function nk_colorf (line 8224) | nk_colorf
  function nk_color (line 8229) | nk_color
  function nk_color (line 8235) | nk_color
  function NK_API (line 8240) | NK_API nk_uint
  function NK_API (line 8249) | NK_API void
  function NK_API (line 8258) | NK_API void
  function nk_colorf (line 8263) | nk_colorf
  function NK_API (line 8270) | NK_API void
  function NK_API (line 8279) | NK_API void
  function NK_API (line 8284) | NK_API void
  function NK_API (line 8290) | NK_API void
  function NK_API (line 8296) | NK_API void
  function NK_API (line 8317) | NK_API void
  function NK_API (line 8322) | NK_API void
  function NK_API (line 8330) | NK_API void
  function NK_API (line 8335) | NK_API void
  function NK_API (line 8346) | NK_API void
  function NK_API (line 8351) | NK_API void
  function NK_API (line 8361) | NK_API void
  function NK_API (line 8371) | NK_API void
  function NK_API (line 8377) | NK_API void
  function NK_API (line 8386) | NK_API void
  function NK_API (line 8391) | NK_API void
  function NK_INTERN (line 8414) | NK_INTERN int
  function NK_INTERN (line 8425) | NK_INTERN nk_rune
  function NK_API (line 8436) | NK_API int
  function NK_INTERN (line 8464) | NK_INTERN char
  function NK_API (line 8469) | NK_API int
  function NK_API (line 8484) | NK_API int
  function NK_API (line 8507) | NK_API const char*
  function NK_LIB (line 8555) | NK_LIB void*
  function NK_LIB (line 8562) | NK_LIB void
  function NK_API (line 8568) | NK_API void
  function NK_API (line 8579) | NK_API void
  function NK_API (line 8596) | NK_API void
  function NK_LIB (line 8610) | NK_LIB void*
  function NK_LIB (line 8640) | NK_LIB void*
  function NK_LIB (line 8678) | NK_LIB void*
  function NK_API (line 8730) | NK_API void
  function NK_API (line 8738) | NK_API void
  function NK_API (line 8748) | NK_API void
  function NK_API (line 8769) | NK_API void
  function NK_API (line 8779) | NK_API void
  function NK_API (line 8789) | NK_API void
  function NK_API (line 8801) | NK_API void*
  function NK_API (line 8808) | NK_API const void*
  function NK_API (line 8815) | NK_API nk_size
  function NK_API (line 8832) | NK_API void
  function NK_API (line 8844) | NK_API void
  function NK_API (line 8850) | NK_API void
  function NK_API (line 8856) | NK_API int
  function NK_API (line 8869) | NK_API int
  function NK_API (line 8874) | NK_API int
  function NK_API (line 8886) | NK_API int
  function NK_API (line 8904) | NK_API int
  function NK_API (line 8920) | NK_API int
  function NK_API (line 8935) | NK_API int
  function NK_API (line 8970) | NK_API int
  function NK_API (line 8989) | NK_API int
  function NK_API (line 8994) | NK_API int
  function NK_API (line 8999) | NK_API int
  function NK_API (line 9014) | NK_API int
  function NK_API (line 9032) | NK_API int
  function NK_API (line 9048) | NK_API int
  function NK_API (line 9063) | NK_API void
  function NK_API (line 9073) | NK_API void
  function NK_API (line 9094) | NK_API void
  function NK_API (line 9111) | NK_API void
  function NK_API (line 9135) | NK_API char*
  function NK_API (line 9142) | NK_API char*
  function NK_API (line 9178) | NK_API const char*
  function NK_API (line 9185) | NK_API const char*
  function NK_API (line 9221) | NK_API nk_rune
  function NK_API (line 9229) | NK_API char*
  function NK_API (line 9236) | NK_API const char*
  function NK_API (line 9243) | NK_API int
  function NK_API (line 9250) | NK_API int
  function NK_API (line 9257) | NK_API void
  function NK_API (line 9264) | NK_API void
  function NK_LIB (line 9280) | NK_LIB void
  function NK_LIB (line 9293) | NK_LIB void
  function NK_LIB (line 9306) | NK_LIB void*
  function NK_API (line 9339) | NK_API void
  function NK_API (line 9359) | NK_API void
  function NK_API (line 9376) | NK_API void
  function NK_API (line 9399) | NK_API void
  function NK_API (line 9422) | NK_API void
  function NK_API (line 9445) | NK_API void
  function NK_API (line 9471) | NK_API void
  function NK_API (line 9493) | NK_API void
  function NK_API (line 9514) | NK_API void
  function NK_API (line 9531) | NK_API void
  function NK_API (line 9548) | NK_API void
  function NK_API (line 9575) | NK_API void
  function NK_API (line 9602) | NK_API void
  function NK_API (line 9623) | NK_API void
  function NK_API (line 9644) | NK_API void
  function NK_API (line 9665) | NK_API void
  function NK_API (line 9688) | NK_API void
  function NK_API (line 9765) | NK_API void
  function NK_API (line 9788) | NK_API void
  function NK_API (line 9839) | NK_API void
  function NK_API (line 9852) | NK_API void
  function nk_draw_command (line 9880) | nk_draw_command*
  function nk_draw_command (line 9896) | nk_draw_command*
  function nk_draw_command (line 9916) | nk_draw_command*
  function nk_vec2 (line 9930) | nk_vec2*
  function nk_vec2 (line 9948) | nk_vec2
  function nk_draw_command (line 9959) | nk_draw_command*
  function nk_draw_command (line 9990) | nk_draw_command*
  function NK_INTERN (line 10003) | NK_INTERN void
  function NK_INTERN (line 10017) | NK_INTERN void
  function NK_API (line 10041) | NK_API void
  function NK_INTERN (line 10047) | NK_INTERN void*
  function NK_INTERN (line 10071) | NK_INTERN nk_draw_index*
  function NK_INTERN (line 10089) | NK_INTERN int
  function NK_INTERN (line 10096) | NK_INTERN void
  function NK_INTERN (line 10171) | NK_INTERN void
  function NK_INTERN (line 10225) | NK_INTERN void*
  function NK_API (line 10244) | NK_API void
  function NK_API (line 10484) | NK_API void
  function NK_API (line 10608) | NK_API void
  function NK_API (line 10617) | NK_API void
  function NK_API (line 10635) | NK_API void
  function NK_API (line 10651) | NK_API void
  function NK_API (line 10696) | NK_API void
  function NK_API (line 10719) | NK_API void
  function NK_API (line 10746) | NK_API void
  function NK_API (line 10756) | NK_API void
  function NK_API (line 10768) | NK_API void
  function NK_API (line 10783) | NK_API void
  function NK_API (line 10798) | NK_API void
  function NK_API (line 10812) | NK_API void
  function NK_API (line 10846) | NK_API void
  function NK_API (line 10857) | NK_API void
  function NK_API (line 10868) | NK_API void
  function NK_API (line 10879) | NK_API void
  function NK_API (line 10890) | NK_API void
  function NK_INTERN (line 10901) | NK_INTERN void
  function NK_API (line 10938) | NK_API void
  function NK_API (line 10959) | NK_API void
  function NK_API (line 11009) | NK_API nk_flags
  function nk_draw_command (line 11151) | nk_draw_command*
  function nk_draw_command (line 11157) | nk_draw_command*
  function nk_draw_command (line 11162) | nk_draw_command*
  type stbrp_context (line 11251) | typedef struct stbrp_context stbrp_context;
  type stbrp_node (line 11252) | typedef struct stbrp_node    stbrp_node;
  type stbrp_rect (line 11253) | typedef struct stbrp_rect    stbrp_rect;
  type stbrp_coord (line 11255) | typedef int            stbrp_coord;
  type stbrp_rect (line 11285) | struct stbrp_rect
  type stbrp_node (line 11345) | struct stbrp_node
  type stbrp_context (line 11351) | struct stbrp_context
  function STBRP_DEF (line 11399) | STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
  function STBRP_DEF (line 11411) | STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int ...
  function STBRP_DEF (line 11431) | STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int ...
  function stbrp__skyline_find_min_y (line 11457) | static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first...
  type stbrp__findresult (line 11507) | typedef struct
  function stbrp__findresult (line 11513) | static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, ...
  function stbrp__findresult (line 11615) | static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *co...
  function rect_height_compare (line 11694) | static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
  function rect_original_order (line 11705) | static int STBRP__CDECL rect_original_order(const void *a, const void *b)
  function STBRP_DEF (line 11712) | STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects...
  function my_stbtt_initfont (line 12081) | void my_stbtt_initfont(void)
  function my_stbtt_print (line 12093) | void my_stbtt_print(float x, float y, char *text)
  function main (line 12128) | int main(int argc, char **argv)
  function main (line 12169) | int main(int arg, char **argv)
  type stbtt_uint8 (line 12222) | typedef unsigned char   stbtt_uint8;
  type stbtt_int8 (line 12223) | typedef signed   char   stbtt_int8;
  type stbtt_uint16 (line 12224) | typedef unsigned short  stbtt_uint16;
  type stbtt_int16 (line 12225) | typedef signed   short  stbtt_int16;
  type stbtt_uint32 (line 12226) | typedef unsigned int    stbtt_uint32;
  type stbtt_int32 (line 12227) | typedef signed   int    stbtt_int32;
  type stbtt__buf (line 12307) | typedef struct
  type stbtt_bakedchar (line 12321) | typedef struct
  type stbtt_aligned_quad (line 12337) | typedef struct
  type stbtt_packedchar (line 12369) | typedef struct
  type stbtt_pack_context (line 12376) | typedef struct stbtt_pack_context stbtt_pack_context;
  type stbtt_fontinfo (line 12377) | typedef struct stbtt_fontinfo stbtt_fontinfo;
  type stbrp_rect (line 12379) | typedef struct stbrp_rect stbrp_rect;
  type stbtt_pack_range (line 12413) | typedef struct
  type stbtt_pack_context (line 12472) | struct stbtt_pack_context {
  type stbtt_fontinfo (line 12507) | struct stbtt_fontinfo
  type stbtt_kerningentry (line 12598) | typedef struct stbtt_kerningentry
  type stbtt_vertex (line 12629) | typedef struct
  type stbtt__bitmap (line 12718) | typedef struct
  function stbtt_uint8 (line 12927) | static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
  function stbtt_uint8 (line 12934) | static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
  function stbtt__buf_seek (line 12941) | static void stbtt__buf_seek(stbtt__buf *b, int o)
  function stbtt__buf_skip (line 12947) | static void stbtt__buf_skip(stbtt__buf *b, int o)
  function stbtt_uint32 (line 12952) | static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
  function stbtt__buf (line 12962) | static stbtt__buf stbtt__new_buf(const void *p, size_t size)
  function stbtt__buf (line 12975) | static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
  function stbtt__buf (line 12984) | static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
  function stbtt_uint32 (line 12998) | static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
  function stbtt__cff_skip_operand (line 13010) | static void stbtt__cff_skip_operand(stbtt__buf *b) {
  function stbtt__buf (line 13025) | static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
  function stbtt__dict_get_ints (line 13040) | static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, s...
  function stbtt__cff_index_count (line 13048) | static int stbtt__cff_index_count(stbtt__buf *b)
  function stbtt__buf (line 13054) | static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
  function stbtt_uint16 (line 13080) | static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
  function stbtt_int16 (line 13081) | static stbtt_int16 ttSHORT(stbtt_uint8 *p)   { return p[0]*256 + p[1]; }
  function stbtt_uint32 (line 13082) | static stbtt_uint32 ttULONG(stbtt_uint8 *p)  { return (p[0]<<24) + (p[1]...
  function stbtt_int32 (line 13083) | static stbtt_int32 ttLONG(stbtt_uint8 *p)    { return (p[0]<<24) + (p[1]...
  function stbtt__isfont (line 13088) | static int stbtt__isfont(stbtt_uint8 *font)
  function stbtt_uint32 (line 13100) | static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fo...
  function stbtt_GetFontOffsetForIndex_internal (line 13113) | static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_coll...
  function stbtt_GetNumberOfFonts_internal (line 13132) | static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
  function stbtt__buf (line 13148) | static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
  function stbtt__get_svg (line 13162) | static int stbtt__get_svg(stbtt_fontinfo *info)
  function stbtt_InitFont_internal (line 13177) | static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *...
  function STBTT_DEF (line 13290) | STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unico...
  function STBTT_DEF (line 13383) | STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int un...
  function stbtt_setvertex (line 13388) | static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int...
  function stbtt__GetGlyfOffset (line 13397) | static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 13419) | STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 13435) | STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int code...
  function STBTT_DEF (line 13440) | STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__close_shape (line 13452) | static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, ...
  function stbtt__GetGlyphShapeTT (line 13468) | static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_...
  type stbtt__csctx (line 13691) | typedef struct
  function stbtt__track_vertex (line 13705) | static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_in...
  function stbtt__csctx_v (line 13714) | static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int3...
  function stbtt__csctx_close_shape (line 13730) | static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
  function stbtt__csctx_rmove_to (line 13736) | static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rline_to (line 13744) | static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rccurve_to (line 13751) | static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float ...
  function stbtt__buf (line 13762) | static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
  function stbtt__buf (line 13776) | static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info,...
  function stbtt__run_charstring (line 13804) | static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__GetGlyphShapeT2 (line 14063) | static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_...
  function stbtt__GetGlyphInfoT2 (line 14080) | static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_i...
  function STBTT_DEF (line 14091) | STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_...
  function STBTT_DEF (line 14099) | STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int gl...
  function STBTT_DEF (line 14111) | STBTT_DEF int  stbtt_GetKerningTableLength(const stbtt_fontinfo *info)
  function STBTT_DEF (line 14126) | STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_ke...
  function stbtt__GetGlyphKernInfoAdvance (line 14153) | static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, in...
  function stbtt_int32 (line 14183) | static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, i...
  function stbtt_int32 (line 14241) | static stbtt_int32  stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int...
  function stbtt_int32 (line 14290) | static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *...
  function STBTT_DEF (line 14404) | STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int...
  function STBTT_DEF (line 14416) | STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 14423) | STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, in...
  function STBTT_DEF (line 14428) | STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *as...
  function STBTT_DEF (line 14435) | STBTT_DEF int  stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 14446) | STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 14454) | STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, fl...
  function STBTT_DEF (line 14460) | STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *in...
  function STBTT_DEF (line 14466) | STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
  function STBTT_DEF (line 14471) | STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl)
  function STBTT_DEF (line 14488) | STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, cons...
  function STBTT_DEF (line 14505) | STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unic...
  function STBTT_DEF (line 14515) | STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *fon...
  function STBTT_DEF (line 14533) | STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int g...
  function STBTT_DEF (line 14538) | STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo ...
  function STBTT_DEF (line 14543) | STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, i...
  type stbtt__hheap_chunk (line 14552) | typedef struct stbtt__hheap_chunk
  type stbtt__hheap (line 14557) | typedef struct stbtt__hheap
  function stbtt__hheap_free (line 14585) | static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
  function stbtt__hheap_cleanup (line 14591) | static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
  type stbtt__edge (line 14601) | typedef struct stbtt__edge {
  type stbtt__active_edge (line 14607) | typedef struct stbtt__active_edge
  function stbtt__active_edge (line 14629) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__active_edge (line 14651) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__fill_active_edges (line 14676) | static void stbtt__fill_active_edges(unsigned char *scanline, int len, s...
  function stbtt__rasterize_sorted_edges (line 14718) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__handle_clipped_edge (line 14822) | static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__ac...
  function stbtt__sized_trapezoid_area (line 14859) | static float stbtt__sized_trapezoid_area(float height, float top_width, ...
  function stbtt__position_trapezoid_area (line 14866) | static float stbtt__position_trapezoid_area(float height, float tx0, flo...
  function stbtt__sized_triangle_area (line 14871) | static float stbtt__sized_triangle_area(float height, float width)
  function stbtt__fill_active_edges_new (line 14876) | static void stbtt__fill_active_edges_new(float *scanline, float *scanlin...
  function stbtt__rasterize_sorted_edges (line 15091) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__sort_edges_ins_sort (line 15193) | static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
  function stbtt__sort_edges_quicksort (line 15211) | static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
  function stbtt__sort_edges (line 15273) | static void stbtt__sort_edges(stbtt__edge *p, int n)
  type stbtt__point (line 15279) | typedef struct
  function stbtt__rasterize (line 15284) | static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, i...
  function stbtt__add_point (line 15341) | static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
  function stbtt__tesselate_curve (line 15349) | static int stbtt__tesselate_curve(stbtt__point *points, int *num_points,...
  function stbtt__tesselate_cubic (line 15369) | static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points...
  function stbtt__point (line 15412) | static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num...
  function STBTT_DEF (line 15489) | STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_...
  function STBTT_DEF (line 15502) | STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
  function STBTT_DEF (line 15552) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 15571) | STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigne...
  function STBTT_DEF (line 15581) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fo...
  function STBTT_DEF (line 15586) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *i...
  function STBTT_DEF (line 15596) | STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, uns...
  function stbtt_BakeFontBitmap_internal (line 15607) | static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset...
  function STBTT_DEF (line 15653) | STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int p...
  type stbrp_coord (line 15681) | typedef int stbrp_coord;
  type stbrp_context (line 15694) | typedef struct
  type stbrp_node (line 15700) | typedef struct
  type stbrp_rect (line 15705) | struct stbrp_rect
  function stbrp_init_target (line 15711) | static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_...
  function stbrp_pack_rects (line 15722) | static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int ...
  function STBTT_DEF (line 15751) | STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pi...
  function STBTT_DEF (line 15783) | STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc)
  function STBTT_DEF (line 15789) | STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsign...
  function STBTT_DEF (line 15799) | STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *sp...
  function stbtt__h_prefilter (line 15806) | static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__v_prefilter (line 15868) | static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__oversample_shift (line 15930) | static float stbtt__oversample_shift(int oversample)
  function STBTT_DEF (line 15943) | STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, c...
  function STBTT_DEF (line 15978) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontin...
  function STBTT_DEF (line 16002) | STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *sp...
  function STBTT_DEF (line 16091) | STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, st...
  function STBTT_DEF (line 16096) | STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsign...
  function STBTT_DEF (line 16132) | STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigne...
  function STBTT_DEF (line 16144) | STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata...
  function STBTT_DEF (line 16157) | STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int...
  function stbtt__ray_intersect_bezier (line 16192) | static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], floa...
  function stbtt__equal (line 16256) | static int stbtt__equal(float *a, float *b)
  function stbtt__compute_crossings_x (line 16261) | static int stbtt__compute_crossings_x(float x, float y, int nverts, stbt...
  function stbtt__cuberoot (line 16329) | static float stbtt__cuberoot( float x )
  function stbtt__solve_cubic (line 16338) | static int stbtt__solve_cubic(float a, float b, float c, float* r)
  function STBTT_DEF (line 16559) | STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
  function stbtt_int32 (line 16570) | static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint...
  function stbtt_CompareUTF8toUTF16_bigendian_internal (line 16609) | static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len...
  function STBTT_DEF (line 16616) | STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font...
  function stbtt__matchpair (line 16637) | static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint...
  function stbtt__matches (line 16684) | static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_ui...
  function stbtt_FindMatchingFont_internal (line 16713) | static int stbtt_FindMatchingFont_internal(unsigned char *font_collectio...
  function STBTT_DEF (line 16729) | STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
  function STBTT_DEF (line 16736) | STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int...
  function STBTT_DEF (line 16741) | STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
  function STBTT_DEF (line 16746) | STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *...
  function STBTT_DEF (line 16751) | STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, cons...
  function STBTT_DEF (line 16756) | STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len...
  type nk_font_bake_data (line 16900) | struct nk_font_bake_data {
  type nk_font_baker (line 16907) | struct nk_font_baker {
  function NK_INTERN (line 16922) | NK_INTERN int
  function NK_INTERN (line 16931) | NK_INTERN int
  function NK_API (line 16946) | NK_API const nk_rune*
  function NK_API (line 16952) | NK_API const nk_rune*
  function NK_API (line 16965) | NK_API const nk_rune*
  function NK_API (line 16977) | NK_API const nk_rune*
  function NK_INTERN (line 16988) | NK_INTERN void
  function nk_font_baker (line 17020) | nk_font_baker*
  function NK_INTERN (line 17034) | NK_INTERN int
  function NK_INTERN (line 17152) | NK_INTERN void
  function NK_INTERN (line 17265) | NK_INTERN void
  function NK_INTERN (line 17293) | NK_INTERN void
  function NK_INTERN (line 17318) | NK_INTERN float
  function NK_INTERN (line 17351) | NK_INTERN void
  function nk_font_glyph (line 17378) | nk_font_glyph*
  function NK_INTERN (line 17406) | NK_INTERN void
  function nk_decompress_length (line 17590) | NK_INTERN unsigned int
  function NK_INTERN (line 17595) | NK_INTERN void
  function NK_INTERN (line 17604) | NK_INTERN void
  function nk_adler32 (line 17634) | NK_INTERN unsigned int
  function nk_decompress (line 17664) | NK_INTERN unsigned int
  function nk_decode_85_byte (line 17698) | NK_INTERN unsigned int
  function NK_INTERN (line 17703) | NK_INTERN void
  function nk_font_config (line 17731) | nk_font_config
  function NK_API (line 17753) | NK_API void
  function NK_API (line 17767) | NK_API void
  function NK_API (line 17777) | NK_API void
  function NK_API (line 17789) | NK_API void
  function nk_font (line 17806) | nk_font*
  function nk_font (line 17893) | nk_font*
  function nk_font (line 17918) | nk_font*
  function nk_font (line 17944) | nk_font*
  function nk_font (line 17979) | nk_font*
  function nk_font (line 18010) | nk_font*
  function NK_API (line 18023) | NK_API const void*
  function NK_API (line 18148) | NK_API void
  function NK_API (line 18183) | NK_API void
  function NK_API (line 18205) | NK_API void
  function NK_API (line 18254) | NK_API void
  function NK_API (line 18274) | NK_API void
  function NK_API (line 18289) | NK_API void
  function NK_API (line 18301) | NK_API void
  function NK_API (line 18316) | NK_API void
  function NK_API (line 18343) | NK_API void
  function NK_API (line 18351) | NK_API void
  function NK_API (line 18369) | NK_API void
  function NK_API (line 18378) | NK_API void
  function NK_API (line 18387) | NK_API nk_bool
  function NK_API (line 18395) | NK_API nk_bool
  function NK_API (line 18406) | NK_API nk_bool
  function NK_API (line 18422) | NK_API nk_bool
  function NK_API (line 18431) | NK_API nk_bool
  function NK_API (line 18441) | NK_API nk_bool
  function NK_API (line 18451) | NK_API nk_bool
  function NK_API (line 18459) | NK_API nk_bool
  function NK_API (line 18465) | NK_API nk_bool
  function NK_API (line 18471) | NK_API nk_bool
  function NK_API (line 18478) | NK_API nk_bool
  function NK_API (line 18484) | NK_API nk_bool
  function NK_API (line 18494) | NK_API nk_bool
  function NK_API (line 18500) | NK_API nk_bool
  function NK_API (line 18506) | NK_API nk_bool
  function NK_API (line 18516) | NK_API nk_bool
  function NK_API (line 18526) | NK_API nk_bool
  function NK_API (line 18545) | NK_API void nk_style_default(struct nk_context *ctx){nk_style_from_table...
  function NK_API (line 18592) | NK_API const char*
  function nk_style_item (line 18597) | nk_style_item
  function nk_style_item (line 18605) | nk_style_item
  function nk_style_item (line 18613) | nk_style_item
  function nk_style_item (line 18621) | nk_style_item
  function NK_API (line 18629) | NK_API void
  function NK_API (line 19269) | NK_API void
  function NK_API (line 19282) | NK_API nk_bool
  function NK_API (line 19302) | NK_API nk_bool
  function NK_API (line 19352) | NK_API nk_bool NK_STYLE_PUSH_IMPLEMENATION(struct nk, style_item, style_...
  function NK_API (line 19377) | NK_API void
  function NK_API (line 19382) | NK_API void
  function NK_API (line 19387) | NK_API void
  function NK_API (line 19397) | NK_API void
  function NK_INTERN (line 19418) | NK_INTERN void
  function NK_API (line 19432) | NK_API nk_bool
  function NK_API (line 19442) | NK_API nk_bool
  function NK_API (line 19453) | NK_API nk_bool
  function NK_API (line 19474) | NK_API nk_bool
  function NK_API (line 19487) | NK_API void
  function NK_API (line 19496) | NK_API void
  function NK_API (line 19518) | NK_API void
  function NK_LIB (line 19584) | NK_LIB void
  function NK_LIB (line 19595) | NK_LIB void
  function NK_LIB (line 19602) | NK_LIB void
  function NK_LIB (line 19618) | NK_LIB void
  function NK_LIB (line 19630) | NK_LIB void
  function NK_LIB (line 19638) | NK_LIB void
  function NK_LIB (line 19656) | NK_LIB void
  function nk_command (line 19718) | nk_command*
  function nk_command (line 19740) | nk_command*
  function NK_LIB (line 19763) | NK_LIB void
  function NK_LIB (line 19774) | NK_LIB void
  function NK_LIB (line 19787) | NK_LIB void
  function nk_page_element (line 19799) | nk_page_element*
  function nk_page_element (line 19830) | nk_page_element*
  function NK_LIB (line 19856) | NK_LIB void
  function NK_LIB (line 19868) | NK_LIB void
  function nk_table (line 19893) | nk_table*
  function NK_LIB (line 19901) | NK_LIB void
  function NK_LIB (line 19908) | NK_LIB void
  function NK_LIB (line 19926) | NK_LIB void
  function NK_LIB (line 19938) | NK_LIB nk_uint*
  function NK_LIB (line 19956) | NK_LIB nk_uint*
  function NK_LIB (line 19982) | NK_LIB void*
  function NK_LIB (line 19990) | NK_LIB void
  function NK_LIB (line 19997) | NK_LIB nk_bool
  function nk_vec2 (line 20006) | nk_vec2
  function NK_LIB (line 20019) | NK_LIB float
  function nk_color (line 20035) | nk_color
  function NK_LIB (line 20048) | NK_LIB nk_bool
  function NK_LIB (line 20053) | NK_LIB nk_bool
  function NK_LIB (line 20058) | NK_LIB nk_bool
  function NK_LIB (line 20298) | NK_LIB void
  function NK_LIB (line 20603) | NK_LIB void*
  function NK_LIB (line 20612) | NK_LIB void
  function nk_window (line 20639) | nk_window*
  function NK_LIB (line 20655) | NK_LIB void
  function NK_LIB (line 20700) | NK_LIB void
  function NK_API (line 20729) | NK_API nk_bool
  function NK_API (line 20735) | NK_API nk_bool
  function NK_API (line 20890) | NK_API void
  function nk_rect (line 20908) | nk_rect
  function nk_vec2 (line 20916) | nk_vec2
  function nk_vec2 (line 20924) | nk_vec2
  function NK_API (line 20932) | NK_API float
  function NK_API (line 20940) | NK_API float
  function nk_rect (line 20948) | nk_rect
  function nk_vec2 (line 20956) | nk_vec2
  function nk_vec2 (line 20965) | nk_vec2
  function nk_vec2 (line 20975) | nk_vec2
  function nk_command_buffer (line 20984) | nk_command_buffer*
  function nk_panel (line 20993) | nk_panel*
  function NK_API (line 21001) | NK_API void
  function NK_API (line 21015) | NK_API nk_bool
  function NK_API (line 21024) | NK_API nk_bool
  function NK_API (line 21039) | NK_API nk_bool
  function NK_API (line 21066) | NK_API nk_bool
  function NK_API (line 21073) | NK_API nk_bool
  function NK_API (line 21088) | NK_API nk_bool
  function NK_API (line 21103) | NK_API nk_bool
  function NK_API (line 21118) | NK_API nk_bool
  function nk_window (line 21133) | nk_window*
  function NK_API (line 21142) | NK_API void
  function NK_API (line 21155) | NK_API void
  function NK_API (line 21166) | NK_API void
  function NK_API (line 21175) | NK_API void
  function NK_API (line 21184) | NK_API void
  function NK_API (line 21196) | NK_API void
  function NK_API (line 21214) | NK_API void
  function NK_API (line 21222) | NK_API void
  function NK_API (line 21239) | NK_API void
  function NK_API (line 21248) | NK_API void
  function NK_API (line 21266) | NK_API void
  function NK_API (line 21284) | NK_API nk_bool
  function NK_LIB (line 21380) | NK_LIB nk_bool
  function NK_API (line 21463) | NK_API void
  function NK_API (line 21475) | NK_API void
  function NK_API (line 21507) | NK_API void
  function NK_API (line 21524) | NK_API void
  function NK_API (line 21548) | NK_API nk_bool
  function NK_API (line 21612) | NK_API nk_bool
  function NK_API (line 21642) | NK_API nk_bool
  function NK_API (line 21647) | NK_API nk_bool
  function NK_API (line 21677) | NK_API nk_bool
  function NK_API (line 21683) | NK_API nk_bool
  function NK_API (line 21713) | NK_API nk_bool
  function NK_API (line 21719) | NK_API void
  function NK_API (line 21728) | NK_API void
  function NK_API (line 21775) | NK_API void
  function NK_API (line 21812) | NK_API void
  function NK_INTERN (line 21845) | NK_INTERN int
  function NK_API (line 21878) | NK_API nk_bool
  function NK_API (line 21903) | NK_API nk_bool nk_menu_begin_label(struct nk_context *ctx,
  function NK_API (line 21908) | NK_API nk_bool
  function NK_API (line 21933) | NK_API nk_bool
  function NK_API (line 21958) | NK_API nk_bool
  function NK_API (line 21984) | NK_API nk_bool
  function NK_API (line 21990) | NK_API nk_bool
  function NK_API (line 22016) | NK_API nk_bool
  function NK_API (line 22022) | NK_API nk_bool
  function NK_API (line 22027) | NK_API nk_bool
  function NK_API (line 22032) | NK_API nk_bool
  function NK_API (line 22038) | NK_API nk_bool
  function NK_API (line 22044) | NK_API nk_bool nk_menu_item_symbol_text(struct nk_context *ctx, enum nk_...
  function NK_API (line 22049) | NK_API nk_bool nk_menu_item_symbol_label(struct nk_context *ctx, enum nk...
  function NK_API (line 22054) | NK_API void nk_menu_close(struct nk_context *ctx)
  function NK_API (line 22058) | NK_API void
  function NK_API (line 22073) | NK_API void
  function NK_API (line 22089) | NK_API void
  function NK_LIB (line 22107) | NK_LIB float
  function NK_LIB (line 22125) | NK_LIB void
  function NK_LIB (line 22177) | NK_LIB void
  function NK_API (line 22200) | NK_API float
  function NK_API (line 22210) | NK_API void
  function NK_API (line 22215) | NK_API void
  function NK_API (line 22220) | NK_API void
  function NK_API (line 22246) | NK_API void
  function NK_API (line 22272) | NK_API void
  function NK_API (line 22292) | NK_API void
  function NK_API (line 22331) | NK_API void
  function NK_API (line 22358) | NK_API void
  function NK_API (line 22378) | NK_API void
  function NK_API (line 22398) | NK_API void
  function NK_API (line 22418) | NK_API void
  function NK_API (line 22469) | NK_API void
  function NK_API (line 22494) | NK_API void
  function NK_API (line 22513) | NK_API void
  function nk_rect (line 22529) | nk_rect
  function nk_rect (line 22548) | nk_rect
  function nk_vec2 (line 22567) | nk_vec2
  function nk_vec2 (line 22583) | nk_vec2
  function nk_rect (line 22599) | nk_rect
  function nk_rect (line 22615) | nk_rect
  function NK_LIB (line 22631) | NK_LIB void
  function NK_LIB (line 22639) | NK_LIB void
  function NK_LIB (line 22774) | NK_LIB void
  function NK_LIB (line 22796) | NK_LIB void
  function NK_API (line 22827) | NK_API void
  function NK_INTERN (line 22842) | NK_INTERN int
  function NK_INTERN (line 22955) | NK_INTERN int
  function NK_API (line 22977) | NK_API nk_bool
  function NK_API (line 22983) | NK_API nk_bool
  function NK_API (line 22989) | NK_API void
  function NK_API (line 23008) | NK_API nk_bool
  function NK_API (line 23015) | NK_API nk_bool
  function NK_API (line 23022) | NK_API void
  function NK_INTERN (line 23027) | NK_INTERN int
  function NK_INTERN (line 23143) | NK_INTERN int
  function NK_API (line 23165) | NK_API nk_bool
  function NK_API (line 23172) | NK_API nk_bool
  function NK_API (line 23179) | NK_API void
  function NK_API (line 23194) | NK_API nk_bool
  function NK_API (line 23243) | NK_API void
  function NK_API (line 23305) | NK_API nk_bool
  function NK_API (line 23311) | NK_API nk_bool
  function NK_API (line 23350) | NK_API nk_bool
  function NK_API (line 23355) | NK_API void
  function NK_API (line 23360) | NK_API void
  function NK_API (line 23400) | NK_API void
  function NK_API (line 23446) | NK_API nk_bool
  function NK_API (line 23504) | NK_API void
  function nk_rect (line 23533) | nk_rect
  function nk_vec2 (line 23544) | nk_vec2
  function nk_vec2 (line 23556) | nk_vec2
  function NK_API (line 23568) | NK_API float
  function NK_API (line 23580) | NK_API float
  function NK_API (line 23592) | NK_API nk_bool
  function NK_API (line 23615) | NK_API nk_bool
  function NK_API (line 23638) | NK_API nk_bool
  function nk_widget_layout_states (line 23661) | nk_widget_layout_states
  function nk_widget_layout_states (line 23711) | nk_widget_layout_states
  function NK_API (line 23728) | NK_API void
  function NK_API (line 23759) | NK_API void
  function NK_API (line 23822) | NK_API void
  function NK_LIB (line 23894) | NK_LIB void
  function NK_LIB (line 23946) | NK_LIB void
  function NK_API (line 23985) | NK_API void
  function NK_API (line 24012) | NK_API void
  function NK_API (line 24040) | NK_API void
  function NK_API (line 24049) | NK_API void
  function NK_API (line 24058) | NK_API void
  function NK_API (line 24066) | NK_API void
  function NK_API (line 24074) | NK_API void
  function NK_API (line 24083) | NK_API void
  function NK_API (line 24092) | NK_API void
  function NK_API (line 24100) | NK_API void
  function NK_API (line 24108) | NK_API void
  function NK_API (line 24113) | NK_API void
  function NK_API (line 24118) | NK_API void
  function NK_API (line 24123) | NK_API void
  function NK_API (line 24129) | NK_API void
  function NK_API (line 24134) | NK_API void
  function NK_API (line 24141) | NK_API void
  function NK_API (line 24149) | NK_API void
  function NK_API (line 24156) | NK_API void
  function NK_API (line 24163) | NK_API void
  function NK_API (line 24168) | NK_API void
  function NK_API (line 24174) | NK_API void
  function NK_API (line 24179) | NK_API void
  function NK_API (line 24194) | NK_API nk_handle
  function NK_API (line 24201) | NK_API nk_handle
  function nk_image (line 24209) | nk_image
  function nk_image (line 24222) | nk_image
  function nk_image (line 24235) | nk_image
  function nk_image (line 24248) | nk_image
  function nk_image (line 24261) | nk_image
  function nk_image (line 24275) | nk_image
  function NK_API (line 24288) | NK_API nk_bool
  function NK_API (line 24294) | NK_API void
  function NK_API (line 24309) | NK_API void
  function nk_nine_slice (line 24334) | nk_nine_slice
  function nk_nine_slice (line 24349) | nk_nine_slice
  function nk_nine_slice (line 24364) | nk_nine_slice
  function nk_nine_slice (line 24379) | nk_nine_slice
  function nk_nine_slice (line 24394) | nk_nine_slice
  function nk_nine_slice (line 24410) | nk_nine_slice
  function NK_API (line 24425) | NK_API int
  function NK_LIB (line 24441) | NK_LIB void
  function NK_LIB (line 24507) | NK_LIB nk_bool
  function nk_style_item (line 24534) | nk_style_item*
  function NK_LIB (line 24560) | NK_LIB nk_bool
  function NK_LIB (line 24585) | NK_LIB void
  function NK_LIB (line 24610) | NK_LIB nk_bool
  function NK_LIB (line 24634) | NK_LIB void
  function NK_LIB (line 24658) | NK_LIB nk_bool
  function NK_LIB (line 24681) | NK_LIB void
  function NK_LIB (line 24689) | NK_LIB nk_bool
  function NK_LIB (line 24715) | NK_LIB void
  function NK_LIB (line 24750) | NK_LIB nk_bool
  function NK_LIB (line 24782) | NK_LIB void
  function NK_LIB (line 24808) | NK_LIB nk_bool
  function NK_API (line 24844) | NK_API void
  function NK_API (line 24851) | NK_API nk_bool
  function NK_API (line 24871) | NK_API nk_bool
  function NK_API (line 24889) | NK_API nk_bool
  function NK_API (line 24916) | NK_API nk_bool
  function NK_API (line 24923) | NK_API nk_bool nk_button_label_styled(struct nk_context *ctx,
  function NK_API (line 24928) | NK_API nk_bool nk_button_label(struct nk_context *ctx, const char *title)
  function NK_API (line 24932) | NK_API nk_bool
  function NK_API (line 24967) | NK_API nk_bool
  function NK_API (line 24992) | NK_API nk_bool
  function NK_API (line 24999) | NK_API nk_bool
  function NK_API (line 25025) | NK_API nk_bool
  function NK_API (line 25032) | NK_API nk_bool
  function NK_API (line 25060) | NK_API nk_bool
  function NK_API (line 25068) | NK_API nk_bool nk_button_symbol_label(struct nk_context *ctx, enum nk_sy...
  function NK_API (line 25073) | NK_API nk_bool nk_button_symbol_label_styled(struct nk_context *ctx,
  function NK_API (line 25079) | NK_API nk_bool
  function NK_API (line 25107) | NK_API nk_bool
  function NK_API (line 25113) | NK_API nk_bool nk_button_image_label(struct nk_context *ctx, struct nk_i...
  function NK_API (line 25118) | NK_API nk_bool nk_button_image_label_styled(struct nk_context *ctx,
  function NK_LIB (line 25134) | NK_LIB nk_bool
  function NK_LIB (line 25149) | NK_LIB void
  function NK_LIB (line 25192) | NK_LIB void
  function NK_LIB (line 25235) | NK_LIB nk_bool
  function NK_API (line 25325) | NK_API nk_bool
  function NK_API (line 25353) | NK_API nk_bool
  function nk_check_flags_text (line 25381) | NK_API unsigned int
  function NK_API (line 25395) | NK_API nk_bool
  function NK_API (line 25407) | NK_API nk_bool
  function NK_API (line 25419) | NK_API nk_bool
  function NK_API (line 25437) | NK_API nk_bool nk_check_label(struct nk_context *ctx, const char *label,...
  function nk_check_flags_label (line 25441) | NK_API unsigned int nk_check_flags_label(struct nk_context *ctx, const c...
  function NK_API (line 25446) | NK_API nk_bool nk_checkbox_label(struct nk_context *ctx, const char *lab...
  function NK_API (line 25450) | NK_API nk_bool nk_checkbox_label_align(struct nk_context *ctx, const cha...
  function NK_API (line 25454) | NK_API nk_bool nk_checkbox_flags_label(struct nk_context *ctx, const cha...
  function NK_API (line 25464) | NK_API nk_bool
  function NK_API (line 25492) | NK_API nk_bool
  function NK_API (line 25520) | NK_API nk_bool
  function NK_API (line 25532) | NK_API nk_bool
  function NK_API (line 25544) | NK_API nk_bool
  function NK_API (line 25549) | NK_API nk_bool
  function NK_API (line 25554) | NK_API nk_bool
  function NK_API (line 25559) | NK_API nk_bool
  function NK_LIB (line 25574) | NK_LIB void
  function NK_LIB (line 25633) | NK_LIB nk_bool
  function NK_LIB (line 25669) | NK_LIB nk_bool
  function NK_LIB (line 25716) | NK_LIB nk_bool
  function NK_API (line 25764) | NK_API nk_bool
  function NK_API (line 25793) | NK_API nk_bool
  function NK_API (line 25822) | NK_API nk_bool
  function NK_API (line 25851) | NK_API nk_bool
  function NK_API (line 25857) | NK_API nk_bool nk_select_text(struct nk_context *ctx, const char *str, i...
  function NK_API (line 25862) | NK_API nk_bool nk_selectable_label(struct nk_context *ctx, const char *s...
  function NK_API (line 25866) | NK_API nk_bool nk_selectable_image_label(struct nk_context *ctx,struct n...
  function NK_API (line 25871) | NK_API nk_bool nk_select_label(struct nk_context *ctx, const char *str, ...
  function NK_API (line 25875) | NK_API nk_bool nk_select_image_label(struct nk_context *ctx, struct nk_i...
  function NK_API (line 25880) | NK_API nk_bool nk_select_image_text(struct nk_context *ctx, struct nk_im...
  function NK_API (line 25885) | NK_API nk_bool
  function NK_API (line 25891) | NK_API nk_bool
  function NK_LIB (line 25907) | NK_LIB float
  function NK_LIB (line 25949) | NK_LIB void
  function NK_LIB (line 26016) | NK_LIB float
  function NK_API (line 26105) | NK_API nk_bool
  function NK_API (line 26139) | NK_API float
  function NK_API (line 26144) | NK_API int
  function NK_API (line 26151) | NK_API nk_bool
  function NK_LIB (line 26171) | NK_LIB float
  function NK_LIB (line 26237) | NK_LIB void
  function NK_LIB (line 26323) | NK_LIB float
  function NK_API (line 26368) | NK_API nk_bool
  function NK_API (line 26404) | NK_API nk_bool
  function NK_LIB (line 26423) | NK_LIB nk_size
  function NK_LIB (line 26453) | NK_LIB void
  function NK_LIB (line 26504) | NK_LIB nk_size
  function NK_API (line 26535) | NK_API nk_bool
  function NK_API (line 26566) | NK_API nk_size
  function NK_LIB (line 26582) | NK_LIB float
  function NK_LIB (line 26658) | NK_LIB void
  function NK_LIB (line 26706) | NK_LIB float
  function NK_LIB (line 26795) | NK_LIB float
  type nk_text_find (line 26894) | struct nk_text_find {
  type nk_text_edit_row (line 26901) | struct nk_text_edit_row {
  type nk_text_edit (line 26912) | struct nk_text_edit
  type nk_text_edit (line 26913) | struct nk_text_edit
  type nk_text_edit (line 26914) | struct nk_text_edit
  function NK_INTERN (line 26917) | NK_INTERN float
  function NK_INTERN (line 26926) | NK_INTERN void
  function NK_INTERN (line 26947) | NK_INTERN int
  function NK_LIB (line 27007) | NK_LIB void
  function NK_LIB (line 27018) | NK_LIB void
  function NK_INTERN (line 27029) | NK_INTERN void
  function NK_INTERN (line 27086) | NK_INTERN void
  function NK_API (line 27100) | NK_API void
  function NK_API (line 27108) | NK_API void
  function NK_INTERN (line 27126) | NK_INTERN void
  function NK_INTERN (line 27136) | NK_INTERN void
  function NK_INTERN (line 27147) | NK_INTERN void
  function NK_INTERN (line 27159) | NK_INTERN int
  function NK_INTERN (line 27173) | NK_INTERN int
  function NK_INTERN (line 27189) | NK_INTERN int
  function NK_INTERN (line 27205) | NK_INTERN void
  function NK_API (line 27213) | NK_API nk_bool
  function NK_API (line 27226) | NK_API nk_bool
  function NK_API (line 27251) | NK_API void
  function NK_LIB (line 27300) | NK_LIB void
  function NK_INTERN (line 27606) | NK_INTERN void
  function NK_INTERN (line 27612) | NK_INTERN void
  function NK_INTERN (line 27635) | NK_INTERN void
  function nk_text_undo_record (line 27666) | nk_text_undo_record*
  function NK_INTERN (line 27691) | NK_INTERN nk_rune*
  function NK_API (line 27712) | NK_API void
  function NK_API (line 27779) | NK_API void
  function NK_INTERN (line 27828) | NK_INTERN void
  function NK_INTERN (line 27833) | NK_INTERN void
  function NK_INTERN (line 27843) | NK_INTERN void
  function NK_LIB (line 27854) | NK_LIB void
  function NK_API (line 27874) | NK_API void
  function NK_API (line 27884) | NK_API void
  function NK_API (line 27895) | NK_API void
  function NK_API (line 27905) | NK_API void
  function NK_API (line 27912) | NK_API void
  function NK_API (line 27929) | NK_API nk_bool
  function NK_API (line 27936) | NK_API nk_bool
  function NK_API (line 27943) | NK_API nk_bool
  function NK_API (line 27951) | NK_API nk_bool
  function NK_API (line 27959) | NK_API nk_bool
  function NK_API (line 27969) | NK_API nk_bool
  function NK_API (line 27977) | NK_API nk_bool
  function NK_LIB (line 27991) | NK_LIB void
  function NK_LIB (line 28074) | NK_LIB nk_flags
  function NK_API (line 28598) | NK_API void
  function NK_API (line 28615) | NK_API void
  function NK_API (line 28627) | NK_API nk_flags
  function NK_API (line 28683) | NK_API nk_flags
  function NK_API (line 28746) | NK_API nk_flags
  function NK_LIB (line 28766) | NK_LIB void
  function NK_LIB (line 28805) | NK_LIB void
  function NK_LIB (line 28825) | NK_LIB void
  function NK_INTERN (line 28870) | NK_INTERN void
  function NK_LIB (line 28892) | NK_LIB void
  function nk_property_variant (line 29053) | nk_property_variant
  function nk_property_variant (line 29064) | nk_property_variant
  function nk_property_variant (line 29075) | nk_property_variant
  function NK_LIB (line 29087) | NK_LIB void
  function NK_API (line 29206) | NK_API nk_bool
  function NK_API (line 29223) | NK_API nk_bool
  function NK_API (line 29240) | NK_API nk_bool
  function NK_API (line 29257) | NK_API int
  function NK_API (line 29271) | NK_API float
  function NK_API (line 29285) | NK_API double
  function NK_API (line 29309) | NK_API nk_bool
  function NK_API (line 29376) | NK_API nk_bool
  function NK_API (line 29383) | NK_API void
  function NK_API (line 29411) | NK_API void
  function NK_INTERN (line 29418) | NK_INTERN nk_flags
  function NK_INTERN (line 29492) | NK_INTERN nk_flags
  function NK_API (line 29538) | NK_API nk_flags
  function NK_API (line 29564) | NK_API nk_flags
  function NK_API (line 29569) | NK_API void
  function NK_API (line 29585) | NK_API void
  function NK_API (line 29610) | NK_API void
  function NK_LIB (line 29645) | NK_LIB nk_bool
  function NK_LIB (line 29697) | NK_LIB void
  function NK_LIB (line 29756) | NK_LIB nk_bool
  function NK_API (line 29802) | NK_API nk_bool
  function nk_colorf (line 29830) | nk_colorf
  function NK_INTERN (line 29847) | NK_INTERN nk_bool
  function NK_API (line 29881) | NK_API nk_bool
  function NK_API (line 29989) | NK_API nk_bool
  function NK_API (line 29994) | NK_API nk_bool
  function NK_API (line 30085) | NK_API nk_bool
  function NK_API (line 30181) | NK_API nk_bool
  function NK_API (line 30288) | NK_API nk_bool
  function NK_API (line 30379) | NK_API nk_bool
  function NK_API (line 30488) | NK_API nk_bool
  function NK_API (line 30494) | NK_API nk_bool
  function NK_API (line 30500) | NK_API nk_bool
  function NK_API (line 30505) | NK_API nk_bool
  function NK_API (line 30510) | NK_API nk_bool
  function NK_API (line 30516) | NK_API nk_bool
  function NK_API (line 30522) | NK_API nk_bool
  function NK_API (line 30528) | NK_API nk_bool
  function NK_API (line 30534) | NK_API void nk_combo_end(struct nk_context *ctx)
  function NK_API (line 30538) | NK_API void nk_combo_close(struct nk_context *ctx)
  function NK_API (line 30542) | NK_API int
  function NK_API (line 30572) | NK_API int
  function NK_API (line 30621) | NK_API int
  function NK_API (line 30627) | NK_API int
  function NK_API (line 30660) | NK_API nk_bool
  function NK_API (line 30668) | NK_API nk_bool
  function NK_API (line 30676) | NK_API nk_bool
  function NK_API (line 30685) | NK_API nk_bool
  function NK_API (line 30703) | NK_API nk_bool
  function NK_API (line 30710) | NK_API nk_bool
  function NK_API (line 30790) | NK_API void
  function NK_API (line 30801) | NK_API void
  function NK_API (line 30837) | NK_API void
  function NK_API (line 30844) | NK_API void
  function NK_API (line 30852) | NK_API void
  function NK_API (line 30860) | NK_API void
  function NK_API (line 30867) | NK_API void

FILE: include/raylib-nuklear.h
  type nk_context (line 76) | struct nk_context
  type nk_context (line 78) | struct nk_context
  type nk_context (line 79) | struct nk_context
  type nk_context (line 80) | struct nk_context
  type nk_context (line 81) | struct nk_context
  type nk_color (line 84) | struct nk_color
  type nk_colorf (line 85) | struct nk_colorf
  type nk_context (line 86) | struct nk_context
  type nk_rect (line 86) | struct nk_rect
  type nk_context (line 87) | struct nk_context
  type nk_context (line 89) | struct nk_context
  type nk_context (line 90) | struct nk_context
  type nk_text_edit (line 95) | struct nk_text_edit
  type nk_user_font (line 99) | struct nk_user_font
  type nk_context (line 100) | struct nk_context
  type nk_context (line 101) | struct nk_context
  type NuklearUserData (line 162) | typedef struct NuklearUserData {
  function NK_API (line 171) | NK_API float
  function NK_API (line 203) | NK_API float
  function NK_API (line 224) | NK_API void
  function NK_API (line 239) | NK_API void
  function NK_API (line 257) | NK_API void*
  function NK_API (line 268) | NK_API void
  function nk_context (line 282) | nk_context*
  function nk_context (line 336) | nk_context*
  function nk_context (line 363) | nk_context*
  function NK_API (line 396) | NK_API bool IsNuklearValid(struct nk_context* ctx) {
  function NK_API (line 413) | NK_API Font LoadFontFromNuklear(int size) {
  function NK_API (line 449) | NK_API Color
  function nk_color (line 463) | nk_color
  function NK_API (line 477) | NK_API Color
  function nk_colorf (line 486) | nk_colorf
  function NuklearImageToTexture (line 497) | static struct Texture
  function raylib_nuklear_draw_polygon_fill (line 517) | static void raylib_nuklear_draw_polygon_fill(float scale, const struct n...
  function NK_API (line 594) | NK_API void
  type nk_raylib_input_keyboard_check (line 833) | struct nk_raylib_input_keyboard_check {
  type nk_raylib_input_keyboard_check (line 846) | struct nk_raylib_input_keyboard_check
  function NK_API (line 870) | NK_API void
  function NK_API (line 917) | NK_API void
  function NK_API (line 948) | NK_API void
  function NK_API (line 960) | NK_API void
  function NK_API (line 980) | NK_API void
  function Rectangle (line 1019) | Rectangle NuklearRectToRectangle(struct nk_context* ctx, struct nk_rect ...
  function nk_rect (line 1034) | nk_rect RectangleToNuklearRect(struct nk_context* ctx, Rectangle rect)
  function nk_image (line 1043) | nk_image
  function NK_API (line 1063) | NK_API void
  function NK_API (line 1086) | NK_API float

FILE: test/raylib-nuklear-test.c
  function main (line 8) | int main(int argc, char *argv[]) {
Condensed preview — 20 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,348K chars).
[
  {
    "path": ".editorconfig",
    "chars": 147,
    "preview": "root = true\n\n[*]\nindent_style = space\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\ninsert_final_newline = true\ntrim_"
  },
  {
    "path": ".gitignore",
    "chars": 14,
    "preview": "build\n.vscode\n"
  },
  {
    "path": ".gitmodules",
    "chars": 147,
    "preview": "[submodule \"vendor/nuklear\"]\n\tpath = vendor/nuklear\n\turl = https://github.com/Immediate-Mode-UI/Nuklear.git\n    ignore ="
  },
  {
    "path": "CMakeLists.txt",
    "chars": 954,
    "preview": "cmake_minimum_required(VERSION 3.11)\nproject(raylib_nuklear\n    DESCRIPTION \"raylib_nuklear: Nuklear immediate mode GUI "
  },
  {
    "path": "LICENSE",
    "chars": 862,
    "preview": "Copyright (c) 2026 Rob Loach (@RobLoach)\n\nThis software is provided \"as-is\", without any express or implied warranty. In"
  },
  {
    "path": "README.md",
    "chars": 5806,
    "preview": "# raylib-nuklear\n\nUse the [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) immediate mode cross-platform GUI libr"
  },
  {
    "path": "examples/CMakeLists.txt",
    "chars": 3150,
    "preview": "# raylib\nfind_package(raylib QUIET)\nif (NOT raylib_FOUND)\n    include(FetchContent)\n        FetchContent_Declare(\n      "
  },
  {
    "path": "examples/LICENSE",
    "chars": 199,
    "preview": "Fonts used in examples are provided under a free and permissive license.\nCheck individual licenses for details:\n\n - [Ano"
  },
  {
    "path": "examples/minshell.html",
    "chars": 1500,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset"
  },
  {
    "path": "examples/raylib-nuklear-demo.c",
    "chars": 6020,
    "preview": "/* nuklear - 1.32.0 - public domain */\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdint.h>\n#include <stdarg.h>\n#i"
  },
  {
    "path": "examples/raylib-nuklear-example.c",
    "chars": 4400,
    "preview": "/**********************************************************************************************\n*\n*   raylib-nuklear-exa"
  },
  {
    "path": "examples/raylib-nuklear-font-default.c",
    "chars": 4599,
    "preview": "/**********************************************************************************************\n*\n*   raylib-nuklear-fon"
  },
  {
    "path": "examples/raylib-nuklear-font.c",
    "chars": 4566,
    "preview": "/**********************************************************************************************\n*\n*   raylib-nuklear-fon"
  },
  {
    "path": "examples/raylib-nuklear-texture.c",
    "chars": 1361,
    "preview": "/* ===============================================================\n *\n *                          EXAMPLE\n *\n * ========"
  },
  {
    "path": "include/CMakeLists.txt",
    "chars": 211,
    "preview": "# raylib_nuklear\nadd_library(raylib_nuklear INTERFACE)\ntarget_include_directories(raylib_nuklear INTERFACE ${CMAKE_CURRE"
  },
  {
    "path": "include/nuklear.h",
    "chars": 1166815,
    "preview": "/*\n# Nuklear\n![](https://cloud.githubusercontent.com/assets/8057201/11761525/ae06f0ca-a0c6-11e5-819d-5610b25f6ef4.gif)\n\n"
  },
  {
    "path": "include/raylib-nuklear.h",
    "chars": 42974,
    "preview": "/**********************************************************************************************\n*\n*   raylib-nuklear v6."
  },
  {
    "path": "test/CMakeLists.txt",
    "chars": 567,
    "preview": "# raylib-nuklear-test\nadd_executable(raylib-nuklear-test raylib-nuklear-test.c)\ntarget_compile_options(raylib-nuklear-te"
  },
  {
    "path": "test/raylib-assert.h",
    "chars": 62821,
    "preview": "/**********************************************************************************************\n*\n*   raylib-assert - As"
  },
  {
    "path": "test/raylib-nuklear-test.c",
    "chars": 3551,
    "preview": "#include \"raylib.h\"\n\n#define RAYLIB_NUKLEAR_IMPLEMENTATION\n#include \"raylib-nuklear.h\"\n\n#include \"raylib-assert.h\"\n\nint "
  }
]

About this extraction

This page contains the full source code of the RobLoach/raylib-nuklear GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 20 files (1.2 MB), approximately 351.7k tokens, and a symbol index with 2348 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!