tr_graph.c 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #include "eruta.h"
  2. #include "toruby.h"
  3. #include "rh.h"
  4. #include "state.h"
  5. #include "image.h"
  6. #include "fifi.h"
  7. #include "store.h"
  8. #include "scegra.h"
  9. #include "sound.h"
  10. #include <mruby/hash.h>
  11. #include <mruby/class.h>
  12. #include <mruby/data.h>
  13. #include <mruby/array.h>
  14. #include "tr_macro.h"
  15. #include "tr_graph.h"
  16. TORUBY_0_ICALLER(tr_scegra_nodes_max, scegra_nodes_max)
  17. SCEGRA_ICALLER(tr_scegra_z, scegra_z)
  18. SCEGRA_ICALLER(tr_scegra_disable_node, scegra_disable_node)
  19. SCEGRA_ICALLER(tr_scegra_get_id, scegra_get_id)
  20. SCEGRA_ICALLER(tr_scegra_out_of_bounds, scegra_out_of_bounds)
  21. SCEGRA_ISETTER(tr_scegra_z_, scegra_z_)
  22. SCEGRA_ISETTER(tr_scegra_visible_, scegra_visible_)
  23. SCEGRA_ISETTER(tr_scegra_image_id_, scegra_image_id_)
  24. SCEGRA_ISETTER(tr_scegra_font_id_, scegra_font_id_)
  25. SCEGRA_ISETTER(tr_scegra_background_image_id_, scegra_background_image_id_)
  26. SCEGRA_ISETTER(tr_scegra_border_thickness_, scegra_border_thickness_)
  27. SCEGRA_ISETTER(tr_scegra_margin_, scegra_margin_)
  28. SCEGRA_PSETTER(tr_scegra_speed_, scegra_speed_)
  29. SCEGRA_PSETTER(tr_scegra_size_ , scegra_size_)
  30. SCEGRA_PSETTER(tr_scegra_position_, scegra_position_)
  31. SCEGRA_CSETTER(tr_scegra_background_color_, scegra_background_color_)
  32. SCEGRA_CSETTER(tr_scegra_border_color_, scegra_border_color_)
  33. SCEGRA_CSETTER(tr_scegra_color_, scegra_color_)
  34. SCEGRA_FSETTER(tr_scegra_angle_, scegra_angle_)
  35. static mrb_value tr_scegra_make_box(mrb_state * mrb, mrb_value self) {
  36. mrb_int id = -1, sindex = -1;
  37. mrb_int x = 0, y = 0;
  38. mrb_int w = 32, h = 32;
  39. mrb_int rx = 4, ry = 4;
  40. (void) self;
  41. mrb_get_args(mrb, "iiiiiiii", &id, &x, &y, &w, &h, &rx, &ry, &sindex);
  42. return mrb_fixnum_value(scegra_make_box_style_from(id, bevec(x, y), bevec(w, h), bevec(rx, ry), sindex));
  43. }
  44. static mrb_value tr_scegra_make_text(mrb_state * mrb, mrb_value self) {
  45. char * str = NULL;
  46. mrb_int id = -1, size = 0, sindex = -1;
  47. mrb_int x = 0, y = 0;
  48. mrb_int w = 64, h = 32;
  49. (void) self;
  50. mrb_get_args(mrb, "iiiiisi", &id, &x, &y, &w, &h, &str, &size, &sindex);
  51. return mrb_fixnum_value(scegra_make_text_style_from(id, bevec(x, y), bevec(w, h), str, sindex));
  52. }
  53. static mrb_value tr_scegra_make_longtext(mrb_state * mrb, mrb_value self) {
  54. char * str = NULL;
  55. mrb_int id = -1, size = 0, sindex = -1;
  56. mrb_int x = 0, y = 0;
  57. mrb_int w = 64, h = 32;
  58. (void) self;
  59. mrb_get_args(mrb, "iiiiisi", &id, &x, &y, &w, &h, &str, &size, &sindex);
  60. return mrb_fixnum_value(scegra_make_longtext_style_from(id, bevec(x, y), bevec(w, h), str, sindex));
  61. }
  62. static mrb_value tr_scegra_make_image(mrb_state * mrb, mrb_value self) {
  63. char * str = NULL;
  64. mrb_int id = -1, image_id = -1, sindex = -1;
  65. mrb_int x = 0, y = 0;
  66. mrb_int w = 0, h = 0;
  67. (void) self;
  68. mrb_get_args(mrb, "iiiiiii", &id, &x, &y, &w, &h, &image_id, &sindex);
  69. return mrb_fixnum_value(scegra_make_image_style_from(id, bevec(x, y), bevec(w, h), image_id, sindex));
  70. }
  71. TR_WRAP_II_INT(tr_scegra_image_flags_ , scegra_image_flags_)
  72. TR_WRAP_II_INT(tr_scegra_text_flags_ , scegra_text_flags_)
  73. TR_WRAP_IZ_INT(tr_scegra_text_ , scegra_text_)
  74. SCEGRA_ISETTER(tr_scegra_line_stop_ , scegra_line_stop_)
  75. SCEGRA_ISETTER(tr_scegra_line_start_ , scegra_line_start_)
  76. SCEGRA_FSETTER(tr_scegra_delay_ , scegra_delay_)
  77. SCEGRA_ICALLER(tr_scegra_line_stop , scegra_line_stop)
  78. SCEGRA_ICALLER(tr_scegra_line_start , scegra_line_start)
  79. SCEGRA_FCALLER(tr_scegra_delay , scegra_delay)
  80. TR_PAIR_DO(SCEGRA_ISETTER, scegra_page_lines_)
  81. TR_PAIR_DO(SCEGRA_ICALLER, scegra_page_lines)
  82. TR_PAIR_DO(SCEGRA_BSETTER, scegra_paused_)
  83. TR_PAIR_DO(SCEGRA_BCALLER, scegra_paused)
  84. TR_PAIR_DO(SCEGRA_BCALLER, scegra_at_end)
  85. TR_PAIR_DO(SCEGRA_ISETTER, scegra_page_)
  86. TR_PAIR_DO(SCEGRA_ICALLER, scegra_page)
  87. TR_PAIR_DO(SCEGRA_ICALLER, scegra_last_page)
  88. TR_PAIR_DO(TR_WRAP_I_INT, scegra_next_page)
  89. TR_PAIR_DO(TR_WRAP_I_INT, scegra_previous_page)
  90. /** Initialize mruby bindings to 2D scene graph functionality.
  91. * Eru is the parent module, which is normally named "Eruta" on the
  92. * ruby side. */
  93. int tr_graph_init(mrb_state * mrb, struct RClass * eru) {
  94. struct RClass * gra;
  95. /* graph class/module and class/module methods. */
  96. gra = mrb_define_class_under(mrb, eru, "Graph" , mrb->object_class);
  97. TR_CLASS_METHOD_ARGC(mrb, gra, "nodes_max" , tr_scegra_nodes_max, 0);
  98. TR_CLASS_METHOD_ARGC(mrb, gra, "z" , tr_scegra_z, 1);
  99. TR_CLASS_METHOD_ARGC(mrb, gra, "disable" , tr_scegra_disable_node, 1);
  100. TR_CLASS_METHOD_ARGC(mrb, gra, "id" , tr_scegra_get_id, 1);
  101. TR_CLASS_METHOD_ARGC(mrb, gra, "out_of_bounds?" , tr_scegra_out_of_bounds, 1);
  102. TR_CLASS_METHOD_ARGC(mrb, gra, "z_" , tr_scegra_z_, 2);
  103. TR_CLASS_METHOD_ARGC(mrb, gra, "visible_" , tr_scegra_visible_, 2);
  104. TR_CLASS_METHOD_ARGC(mrb, gra, "image_" , tr_scegra_image_id_, 2);
  105. TR_CLASS_METHOD_ARGC(mrb, gra, "font_" , tr_scegra_font_id_, 2);
  106. TR_CLASS_METHOD_ARGC(mrb, gra, "background_image_", tr_scegra_background_image_id_, 2);
  107. TR_CLASS_METHOD_ARGC(mrb, gra, "border_thickness_", tr_scegra_border_thickness_, 2);
  108. TR_CLASS_METHOD_ARGC(mrb, gra, "margin_" , tr_scegra_margin_, 2);
  109. /*TR_CLASS_METHOD_ARGC(mrb, gra, "speed" , tr_scegra_speed, 1);*/
  110. TR_CLASS_METHOD_ARGC(mrb, gra, "size_" , tr_scegra_size_, 3);
  111. TR_CLASS_METHOD_ARGC(mrb, gra, "position_" , tr_scegra_position_, 3);
  112. TR_CLASS_METHOD_ARGC(mrb, gra, "speed_" , tr_scegra_speed_, 3);
  113. TR_CLASS_METHOD_ARGC(mrb, gra, "text_" , tr_scegra_text_, 2);
  114. TR_CLASS_METHOD_ARGC(mrb, gra, "image_flags_" , tr_scegra_image_flags_, 2);
  115. TR_CLASS_METHOD_ARGC(mrb, gra, "text_flags_" , tr_scegra_text_flags_ , 2);
  116. TR_CLASS_METHOD_ARGC(mrb, gra, "angle_" , tr_scegra_angle_, 2);
  117. TR_CLASS_METHOD_ARGC(mrb, gra, "background_color_", tr_scegra_background_color_, 4);
  118. TR_CLASS_METHOD_ARGC(mrb, gra, "border_color_" , tr_scegra_border_color_, 4);
  119. TR_CLASS_METHOD_ARGC(mrb, gra, "color_" , tr_scegra_color_ , 4);
  120. TR_CLASS_METHOD_ARGC(mrb, gra, "make_box" , tr_scegra_make_box, 8);
  121. TR_CLASS_METHOD_ARGC(mrb, gra, "make_image" , tr_scegra_make_image, 5);
  122. TR_CLASS_METHOD_ARGC(mrb, gra, "make_text" , tr_scegra_make_text, 5);
  123. TR_CLASS_METHOD_ARGC(mrb, gra, "make_longtext" , tr_scegra_make_longtext, 7);
  124. TR_CLASS_METHOD_ARGC(mrb, gra, "line_stop_" , tr_scegra_line_stop_, 2);
  125. TR_CLASS_METHOD_ARGC(mrb, gra, "line_start_", tr_scegra_line_start_, 2);
  126. TR_CLASS_METHOD_ARGC(mrb, gra, "delay_" , tr_scegra_delay_, 2);
  127. TR_CLASS_METHOD_ARGC(mrb, gra, "line_stop" , tr_scegra_line_stop, 1);
  128. TR_CLASS_METHOD_ARGC(mrb, gra, "line_start" , tr_scegra_line_start, 1);
  129. TR_CLASS_METHOD_ARGC(mrb, gra, "delay" , tr_scegra_delay, 1);
  130. /* Long text paging. */
  131. TR_CLASS_METHOD_ARGC(mrb, gra, "page_lines_", tr_scegra_page_lines_, 2);
  132. TR_CLASS_METHOD_ARGC(mrb, gra, "page_lines" , tr_scegra_page_lines, 1);
  133. TR_CLASS_METHOD_ARGC(mrb, gra, "paused_" , tr_scegra_paused_, 2);
  134. TR_CLASS_METHOD_ARGC(mrb, gra, "paused" , tr_scegra_paused, 1);
  135. TR_CLASS_METHOD_ARGC(mrb, gra, "page_" , tr_scegra_page_, 2);
  136. TR_CLASS_METHOD_ARGC(mrb, gra, "page" , tr_scegra_page, 1);
  137. TR_CLASS_METHOD_ARGC(mrb, gra, "last_page" , tr_scegra_page, 1);
  138. TR_CLASS_METHOD_ARGC(mrb, gra, "next_page" , tr_scegra_next_page, 1);
  139. TR_CLASS_METHOD_ARGC(mrb, gra, "previous_page", tr_scegra_previous_page, 1);
  140. TR_CLASS_METHOD_ARGC(mrb, gra, "at_end_p" , tr_scegra_at_end, 1);
  141. return 0;
  142. }