1 
2 //          Copyright Mateusz Muszyński 2018.
3 // Distributed under the Boost Software License, Version 1.0.
4 //    (See accompanying file LICENSE_1_0.txt or copy at
5 //          http://www.boost.org/LICENSE_1_0.txt)
6 
7 module bindbc.nuklear.macros;
8 
9 import bindbc.nuklear.types;
10 import bindbc.nuklear.binddynamic;
11 import bindbc.nuklear.bindstatic;
12 
13 version (NK_ALL)
14 {
15     version = NK_INCLUDE_FIXED_TYPES;
16     version = NK_INCLUDE_DEFAULT_ALLOCATOR;
17     version = NK_INCLUDE_STANDARD_IO;
18     version = NK_INCLUDE_STANDARD_VARARGS;
19     version = NK_INCLUDE_VERTEX_BUFFER_OUTPUT;
20     version = NK_INCLUDE_FONT_BAKING;
21     version = NK_INCLUDE_DEFAULT_FONT;
22     version = NK_INCLUDE_COMMAND_USERDATA;
23     version = NK_BUTTON_TRIGGER_ON_RELEASE;
24     version = NK_ZERO_COMMAND_MEMORY;
25     version = NK_UINT_DRAW_INDEX;
26 }
27 
28 @nogc nothrow {
29 
30     alias nk_command_delegate = void delegate(const(nk_command)*);
31     version(NK_INCLUDE_VERTEX_BUFFER_OUTPUT)
32     {
33         alias nk_draw_command_delegate = void delegate(const(nk_draw_command)*);
34     }
35 
36     pragma(inline, true) {
37         void nk_foreach(nk_context* ctx, nk_command_delegate block) {
38             for (auto c = nk__begin(ctx); c != null; c = nk__next(ctx, c)) {
39                 block(c);
40             }
41         }
42 
43         version(NK_INCLUDE_VERTEX_BUFFER_OUTPUT) {		
44             void nk_draw_foreach(nk_context *ctx, const(nk_buffer) *b, nk_draw_command_delegate block) {
45                 for (auto c = nk__draw_begin(ctx, b); c != null; c = nk__draw_next(c, b, ctx)) {
46                     block(c);
47                 }
48             }
49         }
50 
51         auto nk_tree_push(size_t line = __LINE__)(nk_context *ctx, nk_tree_type type, const(char) *title, nk_collapse_states state) {
52             return nk_tree_push_hashed(ctx, type, title, state, null, 0, line);
53         }
54 
55         auto nk_tree_push_id(nk_context *ctx, nk_tree_type type, const(char) *title, nk_collapse_states state, int id) {
56             return nk_tree_push_hashed(ctx, type, title, state, null, 0, id);
57         }
58 
59         auto nk_tree_image_push(size_t line = __LINE__)(nk_context *ctx, nk_tree_type type, nk_image img, const(char) *title, nk_collapse_states state) {
60             return nk_tree_image_push_hashed(ctx, type, img, title, state, null,0, line);
61         }
62         auto nk_tree_image_push_id(nk_context *ctx, nk_tree_type type, nk_image img, const(char) *title, nk_collapse_states state, int id) {
63             return nk_tree_image_push_hashed(ctx, type, img, title, state, null, 0, id);
64         }
65 
66         auto nk_tree_element_push(size_t line = __LINE__)(nk_context *ctx, nk_tree_type type, const(char) *title, nk_collapse_states state, int* selected) {
67             return nk_tree_element_push_hashed(ctx, type, title, state, selected, null, 0,line);
68         }
69         auto nk_tree_element_push_id(nk_context *ctx, nk_tree_type type, const(char) *title, nk_collapse_states state, int* selected, int id) {
70             return nk_tree_element_push_hashed(ctx, type, title, state, selected, null, 0,id);
71         }
72 
73         version(NK_INCLUDE_VERTEX_BUFFER_OUTPUT) {
74             void nk_draw_list_foreach(const(nk_draw_list) *can, const(nk_buffer) *b, nk_draw_command_delegate block) {
75                 for (auto c = nk__draw_list_begin(can, b); c != null; c = nk__draw_list_next(c, b, can)) {
76                     block(c);
77                 }
78             }
79         }
80     }
81 }