summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorArnold <[email protected]>2022-02-03 20:57:10 -0500
committerGitHub <[email protected]>2022-02-03 20:57:10 -0500
commit6cd1e5c0d9f4a72ed52bc9843b15cf5c722c5e41 (patch)
tree1a070d5570f07073a35831b9168ae0ab25c94709
parentddeb355b25657488ec1c41253ce1c0aefd5f6d2f (diff)
downloadmruby-raylib-master.tar.gz
mruby-raylib-master.zip
implement kwargs for init_windowmaster
use regular args if keyword not given, or use defaults if neither given
-rw-r--r--src/raylib.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/raylib.c b/src/raylib.c
index c4bb483..595493f 100644
--- a/src/raylib.c
+++ b/src/raylib.c
@@ -4,6 +4,7 @@
#include <mruby/data.h>
#include <mruby/class.h>
#include <mruby/numeric.h>
+#include <mruby/string.h>
#include <stdlib.h>
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
@@ -822,9 +823,28 @@ mrb_init_window(mrb_state* mrb, mrb_value self) {
mrb_int screenWidth = 800;
mrb_int screenHeight = 600;
char* title = "Hello World from FelFlame!";
- mrb_get_args(mrb, "|iiz", &screenWidth, &screenHeight, &title);
- InitWindow(screenWidth, screenHeight, title);
+ uint32_t kw_num = 3;
+ const mrb_sym kw_names[] = {
+ mrb_intern_lit(mrb, "width"),
+ mrb_intern_lit(mrb, "height"),
+ mrb_intern_lit(mrb, "title"),
+ };
+ mrb_value kw_values[kw_num];
+ const mrb_kwargs kwargs = { kw_num, 0, kw_names, kw_values, NULL };
+ mrb_get_args(mrb, "|iiz:", &screenWidth, &screenHeight, &title, &kwargs);
+
+ if (mrb_undef_p(kw_values[0])) {
+ kw_values[0] = mrb_fixnum_value(screenWidth);
+ }
+ if (mrb_undef_p(kw_values[1])) {
+ kw_values[1] = mrb_fixnum_value(screenHeight);
+ }
+ if (mrb_undef_p(kw_values[2])) {
+ kw_values[2] = mrb_str_new_cstr(mrb, title);
+ }
+
+ InitWindow(mrb_fixnum(kw_values[0]), mrb_fixnum(kw_values[1]), mrb_str_to_cstr(mrb, kw_values[2]));
return mrb_nil_value();
}