nuklear 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +29 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +196 -0
  8. data/Rakefile +26 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/examples/arial.ttf +0 -0
  12. data/examples/calculator.rb +102 -0
  13. data/examples/hello_nuklear.rb +182 -0
  14. data/examples/lib/opengl_font.rb +32 -0
  15. data/examples/lib/opengl_init.rb +4 -0
  16. data/examples/lib/sdl2_init.rb +6 -0
  17. data/examples/lib/sdl2_input.rb +81 -0
  18. data/examples/lib/window.rb +47 -0
  19. data/ext/freetype/extconf.rb +26 -0
  20. data/ext/nuklear/extconf.rb +14 -0
  21. data/ext/nuklear/nkrb.c +79 -0
  22. data/ext/nuklear/nkrb.h +89 -0
  23. data/ext/nuklear/nkrb_buffer.c +80 -0
  24. data/ext/nuklear/nkrb_context.c +241 -0
  25. data/ext/nuklear/nkrb_font.c +80 -0
  26. data/ext/nuklear/nkrb_renderer.c +114 -0
  27. data/ext/nuklear/nkrb_style.c +61 -0
  28. data/ext/nuklear/nkrb_style_color.c +126 -0
  29. data/ext/nuklear/nkrb_style_image.c +32 -0
  30. data/ext/nuklear/nkrb_ui.c +32 -0
  31. data/ext/nuklear/nkrb_ui_builder.c +29 -0
  32. data/ext/nuklear/nkrb_ui_button.c +55 -0
  33. data/ext/nuklear/nkrb_ui_color_picker.c +20 -0
  34. data/ext/nuklear/nkrb_ui_combo.c +73 -0
  35. data/ext/nuklear/nkrb_ui_container.c +7 -0
  36. data/ext/nuklear/nkrb_ui_edit_string.c +38 -0
  37. data/ext/nuklear/nkrb_ui_group.c +27 -0
  38. data/ext/nuklear/nkrb_ui_label.c +30 -0
  39. data/ext/nuklear/nkrb_ui_layout.c +125 -0
  40. data/ext/nuklear/nkrb_ui_menu.c +49 -0
  41. data/ext/nuklear/nkrb_ui_menu_item.c +30 -0
  42. data/ext/nuklear/nkrb_ui_menubar.c +18 -0
  43. data/ext/nuklear/nkrb_ui_popup.c +24 -0
  44. data/ext/nuklear/nkrb_ui_progress.c +19 -0
  45. data/ext/nuklear/nkrb_ui_property.c +20 -0
  46. data/ext/nuklear/nkrb_ui_selectables.c +53 -0
  47. data/ext/nuklear/nkrb_ui_slider.c +19 -0
  48. data/ext/nuklear/nkrb_ui_tree.c +29 -0
  49. data/ext/nuklear/nkrb_ui_widget.c +7 -0
  50. data/ext/nuklear/nkrb_ui_window.c +43 -0
  51. data/ext/nuklear/nuklear.h +23378 -0
  52. data/ext/nuklear_renderer_opengl2/KHR/khrplatform.h +285 -0
  53. data/ext/nuklear_renderer_opengl2/extconf.rb +13 -0
  54. data/ext/nuklear_renderer_opengl2/glad.c +1432 -0
  55. data/ext/nuklear_renderer_opengl2/glad.h +2747 -0
  56. data/ext/nuklear_renderer_opengl2/nuklear_renderer_opengl2.c +197 -0
  57. data/ext/nuklear_renderer_opengl4/KHR/khrplatform.h +285 -0
  58. data/ext/nuklear_renderer_opengl4/extconf.rb +13 -0
  59. data/ext/nuklear_renderer_opengl4/glad.c +1782 -0
  60. data/ext/nuklear_renderer_opengl4/glad.h +3687 -0
  61. data/ext/nuklear_renderer_opengl4/nuklear_renderer_opengl4.c +255 -0
  62. data/lib/nuklear/context.rb +49 -0
  63. data/lib/nuklear/dsl.rb +46 -0
  64. data/lib/nuklear/event_buffer.rb +23 -0
  65. data/lib/nuklear/renderer/opengl24.rb +13 -0
  66. data/lib/nuklear/renderer.rb +108 -0
  67. data/lib/nuklear/style/color.rb +24 -0
  68. data/lib/nuklear/style/image.rb +9 -0
  69. data/lib/nuklear/style.rb +8 -0
  70. data/lib/nuklear/test_case.rb +30 -0
  71. data/lib/nuklear/ui/base.rb +34 -0
  72. data/lib/nuklear/ui/button.rb +77 -0
  73. data/lib/nuklear/ui/checkbox.rb +39 -0
  74. data/lib/nuklear/ui/col.rb +21 -0
  75. data/lib/nuklear/ui/color_picker.rb +31 -0
  76. data/lib/nuklear/ui/combo_box.rb +42 -0
  77. data/lib/nuklear/ui/container.rb +80 -0
  78. data/lib/nuklear/ui/edit_string.rb +48 -0
  79. data/lib/nuklear/ui/enableable.rb +29 -0
  80. data/lib/nuklear/ui/events.rb +23 -0
  81. data/lib/nuklear/ui/group.rb +31 -0
  82. data/lib/nuklear/ui/label.rb +21 -0
  83. data/lib/nuklear/ui/menu.rb +43 -0
  84. data/lib/nuklear/ui/menu_bar.rb +19 -0
  85. data/lib/nuklear/ui/menu_item.rb +34 -0
  86. data/lib/nuklear/ui/option.rb +17 -0
  87. data/lib/nuklear/ui/option_group.rb +22 -0
  88. data/lib/nuklear/ui/popup.rb +37 -0
  89. data/lib/nuklear/ui/progress.rb +33 -0
  90. data/lib/nuklear/ui/property.rb +28 -0
  91. data/lib/nuklear/ui/row.rb +28 -0
  92. data/lib/nuklear/ui/select_list.rb +31 -0
  93. data/lib/nuklear/ui/selectable.rb +21 -0
  94. data/lib/nuklear/ui/slider.rb +26 -0
  95. data/lib/nuklear/ui/text_align.rb +14 -0
  96. data/lib/nuklear/ui/tree.rb +62 -0
  97. data/lib/nuklear/ui/window.rb +175 -0
  98. data/lib/nuklear/ui.rb +33 -0
  99. data/lib/nuklear/version.rb +3 -0
  100. data/lib/nuklear.rb +26 -0
  101. data/nuklear.gemspec +41 -0
  102. metadata +233 -0
