4#ifndef NK_POOL_DEFAULT_CAPACITY
5#define NK_POOL_DEFAULT_CAPACITY 16
8#ifndef NK_DEFAULT_COMMAND_BUFFER_SIZE
9#define NK_DEFAULT_COMMAND_BUFFER_SIZE (4*1024)
12#ifndef NK_BUFFER_DEFAULT_INITIAL_SIZE
13#define NK_BUFFER_DEFAULT_INITIAL_SIZE (4*1024)
17#ifdef NK_INCLUDE_DEFAULT_ALLOCATOR
20#ifdef NK_INCLUDE_STANDARD_IO
23#ifdef NK_INCLUDE_STANDARD_VARARGS
28#define NK_ASSERT(expr) assert(expr)
31#define NK_DEFAULT (-1)
38 #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) ||\
39 (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
40 (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L)) ||\
41 (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)) ||\
42 defined(_ISOC99_SOURCE) || defined(_BSD_SOURCE)
43 #define NK_VSNPRINTF(s,n,f,a) vsnprintf(s,n,f,a)
45 #define NK_VSNPRINTF(s,n,f,a) vsprintf(s,f,a)
49#define NK_SCHAR_MIN (-127)
50#define NK_SCHAR_MAX 127
52#define NK_UCHAR_MAX 256
53#define NK_SSHORT_MIN (-32767)
54#define NK_SSHORT_MAX 32767
55#define NK_USHORT_MIN 0
56#define NK_USHORT_MAX 65535
57#define NK_SINT_MIN (-2147483647)
58#define NK_SINT_MAX 2147483647
60#define NK_UINT_MAX 4294967295u
65NK_STATIC_ASSERT(
sizeof(nk_size) >=
sizeof(
void*));
66NK_STATIC_ASSERT(
sizeof(nk_ptr) ==
sizeof(
void*));
67NK_STATIC_ASSERT(
sizeof(nk_flags) >= 4);
68NK_STATIC_ASSERT(
sizeof(nk_rune) >= 4);
69NK_STATIC_ASSERT(
sizeof(nk_ushort) == 2);
70NK_STATIC_ASSERT(
sizeof(nk_short) == 2);
71NK_STATIC_ASSERT(
sizeof(nk_uint) == 4);
72NK_STATIC_ASSERT(
sizeof(nk_int) == 4);
73NK_STATIC_ASSERT(
sizeof(nk_byte) == 1);
74NK_STATIC_ASSERT(
sizeof(nk_bool) <=
sizeof(
int));
76NK_GLOBAL
const struct nk_rect nk_null_rect = {-8192.0f, -8192.0f, 16384, 16384};
77#define NK_FLOAT_PRECISION 0.00000000000001
79NK_GLOBAL
const struct nk_color nk_red = {255,0,0,255};
80NK_GLOBAL
const struct nk_color nk_green = {0,255,0,255};
81NK_GLOBAL
const struct nk_color nk_blue = {0,0,255,255};
82NK_GLOBAL
const struct nk_color nk_white = {255,255,255,255};
83NK_GLOBAL
const struct nk_color nk_black = {0,0,0,255};
84NK_GLOBAL
const struct nk_color nk_yellow = {255,255,0,255};
87#define nk_widget_state_reset(s)\
88 if ((*(s)) & NK_WIDGET_STATE_MODIFIED)\
89 (*(s)) = NK_WIDGET_STATE_INACTIVE|NK_WIDGET_STATE_MODIFIED;\
90 else (*(s)) = NK_WIDGET_STATE_INACTIVE;
94#define NK_INV_SQRT nk_inv_sqrt
95#define NK_INV_SQRT_NEEDED
96NK_LIB
float nk_inv_sqrt(
float n);
101NK_LIB
float nk_sin(
float x);
106NK_LIB
float nk_cos(
float x);
109#define NK_ATAN nk_atan
110#define NK_ATAN_NEEDED
111NK_LIB
float nk_atan(
float x);
114#define NK_ATAN2 nk_atan2
115#define NK_ATAN2_NEEDED
116NK_LIB
float nk_atan2(
float y,
float x);
118NK_LIB nk_uint nk_round_up_pow2(nk_uint v);
119NK_LIB
struct nk_rect nk_shrink_rect(struct
nk_rect r, float amount);
121NK_LIB
void nk_unify(
struct nk_rect *clip,
const struct nk_rect *a,
float x0,
float y0,
float x1,
float y1);
122NK_LIB
int nk_ifloorf(
float x);
123NK_LIB
int nk_iceilf(
float x);
124NK_LIB
float nk_roundf(
float x);
127enum {NK_DO_NOT_STOP_ON_NEW_LINE, NK_STOP_ON_NEW_LINE};
128NK_LIB nk_bool nk_is_lower(
int c);
129NK_LIB nk_bool nk_is_upper(
int c);
130NK_LIB
int nk_to_upper(
int c);
131NK_LIB
int nk_to_lower(
int c);
134#define NK_MEMCPY nk_memcopy
135#define NK_MEMCPY_NEEDED
136NK_LIB
void* nk_memcopy(
void *dst,
const void *src, nk_size n);
139#define NK_MEMSET nk_memset
140#define NK_MEMSET_NEEDED
141NK_LIB
void nk_memset(
void *ptr,
int c0, nk_size size);
143NK_LIB
void nk_zero(
void *ptr, nk_size size);
144NK_LIB
char *nk_itoa(
char *s,
long n);
145NK_LIB
int nk_string_float_limit(
char *
string,
int prec);
147#define NK_DTOA nk_dtoa
148#define NK_DTOA_NEEDED
149NK_LIB
char *nk_dtoa(
char *s,
double n);
151NK_LIB
int nk_text_clamp(
const struct nk_user_font *font,
const char *text,
int text_len,
float space,
int *glyphs,
float *text_width, nk_rune *sep_list,
int sep_count);
152NK_LIB
struct nk_vec2 nk_text_calculate_text_bounds(const struct
nk_user_font *font,
const char *begin,
int byte_len,
float row_height,
const char **remaining,
struct nk_vec2 *out_offset,
int *glyphs,
int op);
153#ifdef NK_INCLUDE_STANDARD_VARARGS
154NK_LIB
int nk_strfmt(
char *buf,
int buf_size,
const char *fmt, va_list args);
156#ifdef NK_INCLUDE_STANDARD_IO
157NK_LIB
char *nk_file_load(
const char* path, nk_size* siz,
const struct nk_allocator *alloc);
162NK_LIB
double nk_pow(
double x,
int n);
163NK_LIB
int nk_ifloord(
double x);
164NK_LIB
int nk_log10(
double n);
168#ifdef NK_INCLUDE_DEFAULT_ALLOCATOR
169NK_LIB
void* nk_malloc(
nk_handle unused,
void *old,nk_size size);
170NK_LIB
void nk_mfree(
nk_handle unused,
void *ptr);
172NK_LIB
void* nk_buffer_align(
void *unaligned, nk_size align, nk_size *alignment,
enum nk_buffer_allocation_type type);
173NK_LIB
void* nk_buffer_alloc(
struct nk_buffer *b,
enum nk_buffer_allocation_type type, nk_size size, nk_size align);
174NK_LIB
void* nk_buffer_realloc(
struct nk_buffer *b, nk_size capacity, nk_size *size);
179NK_LIB
void* nk_command_buffer_push(
struct nk_command_buffer* b,
enum nk_command_type t, nk_size size);
192NK_LIB
void nk_textedit_clear_state(
struct nk_text_edit *state,
enum nk_text_edit_type type, nk_plugin_filter filter);
193NK_LIB
void nk_textedit_click(
struct nk_text_edit *state,
float x,
float y,
const struct nk_user_font *font,
float row_height);
194NK_LIB
void nk_textedit_drag(
struct nk_text_edit *state,
float x,
float y,
const struct nk_user_font *font,
float row_height);
195NK_LIB
void nk_textedit_key(
struct nk_text_edit *state,
enum nk_keys key,
int shift_mod,
const struct nk_user_font *font,
float row_height);
198enum nk_window_insert_location {
202NK_LIB
void *nk_create_window(
struct nk_context *ctx);
205NK_LIB
struct nk_window *nk_find_window(
const struct nk_context *ctx, nk_hash hash,
const char *name);
206NK_LIB
void nk_insert_window(
struct nk_context *ctx,
struct nk_window *win,
enum nk_window_insert_location loc);
209NK_LIB
void nk_pool_init(
struct nk_pool *pool,
const struct nk_allocator *alloc,
unsigned int capacity);
210NK_LIB
void nk_pool_free(
struct nk_pool *pool);
211NK_LIB
void nk_pool_init_fixed(
struct nk_pool *pool,
void *memory, nk_size size);
224NK_LIB nk_uint *nk_add_value(
struct nk_context *ctx,
struct nk_window *win, nk_hash name, nk_uint value);
225NK_LIB nk_uint *nk_find_value(
const struct nk_window *win, nk_hash name);
228NK_LIB
void *nk_create_panel(
struct nk_context *ctx);
230NK_LIB nk_bool nk_panel_has_header(nk_flags flags,
const char *title);
231NK_LIB
struct nk_vec2 nk_panel_get_padding(const struct
nk_style *style,
enum nk_panel_type type);
232NK_LIB
float nk_panel_get_border(
const struct nk_style *style, nk_flags flags,
enum nk_panel_type type);
233NK_LIB
struct nk_color nk_panel_get_border_color(const struct
nk_style *style,
enum nk_panel_type type);
234NK_LIB nk_bool nk_panel_is_sub(
enum nk_panel_type type);
235NK_LIB nk_bool nk_panel_is_nonblock(
enum nk_panel_type type);
236NK_LIB nk_bool nk_panel_begin(
struct nk_context *ctx,
const char *title,
enum nk_panel_type panel_type);
237NK_LIB
void nk_panel_end(
struct nk_context *ctx);
240NK_LIB
float nk_layout_row_calculate_usable_space(
const struct nk_style *style,
enum nk_panel_type type,
float total_space,
int columns);
241NK_LIB
void nk_panel_layout(
const struct nk_context *ctx,
struct nk_window *win,
float height,
int cols);
242NK_LIB
void nk_row_layout(
struct nk_context *ctx,
enum nk_layout_format fmt,
float height,
int cols,
int width);
245NK_LIB
void nk_panel_alloc_space(
struct nk_rect *bounds,
const struct nk_context *ctx);
249NK_LIB nk_bool nk_nonblock_begin(
struct nk_context *ctx, nk_flags flags,
struct nk_rect body,
struct nk_rect header,
enum nk_panel_type panel_type);
261NK_LIB nk_bool nk_button_behavior(nk_flags *state,
struct nk_rect r,
const struct nk_input *i,
enum nk_button_behavior behavior);
271NK_LIB nk_bool nk_do_button_text_symbol(nk_flags *state,
struct nk_command_buffer *out,
struct nk_rect bounds,
enum nk_symbol_type symbol,
const char *str,
int len, nk_flags align,
enum nk_button_behavior behavior,
const struct nk_style_button *style,
const struct nk_user_font *font,
const struct nk_input *in);
273NK_LIB nk_bool nk_do_button_text_image(nk_flags *state,
struct nk_command_buffer *out,
struct nk_rect bounds,
struct nk_image img,
const char* str,
int len, nk_flags align,
enum nk_button_behavior behavior,
const struct nk_style_button *style,
const struct nk_user_font *font,
const struct nk_input *in);
280NK_LIB nk_bool nk_toggle_behavior(
const struct nk_input *in,
struct nk_rect select, nk_flags *state, nk_bool active);
281NK_LIB
void nk_draw_checkbox(
struct nk_command_buffer *out, nk_flags state,
const struct nk_style_toggle *style, nk_bool active,
const struct nk_rect *label,
const struct nk_rect *selector,
const struct nk_rect *cursors,
const char *
string,
int len,
const struct nk_user_font *font, nk_flags text_alignment);
282NK_LIB
void nk_draw_option(
struct nk_command_buffer *out, nk_flags state,
const struct nk_style_toggle *style, nk_bool active,
const struct nk_rect *label,
const struct nk_rect *selector,
const struct nk_rect *cursors,
const char *
string,
int len,
const struct nk_user_font *font, nk_flags text_alignment);
283NK_LIB nk_bool nk_do_toggle(nk_flags *state,
struct nk_command_buffer *out,
struct nk_rect r, nk_bool *active,
const char *str,
int len,
enum nk_toggle_type type,
const struct nk_style_toggle *style,
const struct nk_input *in,
const struct nk_user_font *font, nk_flags widget_alignment, nk_flags text_alignment);
286NK_LIB nk_size nk_progress_behavior(nk_flags *state,
struct nk_input *in,
struct nk_rect r,
struct nk_rect cursor, nk_size max, nk_size value, nk_bool modifiable);
291NK_LIB
float nk_slider_behavior(nk_flags *state,
struct nk_rect *logical_cursor,
struct nk_rect *visual_cursor,
struct nk_input *in,
struct nk_rect bounds,
float slider_min,
float slider_max,
float slider_value,
float slider_step,
float slider_steps);
296NK_LIB
float nk_scrollbar_behavior(nk_flags *state,
struct nk_input *in,
int has_scrolling,
const struct nk_rect *scroll,
const struct nk_rect *cursor,
const struct nk_rect *empty0,
const struct nk_rect *empty1,
float scroll_offset,
float target,
float scroll_step,
enum nk_orientation o);
298NK_LIB
float nk_do_scrollbarv(nk_flags *state,
struct nk_command_buffer *out,
struct nk_rect scroll,
int has_scrolling,
float offset,
float target,
float step,
float button_pixel_inc,
const struct nk_style_scrollbar *style,
struct nk_input *in,
const struct nk_user_font *font);
299NK_LIB
float nk_do_scrollbarh(nk_flags *state,
struct nk_command_buffer *out,
struct nk_rect scroll,
int has_scrolling,
float offset,
float target,
float step,
float button_pixel_inc,
const struct nk_style_scrollbar *style,
struct nk_input *in,
const struct nk_user_font *font);
302NK_LIB
void nk_draw_selectable(
struct nk_command_buffer *out, nk_flags state,
const struct nk_style_selectable *style, nk_bool active,
const struct nk_rect *bounds,
const struct nk_rect *icon,
const struct nk_image *img,
enum nk_symbol_type sym,
const char *
string,
int len, nk_flags align,
const struct nk_user_font *font);
304NK_LIB nk_bool nk_do_selectable_image(nk_flags *state,
struct nk_command_buffer *out,
struct nk_rect bounds,
const char *str,
int len, nk_flags align, nk_bool *value,
const struct nk_image *img,
const struct nk_style_selectable *style,
const struct nk_input *in,
const struct nk_user_font *font);
307NK_LIB
void nk_edit_draw_text(
struct nk_command_buffer *out,
const struct nk_style_edit *style,
float pos_x,
float pos_y,
float x_offset,
const char *text,
int byte_len,
float row_height,
const struct nk_user_font *font,
struct nk_color background,
struct nk_color foreground, nk_bool is_selected);
311NK_LIB nk_bool nk_color_picker_behavior(nk_flags *state,
const struct nk_rect *bounds,
const struct nk_rect *matrix,
const struct nk_rect *hue_bar,
const struct nk_rect *alpha_bar,
struct nk_colorf *color,
const struct nk_input *in);
316enum nk_property_status {
321enum nk_property_filter {
325enum nk_property_kind {
336 enum nk_property_kind kind;
342NK_LIB
struct nk_property_variant nk_property_variant_int(int value, int min_value, int max_value, int step);
343NK_LIB
struct nk_property_variant nk_property_variant_float(float value, float min_value, float max_value, float step);
344NK_LIB
struct nk_property_variant nk_property_variant_double(double value, double min_value, double max_value, double step);
349NK_LIB
void nk_do_property(nk_flags *ws,
struct nk_command_buffer *out,
struct nk_rect property,
const char *name,
struct nk_property_variant *variant,
float inc_per_pixel,
char *buffer,
int *len,
int *state,
int *cursor,
int *select_begin,
int *select_end,
const struct nk_style_property *style,
enum nk_property_filter filter,
struct nk_input *in,
const struct nk_user_font *font,
struct nk_text_edit *text_edit,
enum nk_button_behavior behavior);
352#ifdef NK_INCLUDE_FONT_BAKING
359#ifndef NK_NO_STB_RECT_PACK_IMPLEMENTATION
360#define STB_RECT_PACK_IMPLEMENTATION
368#ifndef NK_NO_STB_TRUETYPE_IMPLEMENTATION
369#define STB_TRUETYPE_IMPLEMENTATION
375nk_stbtt_malloc(nk_size size,
void *user_data) {
377 return alloc->alloc(alloc->userdata, 0, size);
381nk_stbtt_free(
void *ptr,
void *user_data) {
383 alloc->free(alloc->userdata, ptr);
386#define STBTT_malloc(x,u) nk_stbtt_malloc(x,u)
387#define STBTT_free(x,u) nk_stbtt_free(x,u)