Nuklear
This is a minimal-state, immediate-mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed as a simple embeddable user interface for application and does not have any dependencies, a default render backend or OS window/input handling but instead provides a highly modular, library-based approach, with 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 focuses only on the actual UI.
 
Loading...
Searching...
No Matches
nuklear_internal.h
1#ifndef NK_INTERNAL_H
2#define NK_INTERNAL_H
3
4#ifndef NK_POOL_DEFAULT_CAPACITY
5#define NK_POOL_DEFAULT_CAPACITY 16
6#endif
7
8#ifndef NK_DEFAULT_COMMAND_BUFFER_SIZE
9#define NK_DEFAULT_COMMAND_BUFFER_SIZE (4*1024)
10#endif
11
12#ifndef NK_BUFFER_DEFAULT_INITIAL_SIZE
13#define NK_BUFFER_DEFAULT_INITIAL_SIZE (4*1024)
14#endif
15
16/* standard library headers */
17#ifdef NK_INCLUDE_DEFAULT_ALLOCATOR
18#include <stdlib.h> /* malloc, free */
19#endif
20#ifdef NK_INCLUDE_STANDARD_IO
21#include <stdio.h> /* fopen, fclose,... */
22#endif
23#ifdef NK_INCLUDE_STANDARD_VARARGS
24#include <stdarg.h> /* valist, va_start, va_end, ... */
25#endif
26#ifndef NK_ASSERT
27#include <assert.h>
28#define NK_ASSERT(expr) assert(expr)
29#endif
30
31#define NK_DEFAULT (-1)
32
33#ifndef NK_VSNPRINTF
34/* If your compiler does support `vsnprintf` I would highly recommend
35 * defining this to vsnprintf instead since `vsprintf` is basically
36 * unbelievable unsafe and should *NEVER* be used. But I have to support
37 * it since C89 only provides this unsafe version. */
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)
44 #else
45 #define NK_VSNPRINTF(s,n,f,a) vsprintf(s,f,a)
46 #endif
47#endif
48
49#define NK_SCHAR_MIN (-127)
50#define NK_SCHAR_MAX 127
51#define NK_UCHAR_MIN 0
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
59#define NK_UINT_MIN 0
60#define NK_UINT_MAX 4294967295u
61
62/* Make sure correct type size:
63 * This will fire with a negative subscript error if the type sizes
64 * are set incorrectly by the compiler, and compile out if not */
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);
74#ifdef NK_INCLUDE_STANDARD_BOOL
75NK_STATIC_ASSERT(sizeof(nk_bool) == sizeof(bool));
76#else
77NK_STATIC_ASSERT(sizeof(nk_bool) == 4);
78#endif
79
80NK_GLOBAL const struct nk_rect nk_null_rect = {-8192.0f, -8192.0f, 16384, 16384};
81#define NK_FLOAT_PRECISION 0.00000000000001
82
83NK_GLOBAL const struct nk_color nk_red = {255,0,0,255};
84NK_GLOBAL const struct nk_color nk_green = {0,255,0,255};
85NK_GLOBAL const struct nk_color nk_blue = {0,0,255,255};
86NK_GLOBAL const struct nk_color nk_white = {255,255,255,255};
87NK_GLOBAL const struct nk_color nk_black = {0,0,0,255};
88NK_GLOBAL const struct nk_color nk_yellow = {255,255,0,255};
89
90/* widget */
91#define nk_widget_state_reset(s)\
92 if ((*(s)) & NK_WIDGET_STATE_MODIFIED)\
93 (*(s)) = NK_WIDGET_STATE_INACTIVE|NK_WIDGET_STATE_MODIFIED;\
94 else (*(s)) = NK_WIDGET_STATE_INACTIVE;
95
96/* math */
97#ifndef NK_INV_SQRT
98NK_LIB float nk_inv_sqrt(float n);
99#endif
100#ifndef NK_SIN
101NK_LIB float nk_sin(float x);
102#endif
103#ifndef NK_COS
104NK_LIB float nk_cos(float x);
105#endif
106#ifndef NK_ATAN
107NK_LIB float nk_atan(float x);
108#endif
109#ifndef NK_ATAN2
110NK_LIB float nk_atan2(float y, float x);
111#endif
112NK_LIB nk_uint nk_round_up_pow2(nk_uint v);
113NK_LIB struct nk_rect nk_shrink_rect(struct nk_rect r, float amount);
114NK_LIB struct nk_rect nk_pad_rect(struct nk_rect r, struct nk_vec2 pad);
115NK_LIB void nk_unify(struct nk_rect *clip, const struct nk_rect *a, float x0, float y0, float x1, float y1);
116NK_LIB double nk_pow(double x, int n);
117NK_LIB int nk_ifloord(double x);
118NK_LIB int nk_ifloorf(float x);
119NK_LIB int nk_iceilf(float x);
120NK_LIB int nk_log10(double n);
121NK_LIB float nk_roundf(float x);
122
123/* util */
124enum {NK_DO_NOT_STOP_ON_NEW_LINE, NK_STOP_ON_NEW_LINE};
125NK_LIB nk_bool nk_is_lower(int c);
126NK_LIB nk_bool nk_is_upper(int c);
127NK_LIB int nk_to_upper(int c);
128NK_LIB int nk_to_lower(int c);
129
130#ifndef NK_MEMCPY
131NK_LIB void* nk_memcopy(void *dst, const void *src, nk_size n);
132#endif
133#ifndef NK_MEMSET
134NK_LIB void nk_memset(void *ptr, int c0, nk_size size);
135#endif
136NK_LIB void nk_zero(void *ptr, nk_size size);
137NK_LIB char *nk_itoa(char *s, long n);
138NK_LIB int nk_string_float_limit(char *string, int prec);
139#ifndef NK_DTOA
140NK_LIB char *nk_dtoa(char *s, double n);
141#endif
142NK_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);
143NK_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);
144#ifdef NK_INCLUDE_STANDARD_VARARGS
145NK_LIB int nk_strfmt(char *buf, int buf_size, const char *fmt, va_list args);
146#endif
147#ifdef NK_INCLUDE_STANDARD_IO
148NK_LIB char *nk_file_load(const char* path, nk_size* siz, const struct nk_allocator *alloc);
149#endif
150
151/* buffer */
152#ifdef NK_INCLUDE_DEFAULT_ALLOCATOR
153NK_LIB void* nk_malloc(nk_handle unused, void *old,nk_size size);
154NK_LIB void nk_mfree(nk_handle unused, void *ptr);
155#endif
156NK_LIB void* nk_buffer_align(void *unaligned, nk_size align, nk_size *alignment, enum nk_buffer_allocation_type type);
157NK_LIB void* nk_buffer_alloc(struct nk_buffer *b, enum nk_buffer_allocation_type type, nk_size size, nk_size align);
158NK_LIB void* nk_buffer_realloc(struct nk_buffer *b, nk_size capacity, nk_size *size);
159
160/* draw */
161NK_LIB void nk_command_buffer_init(struct nk_command_buffer *cb, struct nk_buffer *b, enum nk_command_clipping clip);
162NK_LIB void nk_command_buffer_reset(struct nk_command_buffer *b);
163NK_LIB void* nk_command_buffer_push(struct nk_command_buffer* b, enum nk_command_type t, nk_size size);
164NK_LIB void nk_draw_symbol(struct nk_command_buffer *out, enum nk_symbol_type type, struct nk_rect content, struct nk_color background, struct nk_color foreground, float border_width, const struct nk_user_font *font);
165
166/* buffering */
167NK_LIB void nk_start_buffer(struct nk_context *ctx, struct nk_command_buffer *b);
168NK_LIB void nk_start(struct nk_context *ctx, struct nk_window *win);
169NK_LIB void nk_start_popup(struct nk_context *ctx, struct nk_window *win);
170NK_LIB void nk_finish_popup(struct nk_context *ctx, struct nk_window*);
171NK_LIB void nk_finish_buffer(struct nk_context *ctx, struct nk_command_buffer *b);
172NK_LIB void nk_finish(struct nk_context *ctx, struct nk_window *w);
173NK_LIB void nk_build(struct nk_context *ctx);
174
175/* text editor */
176NK_LIB void nk_textedit_clear_state(struct nk_text_edit *state, enum nk_text_edit_type type, nk_plugin_filter filter);
177NK_LIB void nk_textedit_click(struct nk_text_edit *state, float x, float y, const struct nk_user_font *font, float row_height);
178NK_LIB void nk_textedit_drag(struct nk_text_edit *state, float x, float y, const struct nk_user_font *font, float row_height);
179NK_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);
180
181/* window */
182enum nk_window_insert_location {
183 NK_INSERT_BACK, /* inserts window into the back of list (front of screen) */
184 NK_INSERT_FRONT /* inserts window into the front of list (back of screen) */
185};
186NK_LIB void *nk_create_window(struct nk_context *ctx);
187NK_LIB void nk_remove_window(struct nk_context*, struct nk_window*);
188NK_LIB void nk_free_window(struct nk_context *ctx, struct nk_window *win);
189NK_LIB struct nk_window *nk_find_window(const struct nk_context *ctx, nk_hash hash, const char *name);
190NK_LIB void nk_insert_window(struct nk_context *ctx, struct nk_window *win, enum nk_window_insert_location loc);
191
192/* pool */
193NK_LIB void nk_pool_init(struct nk_pool *pool, const struct nk_allocator *alloc, unsigned int capacity);
194NK_LIB void nk_pool_free(struct nk_pool *pool);
195NK_LIB void nk_pool_init_fixed(struct nk_pool *pool, void *memory, nk_size size);
196NK_LIB struct nk_page_element *nk_pool_alloc(struct nk_pool *pool);
197
198/* page-element */
199NK_LIB struct nk_page_element* nk_create_page_element(struct nk_context *ctx);
200NK_LIB void nk_link_page_element_into_freelist(struct nk_context *ctx, struct nk_page_element *elem);
201NK_LIB void nk_free_page_element(struct nk_context *ctx, struct nk_page_element *elem);
202
203/* table */
204NK_LIB struct nk_table* nk_create_table(struct nk_context *ctx);
205NK_LIB void nk_remove_table(struct nk_window *win, struct nk_table *tbl);
206NK_LIB void nk_free_table(struct nk_context *ctx, struct nk_table *tbl);
207NK_LIB void nk_push_table(struct nk_window *win, struct nk_table *tbl);
208NK_LIB nk_uint *nk_add_value(struct nk_context *ctx, struct nk_window *win, nk_hash name, nk_uint value);
209NK_LIB nk_uint *nk_find_value(const struct nk_window *win, nk_hash name);
210
211/* panel */
212NK_LIB void *nk_create_panel(struct nk_context *ctx);
213NK_LIB void nk_free_panel(struct nk_context*, struct nk_panel *pan);
214NK_LIB nk_bool nk_panel_has_header(nk_flags flags, const char *title);
215NK_LIB struct nk_vec2 nk_panel_get_padding(const struct nk_style *style, enum nk_panel_type type);
216NK_LIB float nk_panel_get_border(const struct nk_style *style, nk_flags flags, enum nk_panel_type type);
217NK_LIB struct nk_color nk_panel_get_border_color(const struct nk_style *style, enum nk_panel_type type);
218NK_LIB nk_bool nk_panel_is_sub(enum nk_panel_type type);
219NK_LIB nk_bool nk_panel_is_nonblock(enum nk_panel_type type);
220NK_LIB nk_bool nk_panel_begin(struct nk_context *ctx, const char *title, enum nk_panel_type panel_type);
221NK_LIB void nk_panel_end(struct nk_context *ctx);
222
223/* layout */
224NK_LIB float nk_layout_row_calculate_usable_space(const struct nk_style *style, enum nk_panel_type type, float total_space, int columns);
225NK_LIB void nk_panel_layout(const struct nk_context *ctx, struct nk_window *win, float height, int cols);
226NK_LIB void nk_row_layout(struct nk_context *ctx, enum nk_layout_format fmt, float height, int cols, int width);
227NK_LIB void nk_panel_alloc_row(const struct nk_context *ctx, struct nk_window *win);
228NK_LIB void nk_layout_widget_space(struct nk_rect *bounds, const struct nk_context *ctx, struct nk_window *win, int modify);
229NK_LIB void nk_panel_alloc_space(struct nk_rect *bounds, const struct nk_context *ctx);
230NK_LIB void nk_layout_peek(struct nk_rect *bounds, const struct nk_context *ctx);
231
232/* popup */
233NK_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);
234
235/* text */
236struct nk_text {
237 struct nk_vec2 padding;
238 struct nk_color background;
239 struct nk_color text;
240};
241NK_LIB void nk_widget_text(struct nk_command_buffer *o, struct nk_rect b, const char *string, int len, const struct nk_text *t, nk_flags a, const struct nk_user_font *f);
242NK_LIB void nk_widget_text_wrap(struct nk_command_buffer *o, struct nk_rect b, const char *string, int len, const struct nk_text *t, const struct nk_user_font *f);
243
244/* button */
245NK_LIB nk_bool nk_button_behavior(nk_flags *state, struct nk_rect r, const struct nk_input *i, enum nk_button_behavior behavior);
246NK_LIB const struct nk_style_item* nk_draw_button(struct nk_command_buffer *out, const struct nk_rect *bounds, nk_flags state, const struct nk_style_button *style);
247NK_LIB nk_bool nk_do_button(nk_flags *state, struct nk_command_buffer *out, struct nk_rect r, const struct nk_style_button *style, const struct nk_input *in, enum nk_button_behavior behavior, struct nk_rect *content);
248NK_LIB void nk_draw_button_text(struct nk_command_buffer *out, const struct nk_rect *bounds, const struct nk_rect *content, nk_flags state, const struct nk_style_button *style, const char *txt, int len, nk_flags text_alignment, const struct nk_user_font *font);
249NK_LIB nk_bool nk_do_button_text(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, const char *string, int len, nk_flags align, enum nk_button_behavior behavior, const struct nk_style_button *style, const struct nk_input *in, const struct nk_user_font *font);
250NK_LIB void nk_draw_button_symbol(struct nk_command_buffer *out, const struct nk_rect *bounds, const struct nk_rect *content, nk_flags state, const struct nk_style_button *style, enum nk_symbol_type type, const struct nk_user_font *font);
251NK_LIB nk_bool nk_do_button_symbol(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, enum nk_symbol_type symbol, enum nk_button_behavior behavior, const struct nk_style_button *style, const struct nk_input *in, const struct nk_user_font *font);
252NK_LIB void nk_draw_button_image(struct nk_command_buffer *out, const struct nk_rect *bounds, const struct nk_rect *content, nk_flags state, const struct nk_style_button *style, const struct nk_image *img);
253NK_LIB nk_bool nk_do_button_image(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, struct nk_image img, enum nk_button_behavior b, const struct nk_style_button *style, const struct nk_input *in);
254NK_LIB void nk_draw_button_text_symbol(struct nk_command_buffer *out, const struct nk_rect *bounds, const struct nk_rect *label, const struct nk_rect *symbol, nk_flags state, const struct nk_style_button *style, const char *str, int len, enum nk_symbol_type type, const struct nk_user_font *font);
255NK_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);
256NK_LIB void nk_draw_button_text_image(struct nk_command_buffer *out, const struct nk_rect *bounds, const struct nk_rect *label, const struct nk_rect *image, nk_flags state, const struct nk_style_button *style, const char *str, int len, const struct nk_user_font *font, const struct nk_image *img);
257NK_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);
258
259/* toggle */
260enum nk_toggle_type {
261 NK_TOGGLE_CHECK,
262 NK_TOGGLE_OPTION
263};
264NK_LIB nk_bool nk_toggle_behavior(const struct nk_input *in, struct nk_rect select, nk_flags *state, nk_bool active);
265NK_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);
266NK_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);
267NK_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);
268
269/* progress */
270NK_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);
271NK_LIB void nk_draw_progress(struct nk_command_buffer *out, nk_flags state, const struct nk_style_progress *style, const struct nk_rect *bounds, const struct nk_rect *scursor, nk_size value, nk_size max);
272NK_LIB nk_size nk_do_progress(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, nk_size value, nk_size max, nk_bool modifiable, const struct nk_style_progress *style, struct nk_input *in);
273
274/* slider */
275NK_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);
276NK_LIB void nk_draw_slider(struct nk_command_buffer *out, nk_flags state, const struct nk_style_slider *style, const struct nk_rect *bounds, const struct nk_rect *visual_cursor, float min, float value, float max);
277NK_LIB float nk_do_slider(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, float min, float val, float max, float step, const struct nk_style_slider *style, struct nk_input *in, const struct nk_user_font *font);
278
279/* scrollbar */
280NK_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);
281NK_LIB void nk_draw_scrollbar(struct nk_command_buffer *out, nk_flags state, const struct nk_style_scrollbar *style, const struct nk_rect *bounds, const struct nk_rect *scroll);
282NK_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);
283NK_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);
284
285/* selectable */
286NK_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);
287NK_LIB nk_bool nk_do_selectable(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_style_selectable *style, const struct nk_input *in, const struct nk_user_font *font);
288NK_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);
289
290/* edit */
291NK_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);
292NK_LIB nk_flags nk_do_edit(nk_flags *state, struct nk_command_buffer *out, struct nk_rect bounds, nk_flags flags, nk_plugin_filter filter, struct nk_text_edit *edit, const struct nk_style_edit *style, struct nk_input *in, const struct nk_user_font *font);
293
294/* color-picker */
295NK_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);
296NK_LIB void nk_draw_color_picker(struct nk_command_buffer *o, const struct nk_rect *matrix, const struct nk_rect *hue_bar, const struct nk_rect *alpha_bar, struct nk_colorf col);
297NK_LIB nk_bool nk_do_color_picker(nk_flags *state, struct nk_command_buffer *out, struct nk_colorf *col, enum nk_color_format fmt, struct nk_rect bounds, struct nk_vec2 padding, const struct nk_input *in, const struct nk_user_font *font);
298
299/* property */
300enum nk_property_status {
301 NK_PROPERTY_DEFAULT,
302 NK_PROPERTY_EDIT,
303 NK_PROPERTY_DRAG
304};
305enum nk_property_filter {
306 NK_FILTER_INT,
307 NK_FILTER_FLOAT
308};
309enum nk_property_kind {
310 NK_PROPERTY_INT,
311 NK_PROPERTY_FLOAT,
312 NK_PROPERTY_DOUBLE
313};
315 int i;
316 float f;
317 double d;
318};
320 enum nk_property_kind kind;
321 union nk_property value;
322 union nk_property min_value;
323 union nk_property max_value;
324 union nk_property step;
325};
326NK_LIB struct nk_property_variant nk_property_variant_int(int value, int min_value, int max_value, int step);
327NK_LIB struct nk_property_variant nk_property_variant_float(float value, float min_value, float max_value, float step);
328NK_LIB struct nk_property_variant nk_property_variant_double(double value, double min_value, double max_value, double step);
329
330NK_LIB void nk_drag_behavior(nk_flags *state, const struct nk_input *in, struct nk_rect drag, struct nk_property_variant *variant, float inc_per_pixel);
331NK_LIB void nk_property_behavior(nk_flags *ws, const struct nk_input *in, struct nk_rect property, struct nk_rect label, struct nk_rect edit, struct nk_rect empty, int *state, struct nk_property_variant *variant, float inc_per_pixel);
332NK_LIB void nk_draw_property(struct nk_command_buffer *out, const struct nk_style_property *style, const struct nk_rect *bounds, const struct nk_rect *label, nk_flags state, const char *name, int len, const struct nk_user_font *font);
333NK_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);
334NK_LIB void nk_property(struct nk_context *ctx, const char *name, struct nk_property_variant *variant, float inc_per_pixel, const enum nk_property_filter filter);
335
336#ifdef NK_INCLUDE_FONT_BAKING
337
343#ifndef NK_NO_STB_RECT_PACK_IMPLEMENTATION
344#define STB_RECT_PACK_IMPLEMENTATION
345#endif /* NK_NO_STB_RECT_PACK_IMPLEMENTATION */
346
352#ifndef NK_NO_STB_TRUETYPE_IMPLEMENTATION
353#define STB_TRUETYPE_IMPLEMENTATION
354#endif /* NK_NO_STB_TRUETYPE_IMPLEMENTATION */
355
356/* Allow consumer to define own STBTT_malloc/STBTT_free, and use the font atlas' allocator otherwise */
357#ifndef STBTT_malloc
358static void*
359nk_stbtt_malloc(nk_size size, void *user_data) {
360 struct nk_allocator *alloc = (struct nk_allocator *) user_data;
361 return alloc->alloc(alloc->userdata, 0, size);
362}
363
364static void
365nk_stbtt_free(void *ptr, void *user_data) {
366 struct nk_allocator *alloc = (struct nk_allocator *) user_data;
367 alloc->free(alloc->userdata, ptr);
368}
369
370#define STBTT_malloc(x,u) nk_stbtt_malloc(x,u)
371#define STBTT_free(x,u) nk_stbtt_free(x,u)
372
373#endif /* STBTT_malloc */
374
375#endif /* NK_INCLUDE_FONT_BAKING */
376
377#endif