@@ -0,0 +1,27 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_group(VALUE self, VALUE rcontext, VALUE rtitle, VALUE rflags, VALUE rscroll_x, VALUE rscroll_y) {
4
+ struct nk_context *context = nkrb_context_get(rcontext);
5
+ const char *title = StringValueCStr(rtitle);
6
+ int flags = FIX2INT(rflags);
7
+ unsigned int scroll_x = (unsigned int) FIX2INT(rscroll_x);
8
+ unsigned int scroll_y = (unsigned int) FIX2INT(rscroll_y);
9
+ int result = nk_group_scrolled_offset_begin(context, &scroll_x, &scroll_y, title, flags);
10
+
11
+ if (result) {
12
+ if (rb_block_given_p()) {
13
+ instance_eval_block(self);
14
+ }
15
+ nk_group_end(context);
16
+ VALUE scroll = rb_ary_new();
17
+ rb_ary_push(scroll, INT2FIX(scroll_x));
18
+ rb_ary_push(scroll, INT2FIX(scroll_y));
19
+ return scroll;
20
+ }
21
+
22
+ return Qnil;
23
+ }
24
+
25
+ void nkrb_ui_group_init(void) {
26
+ rb_define_method(mNuklearUIContainer, "ui_group", nkrb_ui_group, 5);
27
+ }
@@ -0,0 +1,30 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_label(VALUE self, VALUE rcontext, VALUE text, VALUE rcolor, VALUE rwrap, VALUE ralign) {
4
+ struct nk_context *context = nkrb_context_get(rcontext);
5
+ int align = FIX2INT(ralign);
6
+
7
+ if (RTEST(rwrap)) {
8
+ if (NIL_P(rcolor)) {
9
+ nk_text_wrap(context, StringValuePtr(text), (int) RSTRING_LEN(text));
10
+ } else {
11
+ struct nk_color color;
12
+ ASSIGN_STYLE_AS_COLOR(color, nkrb_style_item(rcolor));
13
+ nk_text_wrap_colored(context, StringValuePtr(text), (int) RSTRING_LEN(text), color);
14
+ }
15
+ } else {
16
+ if (NIL_P(rcolor)) {
17
+ nk_text(context, StringValuePtr(text), (int) RSTRING_LEN(text), align);
18
+ } else {
19
+ struct nk_color color;
20
+ ASSIGN_STYLE_AS_COLOR(color, nkrb_style_item(rcolor));
21
+ nk_text_colored(context, StringValuePtr(text), (int) RSTRING_LEN(text), align, color);
22
+ }
23
+ }
24
+
25
+ return Qnil;
26
+ }
27
+
28
+ void nkrb_ui_label_init(void) {
29
+ rb_define_method(mNuklearUIContainer, "ui_label", nkrb_ui_label, 5);
30
+ }
@@ -0,0 +1,125 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_layout_row(VALUE self, VALUE rcontext, VALUE rformat, VALUE rheight, VALUE rratios) {
4
+ struct nk_context *ctx = nkrb_context_get(rcontext);
5
+ enum nk_layout_format fmt = NK_DYNAMIC;
6
+ if (SYM2ID(rformat) == rb_intern("static")) fmt = NK_STATIC;
7
+ float height = (float) NUM2DBL(rheight);
8
+ int len = (int) RARRAY_LEN(rratios);
9
+ float *ratios = malloc(len * sizeof(float));
10
+ int i;
11
+ for (i = 0; i < len; i++) {
12
+ ratios[i] = (float) NUM2DBL(rb_ary_entry(rratios, i));
13
+ }
14
+ nk_layout_row(ctx, fmt, height, len, ratios);
15
+ free(ratios);
16
+ return Qnil;
17
+ }
18
+
19
+ VALUE nkrb_ui_layout_row_dynamic(VALUE self, VALUE context, VALUE height, VALUE ncols) {
20
+ nk_layout_row_dynamic(nkrb_context_get(context), (float) NUM2DBL(height), FIX2INT(ncols));
21
+ return Qtrue;
22
+ }
23
+
24
+ VALUE nkrb_ui_layout_row_static(VALUE self, VALUE context, VALUE height, VALUE col_width, VALUE ncols) {
25
+ nk_layout_row_static(nkrb_context_get(context), (float) NUM2DBL(height), FIX2INT(col_width), FIX2INT(ncols));
26
+ return Qtrue;
27
+ }
28
+
29
+ VALUE nkrb_ui_layout_row_begin(VALUE self, VALUE context, VALUE format, VALUE row_height, VALUE ncols) {
30
+ struct nk_context *ctx = nkrb_context_get(context);
31
+ enum nk_layout_format fmt = NK_DYNAMIC;
32
+ if (SYM2ID(format) == rb_intern("static")) fmt = NK_STATIC;
33
+ nk_layout_row_begin(ctx, fmt, (float) NUM2DBL(row_height), FIX2INT(ncols));
34
+ if (rb_block_given_p()) {
35
+ instance_eval_block(Qtrue);
36
+ }
37
+ nk_layout_row_end(ctx);
38
+ return Qnil;
39
+ }
40
+
41
+ VALUE nkrb_ui_layout_row_push(VALUE self, VALUE context, VALUE value) {
42
+ nk_layout_row_push(nkrb_context_get(context), (float) NUM2DBL(value));
43
+ return Qtrue;
44
+ }
45
+
46
+ VALUE nkrb_ui_layout_row_template_begin(VALUE self, VALUE context, VALUE height) {
47
+ nk_layout_row_template_begin(nkrb_context_get(context), (float) NUM2DBL(height));
48
+ return Qnil;
49
+ }
50
+
51
+ VALUE nkrb_ui_layout_row_template_push_dynamic(VALUE self, VALUE context) {
52
+ nk_layout_row_template_push_dynamic(nkrb_context_get(context));
53
+ return Qnil;
54
+ }
55
+
56
+ VALUE nkrb_ui_layout_row_template_push_variable(VALUE self, VALUE context, VALUE min_width) {
57
+ nk_layout_row_template_push_variable(nkrb_context_get(context), (float) NUM2DBL(min_width));
58
+ return Qnil;
59
+ }
60
+
61
+ VALUE nkrb_ui_layout_row_template_push_static(VALUE self, VALUE context, VALUE width) {
62
+ nk_layout_row_template_push_static(nkrb_context_get(context), (float) NUM2DBL(width));
63
+ return Qnil;
64
+ }
65
+
66
+ VALUE nkrb_ui_layout_row_template_end(VALUE self, VALUE context) {
67
+ nk_layout_row_template_end(nkrb_context_get(context));
68
+ return Qnil;
69
+ }
70
+
71
+ VALUE nkrb_ui_layout_space_begin(VALUE self, VALUE context, VALUE format, VALUE height, VALUE widget_count) {
72
+ enum nk_layout_format fmt = NK_DYNAMIC;
73
+ if (SYM2ID(format) == rb_intern("static")) fmt = NK_STATIC;
74
+ nk_layout_space_begin(nkrb_context_get(context), fmt, (float) NUM2DBL(height), FIX2INT(widget_count));
75
+ return Qnil;
76
+ }
77
+
78
+ VALUE nkrb_ui_layout_space_push(VALUE self, VALUE context, VALUE rbounds) {
79
+ VALUE left = rb_hash_aref(rbounds, ID2SYM(rb_intern("left")));
80
+ VALUE top = rb_hash_aref(rbounds, ID2SYM(rb_intern("top")));
81
+ VALUE width = rb_hash_aref(rbounds, ID2SYM(rb_intern("width")));
82
+ VALUE height = rb_hash_aref(rbounds, ID2SYM(rb_intern("height")));
83
+ if (NIL_P(left)) rb_raise(rb_eArgError, ":left option is required");
84
+ if (NIL_P(top)) rb_raise(rb_eArgError, ":top option is required");
85
+ if (NIL_P(width)) rb_raise(rb_eArgError, ":width option is required");
86
+ if (NIL_P(height)) rb_raise(rb_eArgError, ":height option is required");
87
+ float x = (float) NUM2DBL(left);
88
+ float y = (float) NUM2DBL(top);
89
+ float w = (float) NUM2DBL(width);
90
+ float h = (float) NUM2DBL(height);
91
+ nk_layout_space_push(nkrb_context_get(context), nk_rect(x, y, w, h));
92
+ return Qnil;
93
+ }
94
+
95
+ VALUE nkrb_ui_layout_space_end(VALUE self, VALUE context) {
96
+ nk_layout_space_end(nkrb_context_get(context));
97
+ return Qnil;
98
+ }
99
+
100
+ VALUE nkrb_ui_layout_widget_bounds(VALUE self, VALUE context) {
101
+ struct nk_rect bounds = nk_layout_widget_bounds(nkrb_context_get(context));
102
+ VALUE ret = rb_hash_new();
103
+ rb_hash_aset(ret, ID2SYM(rb_intern("left")), bounds.x);
104
+ rb_hash_aset(ret, ID2SYM(rb_intern("top")), bounds.y);
105
+ rb_hash_aset(ret, ID2SYM(rb_intern("width")), bounds.w);
106
+ rb_hash_aset(ret, ID2SYM(rb_intern("height")), bounds.h);
107
+ return Qnil;
108
+ }
109
+
110
+ void nkrb_ui_layout_init(void) {
111
+ rb_define_method(mNuklearUIContainer, "ui_layout_row", nkrb_ui_layout_row, 4);
112
+ rb_define_method(mNuklearUIContainer, "ui_layout_row_dynamic", nkrb_ui_layout_row_dynamic, 3);
113
+ rb_define_method(mNuklearUIContainer, "ui_layout_row_static", nkrb_ui_layout_row_static, 4);
114
+ rb_define_method(mNuklearUIContainer, "ui_layout_row_begin", nkrb_ui_layout_row_begin, 4);
115
+ rb_define_method(mNuklearUIContainer, "ui_layout_row_push", nkrb_ui_layout_row_push, 2);
116
+ rb_define_method(mNuklearUIContainer, "ui_layout_row_template_begin", nkrb_ui_layout_row_template_begin, 2);
117
+ rb_define_method(mNuklearUIContainer, "ui_layout_row_template_dynamic", nkrb_ui_layout_row_template_push_dynamic, 1);
118
+ rb_define_method(mNuklearUIContainer, "ui_layout_row_template_variable", nkrb_ui_layout_row_template_push_variable, 2);
119
+ rb_define_method(mNuklearUIContainer, "ui_layout_row_template_static", nkrb_ui_layout_row_template_push_static, 2);
120
+ rb_define_method(mNuklearUIContainer, "ui_layout_row_template_end", nkrb_ui_layout_row_template_end, 1);
121
+ rb_define_method(mNuklearUIContainer, "ui_layout_space_begin", nkrb_ui_layout_space_begin, 4);
122
+ rb_define_method(mNuklearUIContainer, "ui_layout_space_push", nkrb_ui_layout_space_push, 2);
123
+ rb_define_method(mNuklearUIContainer, "ui_layout_space_end", nkrb_ui_layout_space_end, 1);
124
+ rb_define_method(mNuklearUIContainer, "ui_layout_widget_bounds", nkrb_ui_layout_widget_bounds, 1);
125
+ }
@@ -0,0 +1,49 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_menu(VALUE self, VALUE rcontext, VALUE roptions) {
4
+ struct nk_context *context = nkrb_context_get(rcontext);
5
+
6
+ VALUE rtitle = rb_hash_aref(roptions, ID2SYM(rb_intern("title")));
7
+ VALUE rimage = rb_hash_aref(roptions, ID2SYM(rb_intern("image")));
8
+ VALUE rsymbol = rb_hash_aref(roptions, ID2SYM(rb_intern("symbol")));
9
+ nk_flags align = FIX2INT(rb_hash_aref(roptions, ID2SYM(rb_intern("align"))));
10
+ float width = (float) NUM2DBL(rb_hash_aref(roptions, ID2SYM(rb_intern("width"))));
11
+ float height = (float) NUM2DBL(rb_hash_aref(roptions, ID2SYM(rb_intern("height"))));
12
+ struct nk_vec2 size = nk_vec2(width, height);
13
+ VALUE rid = rb_hash_aref(roptions, ID2SYM(rb_intern("id")));
14
+
15
+ enum nk_symbol_type symbol = NK_SYMBOL_NONE;
16
+ SET_RSYMBOL(symbol, rsymbol);
17
+
18
+ int result = 0;
19
+ if (!NIL_P(rimage)) {
20
+ struct nk_image img;
21
+ ASSIGN_STYLE_AS_IMAGE(img, nkrb_style_item(rimage))
22
+ if (!NIL_P(rtitle)) {
23
+ result = nk_menu_begin_image_text(context, RSTRING_PTR(rtitle), (int) RSTRING_LEN(rtitle), align, img, size);
24
+ } else {
25
+ rid = rb_funcall(rid, rb_intern("to_s"), 0);
26
+ result = nk_menu_begin_image(context, StringValueCStr(rid), img, size);
27
+ }
28
+ } else if (!NIL_P(rtitle)) {
29
+ result = nk_menu_begin_symbol_text(context, RSTRING_PTR(rtitle), (int) RSTRING_LEN(rtitle), align, symbol, size);
30
+ } else {
31
+ rid = rb_funcall(rid, rb_intern("to_s"), 0);
32
+ result = nk_menu_begin_symbol(context, StringValueCStr(rid), symbol, size);
33
+ }
34
+
35
+ if (result) {
36
+ if (rb_block_given_p()) {
37
+ rb_yield(Qtrue);
38
+ }
39
+ nk_menu_end(context);
40
+ } else {
41
+ return Qfalse;
42
+ }
43
+
44
+ return Qnil;
45
+ }
46
+
47
+ void nkrb_ui_menu_init(void) {
48
+ rb_define_method(mNuklearUIContainer, "ui_menu", nkrb_ui_menu, 2);
49
+ }
@@ -0,0 +1,30 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_menu_item(VALUE self, VALUE rcontext, VALUE roptions) {
4
+ struct nk_context *context = nkrb_context_get(rcontext);
5
+
6
+ VALUE rtitle = rb_funcall(rb_hash_aref(roptions, ID2SYM(rb_intern("title"))), rb_intern("to_s"), 0);
7
+ VALUE rimage = rb_hash_aref(roptions, ID2SYM(rb_intern("image")));
8
+ VALUE rsymbol = rb_hash_aref(roptions, ID2SYM(rb_intern("symbol")));
9
+ nk_flags align = FIX2INT(rb_hash_aref(roptions, ID2SYM(rb_intern("align"))));
10
+
11
+ enum nk_symbol_type symbol = NK_SYMBOL_NONE;
12
+ SET_RSYMBOL(symbol, rsymbol);
13
+
14
+ int result = 0;
15
+ if (!NIL_P(rimage)) {
16
+ struct nk_image img;
17
+ ASSIGN_STYLE_AS_IMAGE(img, nkrb_style_item(rimage))
18
+ result = nk_menu_item_image_text(context, img, RSTRING_PTR(rtitle), (int) RSTRING_LEN(rtitle), align);
19
+ } else if (!NIL_P(rsymbol)) {
20
+ result = nk_menu_item_symbol_text(context, symbol, RSTRING_PTR(rtitle), (int) RSTRING_LEN(rtitle), align);
21
+ } else {
22
+ result = nk_menu_item_text(context, RSTRING_PTR(rtitle), (int) RSTRING_LEN(rtitle), align);
23
+ }
24
+
25
+ return result ? ID2SYM(rb_intern("clicked")) : Qnil;
26
+ }
27
+
28
+ void nkrb_ui_menu_item_init(void) {
29
+ rb_define_method(mNuklearUIContainer, "ui_menu_item", nkrb_ui_menu_item, 2);
30
+ }
@@ -0,0 +1,18 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_menubar(VALUE self, VALUE rcontext) {
4
+ struct nk_context *context = nkrb_context_get(rcontext);
5
+
6
+ nk_menubar_begin(context);
7
+
8
+ if (rb_block_given_p()) {
9
+ rb_yield(Qtrue);
10
+ }
11
+
12
+ nk_menubar_end(context);
13
+ return Qnil;
14
+ }
15
+
16
+ void nkrb_ui_menubar_init(void) {
17
+ rb_define_method(mNuklearUIContainer, "ui_menubar", nkrb_ui_menubar, 1);
18
+ }
@@ -0,0 +1,24 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_popup(VALUE self, VALUE context, VALUE rtype, VALUE rtitle, VALUE rflags, VALUE left, VALUE top, VALUE width, VALUE height) {
4
+ struct nk_context *ctx = nkrb_context_get(context);
5
+ const char *title = StringValueCStr(rtitle);
6
+ int type = FIX2INT(rtype);
7
+ int flags = FIX2INT(rflags);
8
+ float x = (float) NUM2DBL(left);
9
+ float y = (float) NUM2DBL(top);
10
+ float w = (float) NUM2DBL(width);
11
+ float h = (float) NUM2DBL(height);
12
+ if (nk_popup_begin(ctx, type, title, flags, nk_rect(x, y, w, h))) {
13
+ if (rb_block_given_p()) {
14
+ instance_eval_block(ID2SYM(rb_intern("visible")));
15
+ }
16
+ nk_popup_end(ctx);
17
+ return Qnil;
18
+ }
19
+ return ID2SYM(rb_intern("hidden"));
20
+ }
21
+
22
+ void nkrb_ui_popup_init(void) {
23
+ rb_define_method(mNuklearUIContainer, "ui_popup", nkrb_ui_popup, 8);
24
+ }
@@ -0,0 +1,19 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_progress(VALUE self, VALUE context, VALUE rcurrent, VALUE rmax, VALUE rmodifiable) {
4
+ struct nk_context *ctx = nkrb_context_get(context);
5
+ nk_size current = (nk_size) NUM2LL(rcurrent);
6
+ nk_size max = (nk_size) NUM2LL(rmax);
7
+ int modifiable = nk_false;
8
+ if (RTEST(rmodifiable)) modifiable = nk_true;
9
+
10
+ if (nk_progress(ctx, &current, max, modifiable)) {
11
+ return LL2NUM(current);
12
+ }
13
+
14
+ return Qnil;
15
+ }
16
+
17
+ void nkrb_ui_progress_init(void) {
18
+ rb_define_method(mNuklearUIContainer, "ui_progress", nkrb_ui_progress, 4);
19
+ }
@@ -0,0 +1,20 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_property(VALUE self, VALUE context, VALUE rid, VALUE rmin, VALUE rcurrent, VALUE rmax, VALUE rstep, VALUE rinc_per_pixel) {
4
+ struct nk_context *ctx = nkrb_context_get(context);
5
+ float min = (float) NUM2DBL(rmin);
6
+ float current = (float) NUM2DBL(rcurrent);
7
+ float max = (float) NUM2DBL(rmax);
8
+ float step = (float) NUM2DBL(rstep);
9
+ float inc_pp = (float) NUM2DBL(rinc_per_pixel);
10
+ float prev = current;
11
+ rid = rb_funcall(rid, rb_intern("to_s"), 0);
12
+
13
+ nk_property_float(ctx, StringValueCStr(rid), min, &current, max, step, inc_pp);
14
+ if (current != prev) return DBL2NUM(current);
15
+ return Qnil;
16
+ }
17
+
18
+ void nkrb_ui_property_init(void) {
19
+ rb_define_method(mNuklearUIContainer, "ui_property", nkrb_ui_property, 7);
20
+ }
@@ -0,0 +1,53 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_checkbox(VALUE self, VALUE rcontext, VALUE rtext, VALUE ris_checked) {
4
+ struct nk_context *context = nkrb_context_get(rcontext);
5
+ const char *text = StringValueCStr(rtext);
6
+ int is_checked = RTEST(ris_checked) ? 1 : 0;
7
+ if (nk_checkbox_label(context, text, &is_checked)) {
8
+ return is_checked ? Qtrue : Qfalse;
9
+ }
10
+ return Qnil;
11
+ }
12
+
13
+ VALUE nkrb_ui_option(VALUE self, VALUE rcontext, VALUE rtext, VALUE ris_checked) {
14
+ struct nk_context *context = nkrb_context_get(rcontext);
15
+ const char *text = StringValueCStr(rtext);
16
+ int is_checked = RTEST(ris_checked) ? 1 : 0;
17
+ if (nk_option_label(context, text, is_checked)) {
18
+ return Qtrue;
19
+ } else {
20
+ return Qfalse;
21
+ }
22
+ }
23
+
24
+ VALUE nkrb_ui_selectable(VALUE self, VALUE rcontext, VALUE rimage, VALUE rtext, VALUE rselected, VALUE ralign) {
25
+ struct nk_context *context = nkrb_context_get(rcontext);
26
+ int align = FIX2INT(ralign);
27
+ int selected = RTEST(rselected) ? 1 : 0;
28
+ int result;
29
+ if (NIL_P(rtext)) return Qnil;
30
+
31
+ const char *text = StringValuePtr(rtext);
32
+ int len = (int) RSTRING_LEN(rtext);
33
+
34
+ if (NIL_P(rimage))
35
+ result = nk_selectable_text(context, text, len, align, &selected);
36
+ else {
37
+ struct nk_image img;
38
+ ASSIGN_STYLE_AS_IMAGE(img, nkrb_style_item(rimage))
39
+ result = nk_selectable_image_text(context, img, text, len, align, &selected);
40
+ }
41
+
42
+ if (result) {
43
+ return selected ? Qtrue : Qfalse;
44
+ }
45
+
46
+ return Qnil;
47
+ }
48
+
49
+ void nkrb_ui_checkbox_init(void) {
50
+ rb_define_method(mNuklearUIContainer, "ui_checkbox", nkrb_ui_checkbox, 3);
51
+ rb_define_method(mNuklearUIContainer, "ui_option", nkrb_ui_option, 3);
52
+ rb_define_method(mNuklearUIContainer, "ui_selectable", nkrb_ui_selectable, 5);
53
+ }
@@ -0,0 +1,19 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_slider(VALUE self, VALUE context, VALUE rcurrent, VALUE rmin, VALUE rmax, VALUE rstep) {
4
+ struct nk_context *ctx = nkrb_context_get(context);
5
+ float current = (float) NUM2DBL(rcurrent);
6
+ float minimum = (float) NUM2DBL(rmin);
7
+ float maximum = (float) NUM2DBL(rmax);
8
+ float step = (float) NUM2DBL(rstep);
9
+
10
+ if (nk_slider_float(ctx, minimum, &current, maximum, step)) {
11
+ return DBL2NUM(current);
12
+ }
13
+
14
+ return Qnil;
15
+ }
16
+
17
+ void nkrb_ui_slider_init(void) {
18
+ rb_define_method(mNuklearUIContainer, "ui_slider", nkrb_ui_slider, 5);
19
+ }
@@ -0,0 +1,29 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_tree(VALUE self, VALUE rcontext, VALUE rtree_type, VALUE rimage, VALUE rtitle, VALUE rcurrent_state) {
4
+ struct nk_context *context = nkrb_context_get(rcontext);
5
+ enum nk_tree_type tree_type = FIX2INT(rtree_type);
6
+ enum nk_collapse_states current_state = FIX2INT(rcurrent_state);
7
+ const char *title = StringValueCStr(rtitle);
8
+ int result;
9
+ if (!NIL_P(rimage)) {
10
+ struct nk_image image;
11
+ ASSIGN_STYLE_AS_IMAGE(image, nkrb_style_item(rimage));
12
+ result = nk_tree_state_image_push(context, tree_type, image, title, &current_state);
13
+ } else {
14
+ result = nk_tree_state_push(context, tree_type, title, &current_state);
15
+ }
16
+
17
+ if (rb_block_given_p()) {
18
+ rb_yield(INT2FIX(current_state));
19
+ }
20
+
21
+ if (result)
22
+ nk_tree_state_pop(context);
23
+
24
+ return Qnil;
25
+ }
26
+
27
+ void nkrb_ui_tree_init(void) {
28
+ rb_define_method(mNuklearUIContainer, "ui_tree", nkrb_ui_tree, 5);
29
+ }
@@ -0,0 +1,7 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE cNuklearUIWidget = Qnil;
4
+
5
+ void nkrb_ui_widget_init(void) {
6
+ cNuklearUIWidget = rb_define_class_under(mNuklearUI, "Widget", rb_cObject);
7
+ }
@@ -0,0 +1,43 @@
1
+ #include "nkrb.h"
2
+
3
+ VALUE nkrb_ui_window(VALUE self, VALUE context, VALUE rid, VALUE rtitle, VALUE rflags, VALUE left, VALUE top, VALUE width, VALUE height) {
4
+ struct nk_context *ctx = nkrb_context_get(context);
5
+ const char *id = StringValueCStr(rid);
6
+ const char *title = StringValueCStr(rtitle);
7
+ int flags = FIX2INT(rflags);
8
+ float x = (float) NUM2DBL(left);
9
+ float y = (float) NUM2DBL(top);
10
+ float w = (float) NUM2DBL(width);
11
+ float h = (float) NUM2DBL(height);
12
+ if (nk_begin_titled(ctx, id, title, nk_rect(x, y, w, h), flags)) {
13
+ VALUE result = rb_ary_new();
14
+ struct nk_rect bounds = nk_window_get_bounds(ctx);
15
+ struct nk_rect content_region = nk_window_get_content_region(ctx);
16
+ rb_ary_push(result, DBL2NUM(bounds.x));
17
+ rb_ary_push(result, DBL2NUM(bounds.y));
18
+ rb_ary_push(result, DBL2NUM(bounds.w));
19
+ rb_ary_push(result, DBL2NUM(bounds.h));
20
+ rb_ary_push(result, DBL2NUM(content_region.x));
21
+ rb_ary_push(result, DBL2NUM(content_region.y));
22
+ rb_ary_push(result, DBL2NUM(content_region.w));
23
+ rb_ary_push(result, DBL2NUM(content_region.h));
24
+
25
+ if (rb_block_given_p()) {
26
+ rb_yield(result);
27
+ }
28
+ }
29
+ nk_end(ctx);
30
+ return Qnil;
31
+ }
32
+
33
+ VALUE nkrb_ui_window_close(VALUE self, VALUE context, VALUE rid) {
34
+ struct nk_context *ctx = nkrb_context_get(context);
35
+ const char *id = StringValueCStr(rid);
36
+ nk_window_close(ctx, id);
37
+ return Qnil;
38
+ }
39
+
40
+ void nkrb_ui_window_init(void) {
41
+ rb_define_method(mNuklearUIContainer, "ui_window", nkrb_ui_window, 8);
42
+ rb_define_method(mNuklearUIContainer, "ui_window_close", nkrb_ui_window_close, 2);
43
+ }