Module: Nuklear::UI::Container
- Included in:
- Context, Col, ComboBox, Group, Menu, MenuBar, MenuItem, OptionGroup, Row, SelectList, Tree, Window
- Defined in:
- lib/nuklear/ui/container.rb,
ext/nuklear/nkrb_ui_container.c
Defined Under Namespace
Classes: LayoutRowDynamic
Instance Method Summary collapse
- #<<(other) ⇒ Object
- #commands ⇒ Object
-
#find(&block) ⇒ Object
Traverses this container and any of its sub-containers, yielding each item to the block.
- #layout_row_dynamic(height, ncols) ⇒ Object
- #method_missing(name, *args) ⇒ Object
- #run_command(context, command) ⇒ Object
- #run_commands(context) ⇒ Object
-
#traverse {|_self| ... } ⇒ Object
Iterates over every item in this container, and yields each item (starting with the container itself) to the block.
- #ui_checkbox(rcontext, rtext, ris_checked) ⇒ Object
- #ui_color_picker(rcontext, rcolor, rtype) ⇒ Object
- #ui_combo(rcontext, rselected_index, rchoices, ritem_height, rwidth, rheight) ⇒ Object
- #ui_edit_focus(context, rflags) ⇒ Object
- #ui_edit_string(context, rflags, rbuffer, max_length, rfilter) ⇒ Object
- #ui_layout_row_begin(context, format, row_height, ncols) ⇒ Object
- #ui_layout_row_dynamic(context, height, ncols) ⇒ Object
- #ui_layout_row_push(context, value) ⇒ Object
- #ui_layout_row_static(context, height, col_width, ncols) ⇒ Object
- #ui_layout_row_template_begin(context, height) ⇒ Object
- #ui_layout_row_template_dynamic(context) ⇒ Object
- #ui_layout_row_template_end(context) ⇒ Object
- #ui_layout_row_template_static(context, width) ⇒ Object
- #ui_layout_row_template_variable(context, min_width) ⇒ Object
- #ui_layout_space_begin(context, format, height, widget_count) ⇒ Object
- #ui_layout_space_end(context) ⇒ Object
- #ui_layout_space_push(context, rbounds) ⇒ Object
- #ui_layout_widget_bounds(context) ⇒ Object
- #ui_menu_item(rcontext, roptions) ⇒ Object
- #ui_option(rcontext, rtext, ris_checked) ⇒ Object
- #ui_selectable(rcontext, rimage, rtext, rselected, ralign) ⇒ Object
- #ui_window_close(context, rid) ⇒ Object
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
71 72 73 74 75 76 77 |
# File 'lib/nuklear/ui/container.rb', line 71 def method_missing(name, *args) if respond_to?(:"ui_#{name}") commands << [:"ui_#{name}", *args] else super end end |
Instance Method Details
#<<(other) ⇒ Object
34 35 36 |
# File 'lib/nuklear/ui/container.rb', line 34 def <<(other) commands << other end |
#commands ⇒ Object
4 5 6 |
# File 'lib/nuklear/ui/container.rb', line 4 def commands @commands ||= [] end |
#find(&block) ⇒ Object
Traverses this container and any of its sub-containers, yielding each item to the block. Returns each item for which the block returned true.
53 54 55 56 57 58 59 |
# File 'lib/nuklear/ui/container.rb', line 53 def find(&block) matches = [] traverse do |item| matches << item if yield(item) end return matches end |
#layout_row_dynamic(height, ncols) ⇒ Object
67 68 69 |
# File 'lib/nuklear/ui/container.rb', line 67 def layout_row_dynamic(height, ncols) LayoutRowDynamic.new(height, ncols).tap { |row| commands << row } end |
#run_command(context, command) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/nuklear/ui/container.rb', line 8 def run_command(context, command) if command.respond_to?(:to_command) if !command.respond_to?(:enabled?) || command.enabled? cmd = command.to_command result = send(cmd[0], context, *cmd[1..-1]) do |ret| command.result(ret, context) if command.respond_to?(:result) end command.result(result, context) if !result.nil? && command.respond_to?(:result) end elsif command.respond_to?(:[]) send(command[0], context, *command[1..-1]) else raise "Unexpected command #{command.inspect}" end end |
#run_commands(context) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/nuklear/ui/container.rb', line 24 def run_commands(context) commands.each do |command| if command.respond_to?(:to_commands) command.to_commands.each { |cmd| run_command(context, cmd) } else run_command(context, command) end end end |
#traverse {|_self| ... } ⇒ Object
Iterates over every item in this container, and yields each item (starting with the container itself) to the block.
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/nuklear/ui/container.rb', line 40 def traverse(&block) yield self commands.each do |item| if item.respond_to?(:traverse) item.traverse(&block) else yield item end end end |
#ui_checkbox(rcontext, rtext, ris_checked) ⇒ Object
3 4 5 6 7 8 9 10 11 |
# File 'ext/nuklear/nkrb_ui_selectables.c', line 3 VALUE nkrb_ui_checkbox(VALUE self, VALUE rcontext, VALUE rtext, VALUE ris_checked) { struct nk_context *context = nkrb_context_get(rcontext); const char *text = StringValueCStr(rtext); int is_checked = RTEST(ris_checked) ? 1 : 0; if (nk_checkbox_label(context, text, &is_checked)) { return is_checked ? Qtrue : Qfalse; } return Qnil; } |
#ui_color_picker(rcontext, rcolor, rtype) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'ext/nuklear/nkrb_ui_color_picker.c', line 3 VALUE nkrb_ui_color_picker(VALUE self, VALUE rcontext, VALUE rcolor, VALUE rtype) { struct nk_context *ctx = nkrb_context_get(rcontext); enum nk_color_format type = (SYM2ID(rtype) == rb_intern("rgb")) ? NK_RGB : NK_RGBA; struct nk_style_item *style = nkrb_style_item(rcolor); struct nk_color color; ASSIGN_STYLE_AS_COLOR(color, style); if (nk_color_pick(ctx, &color, type)) { style->data.color = color; return rcolor; } return Qnil; } |
#ui_combo(rcontext, rselected_index, rchoices, ritem_height, rwidth, rheight) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'ext/nuklear/nkrb_ui_combo.c', line 3 VALUE nkrb_ui_combo(VALUE self, VALUE rcontext, VALUE rselected_index, VALUE rchoices, VALUE ritem_height, VALUE rwidth, VALUE rheight) { struct nk_context *context = nkrb_context_get(rcontext); float width = (float) NUM2DBL(rwidth); float height = (float) NUM2DBL(rheight); int item_height = FIX2INT(ritem_height); int len = (int) RARRAY_LEN(rchoices); int selected_index = FIX2INT(rselected_index); int i; const char **choices = malloc(len * sizeof(const char *)); for (i = 0; i < len; i++) { VALUE str = rb_funcall(rb_ary_entry(rchoices, i), rb_intern("to_s"), 0); choices[i] = StringValueCStr(str); } int result = nk_combo(context, choices, len, selected_index, item_height, nk_vec2(width, height)); free(choices); return INT2FIX(result); } |
#ui_edit_focus(context, rflags) ⇒ Object
30 31 32 33 |
# File 'ext/nuklear/nkrb_ui_edit_string.c', line 30 VALUE nkrb_ui_edit_focus(VALUE self, VALUE context, VALUE rflags) { nk_edit_focus(nkrb_context_get(context), FIX2INT(rflags)); return Qnil; } |
#ui_edit_string(context, rflags, rbuffer, max_length, rfilter) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'ext/nuklear/nkrb_ui_edit_string.c', line 3 VALUE nkrb_ui_edit_string(VALUE self, VALUE context, VALUE rflags, VALUE rbuffer, VALUE max_length, VALUE rfilter) { Check_Type(rbuffer, T_STRING); rfilter = rb_funcall(rfilter, rb_intern("to_s"), 0); int buffer_size = FIX2INT(max_length) + 1; char *buffer = malloc(buffer_size); memset(buffer, 0, buffer_size); char *ptr = RSTRING_PTR(rbuffer); int rbuffer_len = (int) RSTRING_LEN(rbuffer); if (rbuffer_len > buffer_size - 1) rbuffer_len = buffer_size - 1; memcpy(buffer, ptr, rbuffer_len); nk_plugin_filter filter = nk_filter_default; if (!strcmp(StringValueCStr(rfilter), "ascii")) filter = nk_filter_ascii; if (!strcmp(StringValueCStr(rfilter), "float")) filter = nk_filter_float; if (!strcmp(StringValueCStr(rfilter), "decimal")) filter = nk_filter_decimal; if (!strcmp(StringValueCStr(rfilter), "hex")) filter = nk_filter_hex; if (!strcmp(StringValueCStr(rfilter), "octal")) filter = nk_filter_oct; if (!strcmp(StringValueCStr(rfilter), "binary")) filter = nk_filter_binary; int start_len = rbuffer_len; nk_flags result = nk_edit_string(nkrb_context_get(context), FIX2INT(rflags), buffer, &rbuffer_len, buffer_size - 1, filter); if (rbuffer_len != start_len || memcmp(buffer, ptr, rbuffer_len)) { rb_funcall(rbuffer, rb_intern("clear"), 0); rb_str_cat(rbuffer, buffer, rbuffer_len); } free(buffer); return INT2FIX(result); } |
#ui_layout_row_begin(context, format, row_height, ncols) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 29 VALUE nkrb_ui_layout_row_begin(VALUE self, VALUE context, VALUE format, VALUE row_height, VALUE ncols) { struct nk_context *ctx = nkrb_context_get(context); enum nk_layout_format fmt = NK_DYNAMIC; if (SYM2ID(format) == rb_intern("static")) fmt = NK_STATIC; nk_layout_row_begin(ctx, fmt, (float) NUM2DBL(row_height), FIX2INT(ncols)); if (rb_block_given_p()) { instance_eval_block(Qtrue); } nk_layout_row_end(ctx); return Qnil; } |
#ui_layout_row_dynamic(context, height, ncols) ⇒ Object
19 20 21 22 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 19 VALUE nkrb_ui_layout_row_dynamic(VALUE self, VALUE context, VALUE height, VALUE ncols) { nk_layout_row_dynamic(nkrb_context_get(context), (float) NUM2DBL(height), FIX2INT(ncols)); return Qtrue; } |
#ui_layout_row_push(context, value) ⇒ Object
41 42 43 44 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 41 VALUE nkrb_ui_layout_row_push(VALUE self, VALUE context, VALUE value) { nk_layout_row_push(nkrb_context_get(context), (float) NUM2DBL(value)); return Qtrue; } |
#ui_layout_row_static(context, height, col_width, ncols) ⇒ Object
24 25 26 27 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 24 VALUE nkrb_ui_layout_row_static(VALUE self, VALUE context, VALUE height, VALUE col_width, VALUE ncols) { nk_layout_row_static(nkrb_context_get(context), (float) NUM2DBL(height), FIX2INT(col_width), FIX2INT(ncols)); return Qtrue; } |
#ui_layout_row_template_begin(context, height) ⇒ Object
46 47 48 49 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 46 VALUE nkrb_ui_layout_row_template_begin(VALUE self, VALUE context, VALUE height) { nk_layout_row_template_begin(nkrb_context_get(context), (float) NUM2DBL(height)); return Qnil; } |
#ui_layout_row_template_dynamic(context) ⇒ Object
51 52 53 54 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 51 VALUE nkrb_ui_layout_row_template_push_dynamic(VALUE self, VALUE context) { nk_layout_row_template_push_dynamic(nkrb_context_get(context)); return Qnil; } |
#ui_layout_row_template_end(context) ⇒ Object
66 67 68 69 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 66 VALUE nkrb_ui_layout_row_template_end(VALUE self, VALUE context) { nk_layout_row_template_end(nkrb_context_get(context)); return Qnil; } |
#ui_layout_row_template_static(context, width) ⇒ Object
61 62 63 64 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 61 VALUE nkrb_ui_layout_row_template_push_static(VALUE self, VALUE context, VALUE width) { nk_layout_row_template_push_static(nkrb_context_get(context), (float) NUM2DBL(width)); return Qnil; } |
#ui_layout_row_template_variable(context, min_width) ⇒ Object
56 57 58 59 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 56 VALUE nkrb_ui_layout_row_template_push_variable(VALUE self, VALUE context, VALUE min_width) { nk_layout_row_template_push_variable(nkrb_context_get(context), (float) NUM2DBL(min_width)); return Qnil; } |
#ui_layout_space_begin(context, format, height, widget_count) ⇒ Object
71 72 73 74 75 76 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 71 VALUE nkrb_ui_layout_space_begin(VALUE self, VALUE context, VALUE format, VALUE height, VALUE ) { enum nk_layout_format fmt = NK_DYNAMIC; if (SYM2ID(format) == rb_intern("static")) fmt = NK_STATIC; nk_layout_space_begin(nkrb_context_get(context), fmt, (float) NUM2DBL(height), FIX2INT()); return Qnil; } |
#ui_layout_space_end(context) ⇒ Object
95 96 97 98 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 95 VALUE nkrb_ui_layout_space_end(VALUE self, VALUE context) { nk_layout_space_end(nkrb_context_get(context)); return Qnil; } |
#ui_layout_space_push(context, rbounds) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 78 VALUE nkrb_ui_layout_space_push(VALUE self, VALUE context, VALUE rbounds) { VALUE left = rb_hash_aref(rbounds, ID2SYM(rb_intern("left"))); VALUE top = rb_hash_aref(rbounds, ID2SYM(rb_intern("top"))); VALUE width = rb_hash_aref(rbounds, ID2SYM(rb_intern("width"))); VALUE height = rb_hash_aref(rbounds, ID2SYM(rb_intern("height"))); if (NIL_P(left)) rb_raise(rb_eArgError, ":left option is required"); if (NIL_P(top)) rb_raise(rb_eArgError, ":top option is required"); if (NIL_P(width)) rb_raise(rb_eArgError, ":width option is required"); if (NIL_P(height)) rb_raise(rb_eArgError, ":height option is required"); float x = (float) NUM2DBL(left); float y = (float) NUM2DBL(top); float w = (float) NUM2DBL(width); float h = (float) NUM2DBL(height); nk_layout_space_push(nkrb_context_get(context), nk_rect(x, y, w, h)); return Qnil; } |
#ui_layout_widget_bounds(context) ⇒ Object
100 101 102 103 104 105 106 107 108 |
# File 'ext/nuklear/nkrb_ui_layout.c', line 100 VALUE (VALUE self, VALUE context) { struct nk_rect bounds = (nkrb_context_get(context)); VALUE ret = rb_hash_new(); rb_hash_aset(ret, ID2SYM(rb_intern("left")), bounds.x); rb_hash_aset(ret, ID2SYM(rb_intern("top")), bounds.y); rb_hash_aset(ret, ID2SYM(rb_intern("width")), bounds.w); rb_hash_aset(ret, ID2SYM(rb_intern("height")), bounds.h); return Qnil; } |
#ui_menu_item(rcontext, roptions) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'ext/nuklear/nkrb_ui_menu_item.c', line 3 VALUE (VALUE self, VALUE rcontext, VALUE ) { struct nk_context *context = nkrb_context_get(rcontext); VALUE rtitle = rb_funcall(rb_hash_aref(, ID2SYM(rb_intern("title"))), rb_intern("to_s"), 0); VALUE rimage = rb_hash_aref(, ID2SYM(rb_intern("image"))); VALUE rsymbol = rb_hash_aref(, ID2SYM(rb_intern("symbol"))); nk_flags align = FIX2INT(rb_hash_aref(, ID2SYM(rb_intern("align")))); enum nk_symbol_type symbol = NK_SYMBOL_NONE; SET_RSYMBOL(symbol, rsymbol); int result = 0; if (!NIL_P(rimage)) { struct nk_image img; ASSIGN_STYLE_AS_IMAGE(img, nkrb_style_item(rimage)) result = (context, img, RSTRING_PTR(rtitle), (int) RSTRING_LEN(rtitle), align); } else if (!NIL_P(rsymbol)) { result = (context, symbol, RSTRING_PTR(rtitle), (int) RSTRING_LEN(rtitle), align); } else { result = (context, RSTRING_PTR(rtitle), (int) RSTRING_LEN(rtitle), align); } return result ? ID2SYM(rb_intern("clicked")) : Qnil; } |
#ui_option(rcontext, rtext, ris_checked) ⇒ Object
13 14 15 16 17 18 19 20 21 22 |
# File 'ext/nuklear/nkrb_ui_selectables.c', line 13 VALUE nkrb_ui_option(VALUE self, VALUE rcontext, VALUE rtext, VALUE ris_checked) { struct nk_context *context = nkrb_context_get(rcontext); const char *text = StringValueCStr(rtext); int is_checked = RTEST(ris_checked) ? 1 : 0; if (nk_option_label(context, text, is_checked)) { return Qtrue; } else { return Qfalse; } } |
#ui_selectable(rcontext, rimage, rtext, rselected, ralign) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'ext/nuklear/nkrb_ui_selectables.c', line 24 VALUE nkrb_ui_selectable(VALUE self, VALUE rcontext, VALUE rimage, VALUE rtext, VALUE rselected, VALUE ralign) { struct nk_context *context = nkrb_context_get(rcontext); int align = FIX2INT(ralign); int selected = RTEST(rselected) ? 1 : 0; int result; if (NIL_P(rtext)) return Qnil; const char *text = StringValuePtr(rtext); int len = (int) RSTRING_LEN(rtext); if (NIL_P(rimage)) result = nk_selectable_text(context, text, len, align, &selected); else { struct nk_image img; ASSIGN_STYLE_AS_IMAGE(img, nkrb_style_item(rimage)) result = nk_selectable_image_text(context, img, text, len, align, &selected); } if (result) { return selected ? Qtrue : Qfalse; } return Qnil; } |
#ui_window_close(context, rid) ⇒ Object
33 34 35 36 37 38 |
# File 'ext/nuklear/nkrb_ui_window.c', line 33 VALUE nkrb_ui_window_close(VALUE self, VALUE context, VALUE rid) { struct nk_context *ctx = nkrb_context_get(context); const char *id = StringValueCStr(rid); nk_window_close(ctx, id); return Qnil; } |