Skip to content

RobLoach/nuklear_console

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

228 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nuklear_console

Console-like user interface for Nuklear with gamepad, keyboard, and mouse support.

nuklear_console_demo Screenshot

Usage

#define NK_IMPLEMENTATION
#include "nukear.h"

// Gamepad support https://github.com/robloach/nuklear_gamepad
#define NK_GAMEPAD_IMPLEMENTATION
#include "nuklear_gamepad.h"

#define NK_CONSOLE_IMPLEMENTATION
#include "nuklear_console.h"

int main() {
    // Set up the console within the Nuklear context
    nk_console* console = nk_console_init(ctx);

    // Add some widgets
    nk_console_button(console, "New Game");
    nk_console* options = nk_console_button(console, "Options");
    {
        nk_console_button(options, "Some cool option!");
        nk_console_button(options, "Option #2");
        nk_console_button_onclick(options, "Back", &nk_console_button_back);
    }
    nk_console_button(console, "Load Game");
    nk_console_button(console, "Save Game");

    // Render the console in a window
    nk_console_render_window(console, "nuklear_console", nk_rect(0, 0, 400, 300), NK_WINDOW_TITLE);

    // Clean it up
    nk_console_free(console);

    return 0;
}

Widgets

Buttons, Checkboxes, Color Select, Comboboxes, Files, Directories, Gamepad Input Buttons, Keyboard Keys, Labels, Properties, Sliders, Knobs, Radio Options, Images, Rows, Spacing, TextEdit, Tree, Rule Horizontal, List View, Messages.

API

See the API Reference for how to use nuklear_console in your application.

// Console
nk_console* nk_console_init(struct nk_context* context);
void nk_console_free(nk_console* console);
void nk_console_free_children(nk_console* console);
void nk_console_render(nk_console* console);
void nk_console_render_window(nk_console* console, const char* title, struct nk_rect bounds, nk_uint flags);

// Widgets
nk_console* nk_console_button(nk_console* parent, const char* text);
nk_console* nk_console_button_onclick(nk_console* parent, const char* text, nk_console_event onclick);
nk_console* nk_console_checkbox(nk_console* parent, const char* text, nk_bool* active);
nk_console* nk_console_color(nk_console* parent, const char* label, struct nk_colorf* color, enum nk_color_format format);
nk_console* nk_console_combobox(nk_console* parent, const char* label, const char* items_separated_by_separator, int separator, int* selected);
nk_console* nk_console_dir(nk_console* parent, const char* label, char* dir_buffer, int dir_buffer_size);
nk_console* nk_console_dir_action(nk_console* parent, const char* label, char* dir_buffer, int dir_buffer_size);
nk_console* nk_console_file(nk_console* parent, const char* label, char* file_path_buffer, int file_path_buffer_size);
nk_console* nk_console_file_action(nk_console* parent, const char* label, char* file_path_buffer, int file_path_buffer_size);
nk_console* nk_console_image(nk_console* parent, struct nk_image image);
nk_console* nk_console_image_color(nk_console* parent, struct nk_image image, struct nk_color color);
nk_console* nk_console_input(nk_console* parent, const char* label, int gamepad_number, int* out_gamepad_number, enum nk_gamepad_button* out_gamepad_button);
nk_console* nk_console_key(nk_console* parent, const char* label, nk_rune* out_key);
nk_console* nk_console_knob_int(nk_console* parent, const char* label, int min, int* val, int max, int step, float inc_per_pixel);
nk_console* nk_console_knob_float(nk_console* parent, const char* label, float min, float* val, float max, float step, float inc_per_pixel);
nk_console* nk_console_label(nk_console* parent, const char* text);
nk_console* nk_console_list_view(nk_console* parent, const char* id, int rows_visible, nk_uint item_count, nk_console_list_view_get_label get_label_callback);
nk_console* nk_console_progress(nk_console* parent, const char* text, nk_size* current, nk_size max);
nk_console* nk_console_property_int(nk_console* parent, const char* label, int min, int* val, int max, int step, float inc_per_pixel);
nk_console* nk_console_property_float(nk_console* parent, const char* label, float min, float* val, float max, float step, float inc_per_pixel);
nk_console* nk_console_radio(nk_console* parent, const char* label, int* selected);
nk_console* nk_console_row_begin(nk_console* parent);
void nk_console_row_end(nk_console* row);
nk_console* nk_console_rule_horizontal(nk_console* parent, struct nk_color color, nk_bool rounding);
void nk_console_show_message(nk_console* console, const char* text);
nk_console* nk_console_slider_int(nk_console* parent, const char* label, int min, int* val, int max, int step);
nk_console* nk_console_slider_float(nk_console* parent, const char* label, float min, float* val, float max, float step);
nk_console* nk_console_spacing(nk_console* parent, int cols);
nk_console* nk_console_textedit(nk_console* parent, const char* label, char* buffer, int buffer_size);
nk_console* nk_console_tree(nk_console* parent, const char* label, nk_bool expanded);

// Utilities
void nk_console_button_back(nk_console* button);
nk_console* nk_console_get_top(nk_console* widget);
int nk_console_get_widget_index(nk_console* widget);
int nk_console_height(nk_console* widget);
void nk_console_set_height(nk_console* widget, int height);
nk_bool nk_console_is_active_widget(nk_console* widget);
nk_bool nk_console_selectable(nk_console* widget);
void nk_console_set_active_parent(nk_console* new_parent);
void nk_console_set_active_widget(nk_console* widget);
nk_console* nk_console_active_parent(nk_console* console);
nk_console* nk_console_get_active_widget(nk_console* widget);
void nk_console_set_gamepads(nk_console* console, struct nk_gamepads* gamepads);
void nk_console_set_tooltip(nk_console* widget, const char* tooltip);
void nk_console_set_user_data(nk_console* console, void* user_data);
void* nk_console_user_data(nk_console* console);
const char* nk_console_get_label(nk_console* widget);
void nk_console_set_label(nk_console* widget, const char* label, int label_length);
nk_bool nk_console_navigate_to_path(nk_console* console, const char* path);
nk_console* nk_console_find_by_path(nk_console* console, const char* path);
nk_bool nk_console_trigger_event(nk_console* widget, nk_console_event_type type);
void nk_console_check_tooltip(nk_console* console);
void nk_console_check_up_down(nk_console* widget);

Dependencies

Configuration

Define Description
NK_BUTTON_TRIGGER_ON_RELEASE Required in order to ensure events are triggered in the correct order
NK_CONSOLE_KEY_BACK The nk_keys enumeration that will be used to go back in the menu heirarchy. Defaults to ESC.
NK_CONSOLE_DRAG_THRESHOLD The amount of threshold mouse movement needed to consider it a scroll
NK_CONSOLE_AXIS_DEADZONE The amount of movement the gamepad axis needs prior to moving the cursor
NK_CONSOLE_AXIS_REPEAT_INTERVAL When using the gamepad axis to move, how frequently the cursor will move
NK_CONSOLE_FILE_ADD_FILES The function callback used to enumerate files, see nk_console_file_add_files_tinydir()

Development

Use clang-format to apply coding standards.

clang-format -i *.h

To build the web demo...

cd demo/raylib
mkdir build
cd build
emcmake cmake .. -DPLATFORM=Web -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXECUTABLE_SUFFIX=".html"
emmake make

License

MIT

About

Console-like user interface for Nuklear with gamepad, keyboard or mouse support

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages