glfw3 0.3.2 → 0.3.3
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.
- checksums.yaml +4 -4
- data/ext/glfw3/glfw3.c +123 -74
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af1da580f8de9e21f650115855184766da438c18
|
4
|
+
data.tar.gz: 2c1f559d4044a53985c76c373fa38dcf62aa03b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d784dbdccdef6a614369f6e87145687a1caacfc1b7a6500d23378032a3b329ef7f5e700d2afbf67ea1b6fb15faef3b762b0c194b101e6affdf34a7914522cd39
|
7
|
+
data.tar.gz: 8c04f83251a478714379caa99d78fe86f7354482941918540d2ab233703704eb9d0aed3d64868933bbc8176ac2ceade5187f85a557a04dd6e2bd962292bc866e
|
data/ext/glfw3/glfw3.c
CHANGED
@@ -9,23 +9,50 @@ typedef struct s_rb_glfw_error
|
|
9
9
|
} rb_glfw_error_t;
|
10
10
|
|
11
11
|
|
12
|
-
static const char *
|
13
|
-
static const char *
|
14
|
-
static const char *
|
15
|
-
static const char *
|
16
|
-
static const char *
|
17
|
-
static const char *
|
18
|
-
static const char *
|
19
|
-
static const char *
|
20
|
-
static const char *
|
21
|
-
static const char *
|
22
|
-
static const char *
|
23
|
-
static const char *
|
24
|
-
static const char *
|
25
|
-
static const char *
|
26
|
-
static const char *
|
27
|
-
static const char *
|
28
|
-
static const char *
|
12
|
+
static const char *kRB_IVAR_WINDOW_INTERNAL_NAME = "@__internal_window";
|
13
|
+
static const char *kRB_IVAR_WINDOW_KEY_CALLBACK_NAME = "@__key_callback";
|
14
|
+
static const char *kRB_IVAR_WINDOW_CHAR_CALLBACK_NAME = "@__char_callback";
|
15
|
+
static const char *kRB_IVAR_WINDOW_MOUSE_BUTTON_CALLBACK_NAME = "@__mouse_button_callback";
|
16
|
+
static const char *kRB_IVAR_WINDOW_CURSOR_POSITION_CALLBACK_NAME = "@__cursor_position_callback";
|
17
|
+
static const char *kRB_IVAR_WINDOW_CURSOR_ENTER_CALLBACK_NAME = "@__cursor_enter_callback";
|
18
|
+
static const char *kRB_IVAR_WINDOW_SCROLL_CALLBACK_NAME = "@__scroll_callback";
|
19
|
+
static const char *kRB_IVAR_WINDOW_POSITION_CALLBACK_NAME = "@__position_callback";
|
20
|
+
static const char *kRB_IVAR_WINDOW_SIZE_CALLBACK_NAME = "@__size_callback";
|
21
|
+
static const char *kRB_IVAR_WINDOW_CLOSE_CALLBACK_NAME = "@__close_callback";
|
22
|
+
static const char *kRB_IVAR_WINDOW_REFRESH_CALLBACK_NAME = "@__refresh_callback";
|
23
|
+
static const char *kRB_IVAR_WINDOW_FOCUS_CALLBACK_NAME = "@__focus_callback";
|
24
|
+
static const char *kRB_IVAR_WINDOW_ICONIFY_CALLBACK_NAME = "@__iconify_callback";
|
25
|
+
static const char *kRB_IVAR_WINDOW_FRAMEBUFFER_SIZE_CALLBACK_NAME = "@__framebuffer_size_callback";
|
26
|
+
static const char *kRB_CVAR_WINDOW_WINDOWS_NAME = "@@__windows";
|
27
|
+
static const char *kRB_CVAR_GLFW_ERROR_CALLBACK_NAME = "@@__error_callback";
|
28
|
+
static const char *kRB_CVAR_GLFW_MONITOR_CALLBACK_NAME = "@@__monitor_callback";
|
29
|
+
static const char *kRB_CALL_NAME = "call";
|
30
|
+
static const char *kRB_RED_NAME = "red";
|
31
|
+
static const char *kRB_GREEN_NAME = "green";
|
32
|
+
static const char *kRB_BLUE_NAME = "blue";
|
33
|
+
|
34
|
+
|
35
|
+
static ID kRB_IVAR_WINDOW_INTERNAL;
|
36
|
+
static ID kRB_IVAR_WINDOW_KEY_CALLBACK;
|
37
|
+
static ID kRB_IVAR_WINDOW_CHAR_CALLBACK;
|
38
|
+
static ID kRB_IVAR_WINDOW_MOUSE_BUTTON_CALLBACK;
|
39
|
+
static ID kRB_IVAR_WINDOW_CURSOR_POSITION_CALLBACK;
|
40
|
+
static ID kRB_IVAR_WINDOW_CURSOR_ENTER_CALLBACK;
|
41
|
+
static ID kRB_IVAR_WINDOW_SCROLL_CALLBACK;
|
42
|
+
static ID kRB_IVAR_WINDOW_POSITION_CALLBACK;
|
43
|
+
static ID kRB_IVAR_WINDOW_SIZE_CALLBACK;
|
44
|
+
static ID kRB_IVAR_WINDOW_CLOSE_CALLBACK;
|
45
|
+
static ID kRB_IVAR_WINDOW_REFRESH_CALLBACK;
|
46
|
+
static ID kRB_IVAR_WINDOW_FOCUS_CALLBACK;
|
47
|
+
static ID kRB_IVAR_WINDOW_ICONIFY_CALLBACK;
|
48
|
+
static ID kRB_IVAR_WINDOW_FRAMEBUFFER_SIZE_CALLBACK;
|
49
|
+
static ID kRB_CVAR_WINDOW_WINDOWS;
|
50
|
+
static ID kRB_CVAR_GLFW_ERROR_CALLBACK;
|
51
|
+
static ID kRB_CVAR_GLFW_MONITOR_CALLBACK;
|
52
|
+
static ID kRB_CALL;
|
53
|
+
static ID kRB_RED;
|
54
|
+
static ID kRB_GREEN;
|
55
|
+
static ID kRB_BLUE;
|
29
56
|
|
30
57
|
|
31
58
|
static VALUE s_glfw_module = Qundef;
|
@@ -106,14 +133,14 @@ static VALUE rb_glfw_version(VALUE self)
|
|
106
133
|
|
107
134
|
static void rb_glfw_error_callback(int error_code, const char *description)
|
108
135
|
{
|
109
|
-
VALUE lambda = rb_cvar_get(s_glfw_module,
|
136
|
+
VALUE lambda = rb_cvar_get(s_glfw_module, kRB_CVAR_GLFW_ERROR_CALLBACK);
|
110
137
|
|
111
138
|
if (RTEST(lambda)) {
|
112
139
|
VALUE rb_description = rb_str_new2(description);
|
113
140
|
VALUE rb_error_code = INT2FIX(error_code);
|
114
141
|
OBJ_FREEZE(rb_description);
|
115
142
|
OBJ_FREEZE(rb_error_code);
|
116
|
-
rb_funcall(lambda,
|
143
|
+
rb_funcall(lambda, kRB_CALL, 2, rb_error_code, rb_description);
|
117
144
|
} else {
|
118
145
|
rb_raise(rb_eRuntimeError, "GLFW Error 0x%X: %s", error_code, description);
|
119
146
|
}
|
@@ -231,11 +258,11 @@ VALUE rb_monitor_name(VALUE self)
|
|
231
258
|
|
232
259
|
static void rb_glfw_monitor_callback(GLFWmonitor *monitor, int message)
|
233
260
|
{
|
234
|
-
VALUE lambda = rb_cvar_get(s_glfw_module,
|
261
|
+
VALUE lambda = rb_cvar_get(s_glfw_module, kRB_CVAR_GLFW_MONITOR_CALLBACK);
|
235
262
|
if (RTEST(lambda)) {
|
236
263
|
VALUE rb_monitor = Data_Wrap_Struct(s_glfw_monitor_klass, 0, 0, monitor);
|
237
264
|
rb_obj_call_init(rb_monitor, 0, 0);
|
238
|
-
rb_funcall(lambda,
|
265
|
+
rb_funcall(lambda, kRB_CALL, 2, rb_monitor, INT2FIX(message));
|
239
266
|
}
|
240
267
|
}
|
241
268
|
|
@@ -435,9 +462,9 @@ static VALUE rb_monitor_get_gamma_ramp(VALUE self)
|
|
435
462
|
rb_ary_push(rb_blue, INT2NUM(ramp->blue[ramp_index]));
|
436
463
|
}
|
437
464
|
|
438
|
-
rb_hash_aset(rb_gamma_hash, ID2SYM(
|
439
|
-
rb_hash_aset(rb_gamma_hash, ID2SYM(
|
440
|
-
rb_hash_aset(rb_gamma_hash, ID2SYM(
|
465
|
+
rb_hash_aset(rb_gamma_hash, ID2SYM(kRB_RED), rb_red);
|
466
|
+
rb_hash_aset(rb_gamma_hash, ID2SYM(kRB_GREEN), rb_green);
|
467
|
+
rb_hash_aset(rb_gamma_hash, ID2SYM(kRB_BLUE), rb_blue);
|
441
468
|
|
442
469
|
return rb_gamma_hash;
|
443
470
|
}
|
@@ -475,9 +502,9 @@ static VALUE rb_monitor_set_gamma_ramp(VALUE self, VALUE ramp_hash)
|
|
475
502
|
|
476
503
|
Data_Get_Struct(self, GLFWmonitor, monitor);
|
477
504
|
|
478
|
-
rb_red = rb_hash_aref(ramp_hash, ID2SYM(
|
479
|
-
rb_green = rb_hash_aref(ramp_hash, ID2SYM(
|
480
|
-
rb_blue = rb_hash_aref(ramp_hash, ID2SYM(
|
505
|
+
rb_red = rb_hash_aref(ramp_hash, ID2SYM(kRB_RED));
|
506
|
+
rb_green = rb_hash_aref(ramp_hash, ID2SYM(kRB_GREEN));
|
507
|
+
rb_blue = rb_hash_aref(ramp_hash, ID2SYM(kRB_BLUE));
|
481
508
|
|
482
509
|
if (!(RTEST(rb_red) && RTEST(rb_green) && RTEST(rb_blue))) {
|
483
510
|
rb_raise(rb_eArgError, "Ramp Hash must contain :red, :green, and :blue arrays");
|
@@ -555,7 +582,7 @@ static GLFWwindow *rb_get_window(VALUE rb_window)
|
|
555
582
|
{
|
556
583
|
GLFWwindow *window = NULL;
|
557
584
|
if (RTEST(rb_window)) {
|
558
|
-
ID ivar_window =
|
585
|
+
ID ivar_window = kRB_IVAR_WINDOW_INTERNAL;
|
559
586
|
VALUE rb_window_data = Qnil;
|
560
587
|
if (RTEST((rb_window_data = rb_ivar_get(rb_window, ivar_window)))) {
|
561
588
|
Data_Get_Struct(rb_window_data, GLFWwindow, window);
|
@@ -578,7 +605,7 @@ static GLFWwindow *rb_get_window(VALUE rb_window)
|
|
578
605
|
*/
|
579
606
|
static VALUE rb_window_new(int argc, VALUE *argv, VALUE self)
|
580
607
|
{
|
581
|
-
ID ivar_window =
|
608
|
+
ID ivar_window = kRB_IVAR_WINDOW_INTERNAL;
|
582
609
|
VALUE rb_width, rb_height, rb_title, rb_monitor, rb_share;
|
583
610
|
VALUE rb_window;
|
584
611
|
VALUE rb_window_data;
|
@@ -625,25 +652,25 @@ static VALUE rb_window_new(int argc, VALUE *argv, VALUE self)
|
|
625
652
|
rb_window = rb_obj_alloc(s_glfw_window_klass);
|
626
653
|
|
627
654
|
rb_ivar_set(rb_window, ivar_window, rb_window_data);
|
628
|
-
rb_ivar_set(rb_window,
|
629
|
-
rb_ivar_set(rb_window,
|
630
|
-
rb_ivar_set(rb_window,
|
631
|
-
rb_ivar_set(rb_window,
|
632
|
-
rb_ivar_set(rb_window,
|
633
|
-
rb_ivar_set(rb_window,
|
634
|
-
rb_ivar_set(rb_window,
|
635
|
-
rb_ivar_set(rb_window,
|
636
|
-
rb_ivar_set(rb_window,
|
637
|
-
rb_ivar_set(rb_window,
|
638
|
-
rb_ivar_set(rb_window,
|
639
|
-
rb_ivar_set(rb_window,
|
640
|
-
rb_ivar_set(rb_window,
|
655
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_KEY_CALLBACK, Qnil);
|
656
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_CHAR_CALLBACK, Qnil);
|
657
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_MOUSE_BUTTON_CALLBACK, Qnil);
|
658
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_CURSOR_POSITION_CALLBACK, Qnil);
|
659
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_CURSOR_ENTER_CALLBACK, Qnil);
|
660
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_SCROLL_CALLBACK, Qnil);
|
661
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_POSITION_CALLBACK, Qnil);
|
662
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_SIZE_CALLBACK, Qnil);
|
663
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_CLOSE_CALLBACK, Qnil);
|
664
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_REFRESH_CALLBACK, Qnil);
|
665
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_FOCUS_CALLBACK, Qnil);
|
666
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_ICONIFY_CALLBACK, Qnil);
|
667
|
+
rb_ivar_set(rb_window, kRB_IVAR_WINDOW_FRAMEBUFFER_SIZE_CALLBACK, Qnil);
|
641
668
|
|
642
669
|
glfwSetWindowUserPointer(window, (void *)rb_window);
|
643
670
|
rb_obj_call_init(rb_window, 0, 0);
|
644
671
|
|
645
672
|
// Store the window so it can't go out of scope until explicitly destroyed.
|
646
|
-
rb_windows = rb_cvar_get(self,
|
673
|
+
rb_windows = rb_cvar_get(self, kRB_CVAR_WINDOW_WINDOWS);
|
647
674
|
rb_hash_aset(rb_windows, INT2FIX((int)window), rb_window);
|
648
675
|
|
649
676
|
return rb_window;
|
@@ -661,8 +688,8 @@ static VALUE rb_window_destroy(VALUE self)
|
|
661
688
|
GLFWwindow *window = rb_get_window(self);
|
662
689
|
if (window) {
|
663
690
|
glfwDestroyWindow(window);
|
664
|
-
rb_ivar_set(self,
|
665
|
-
VALUE rb_windows = rb_cvar_get(s_glfw_window_klass,
|
691
|
+
rb_ivar_set(self, kRB_IVAR_WINDOW_INTERNAL, Qnil);
|
692
|
+
VALUE rb_windows = rb_cvar_get(s_glfw_window_klass, kRB_CVAR_WINDOW_WINDOWS);
|
666
693
|
rb_hash_delete(rb_windows, INT2FIX((int)window));
|
667
694
|
}
|
668
695
|
return self;
|
@@ -888,8 +915,8 @@ static VALUE rb_window_get_monitor(VALUE self)
|
|
888
915
|
static void rb_window_window_position_callback(GLFWwindow *window, int x, int y)
|
889
916
|
{
|
890
917
|
VALUE rb_window = rb_lookup_window(window);
|
891
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
892
|
-
rb_funcall(rb_func,
|
918
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_POSITION_CALLBACK);
|
919
|
+
rb_funcall(rb_func, kRB_CALL, 3, rb_window, INT2FIX(x), INT2FIX(y));
|
893
920
|
}
|
894
921
|
|
895
922
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_window_position_callback, rb_window_window_position_callback, glfwSetWindowPosCallback);
|
@@ -899,8 +926,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_window_position_callback, rb_window_window_
|
|
899
926
|
static void rb_window_window_size_callback(GLFWwindow *window, int width, int height)
|
900
927
|
{
|
901
928
|
VALUE rb_window = rb_lookup_window(window);
|
902
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
903
|
-
rb_funcall(rb_func,
|
929
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_SIZE_CALLBACK);
|
930
|
+
rb_funcall(rb_func, kRB_CALL, 3, rb_window, INT2FIX(width), INT2FIX(height));
|
904
931
|
}
|
905
932
|
|
906
933
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_window_size_callback, rb_window_window_size_callback, glfwSetWindowSizeCallback);
|
@@ -910,8 +937,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_window_size_callback, rb_window_window_size
|
|
910
937
|
static void rb_window_close_callback(GLFWwindow *window)
|
911
938
|
{
|
912
939
|
VALUE rb_window = rb_lookup_window(window);
|
913
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
914
|
-
rb_funcall(rb_func,
|
940
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_CLOSE_CALLBACK);
|
941
|
+
rb_funcall(rb_func, kRB_CALL, 1, rb_window);
|
915
942
|
}
|
916
943
|
|
917
944
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_close_callback, rb_window_close_callback, glfwSetWindowCloseCallback);
|
@@ -921,8 +948,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_close_callback, rb_window_close_callback, g
|
|
921
948
|
static void rb_window_refresh_callback(GLFWwindow *window)
|
922
949
|
{
|
923
950
|
VALUE rb_window = rb_lookup_window(window);
|
924
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
925
|
-
rb_funcall(rb_func,
|
951
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_REFRESH_CALLBACK);
|
952
|
+
rb_funcall(rb_func, kRB_CALL, 1, rb_window);
|
926
953
|
}
|
927
954
|
|
928
955
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_refresh_callback, rb_window_refresh_callback, glfwSetWindowRefreshCallback);
|
@@ -932,8 +959,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_refresh_callback, rb_window_refresh_callbac
|
|
932
959
|
static void rb_window_focus_callback(GLFWwindow *window, int focused)
|
933
960
|
{
|
934
961
|
VALUE rb_window = rb_lookup_window(window);
|
935
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
936
|
-
rb_funcall(rb_func,
|
962
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_FOCUS_CALLBACK);
|
963
|
+
rb_funcall(rb_func, kRB_CALL, 2, rb_window, focused ? Qtrue : Qfalse);
|
937
964
|
}
|
938
965
|
|
939
966
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_focus_callback, rb_window_focus_callback, glfwSetWindowFocusCallback);
|
@@ -943,8 +970,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_focus_callback, rb_window_focus_callback, g
|
|
943
970
|
static void rb_window_iconify_callback(GLFWwindow *window, int iconified)
|
944
971
|
{
|
945
972
|
VALUE rb_window = rb_lookup_window(window);
|
946
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
947
|
-
rb_funcall(rb_func,
|
973
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_ICONIFY_CALLBACK);
|
974
|
+
rb_funcall(rb_func, kRB_CALL, 2, rb_window, iconified ? Qtrue : Qfalse);
|
948
975
|
}
|
949
976
|
|
950
977
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_iconify_callback, rb_window_iconify_callback, glfwSetWindowIconifyCallback);
|
@@ -954,8 +981,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_iconify_callback, rb_window_iconify_callbac
|
|
954
981
|
static void rb_window_fbsize_callback(GLFWwindow *window, int width, int height)
|
955
982
|
{
|
956
983
|
VALUE rb_window = rb_lookup_window(window);
|
957
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
958
|
-
rb_funcall(rb_func,
|
984
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_FRAMEBUFFER_SIZE_CALLBACK);
|
985
|
+
rb_funcall(rb_func, kRB_CALL, 3, rb_window, INT2FIX(width), INT2FIX(height));
|
959
986
|
}
|
960
987
|
|
961
988
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_fbsize_callback, rb_window_fbsize_callback, glfwSetFramebufferSizeCallback);
|
@@ -1104,8 +1131,8 @@ static VALUE rb_window_set_cursor_pos(VALUE self, VALUE x, VALUE y)
|
|
1104
1131
|
static void rb_window_key_callback(GLFWwindow *window, int key, int scancode, int action, int mods)
|
1105
1132
|
{
|
1106
1133
|
VALUE rb_window = rb_lookup_window(window);
|
1107
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
1108
|
-
rb_funcall(rb_func,
|
1134
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_KEY_CALLBACK);
|
1135
|
+
rb_funcall(rb_func, kRB_CALL, 5, rb_window, INT2FIX(key), INT2FIX(scancode), INT2FIX(action), INT2FIX(mods));
|
1109
1136
|
}
|
1110
1137
|
|
1111
1138
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_key_callback, rb_window_key_callback, glfwSetKeyCallback);
|
@@ -1115,8 +1142,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_key_callback, rb_window_key_callback, glfwS
|
|
1115
1142
|
static void rb_window_char_callback(GLFWwindow *window, unsigned int code)
|
1116
1143
|
{
|
1117
1144
|
VALUE rb_window = rb_lookup_window(window);
|
1118
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
1119
|
-
rb_funcall(rb_func,
|
1145
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_CHAR_CALLBACK);
|
1146
|
+
rb_funcall(rb_func, kRB_CALL, 2, rb_window, UINT2NUM(code));
|
1120
1147
|
}
|
1121
1148
|
|
1122
1149
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_char_callback, rb_window_char_callback, glfwSetCharCallback);
|
@@ -1127,8 +1154,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_char_callback, rb_window_char_callback, glf
|
|
1127
1154
|
static void rb_window_mouse_button_callback(GLFWwindow *window, int button, int action, int mods)
|
1128
1155
|
{
|
1129
1156
|
VALUE rb_window = rb_lookup_window(window);
|
1130
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
1131
|
-
rb_funcall(rb_func,
|
1157
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_MOUSE_BUTTON_CALLBACK);
|
1158
|
+
rb_funcall(rb_func, kRB_CALL, 4, rb_window, INT2FIX(button), INT2FIX(action), INT2FIX(mods));
|
1132
1159
|
}
|
1133
1160
|
|
1134
1161
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_mouse_button_callback, rb_window_mouse_button_callback, glfwSetMouseButtonCallback);
|
@@ -1138,8 +1165,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_mouse_button_callback, rb_window_mouse_butt
|
|
1138
1165
|
static void rb_window_cursor_position_callback(GLFWwindow *window, double x, double y)
|
1139
1166
|
{
|
1140
1167
|
VALUE rb_window = rb_lookup_window(window);
|
1141
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
1142
|
-
rb_funcall(rb_func,
|
1168
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_CURSOR_POSITION_CALLBACK);
|
1169
|
+
rb_funcall(rb_func, kRB_CALL, 4, rb_window, rb_float_new(x), rb_float_new(y));
|
1143
1170
|
}
|
1144
1171
|
|
1145
1172
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_cursor_position_callback, rb_window_cursor_position_callback, glfwSetCursorPosCallback);
|
@@ -1149,8 +1176,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_cursor_position_callback, rb_window_cursor_
|
|
1149
1176
|
static void rb_window_cursor_enter_callback(GLFWwindow *window, int entered)
|
1150
1177
|
{
|
1151
1178
|
VALUE rb_window = rb_lookup_window(window);
|
1152
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
1153
|
-
rb_funcall(rb_func,
|
1179
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_CURSOR_ENTER_CALLBACK);
|
1180
|
+
rb_funcall(rb_func, kRB_CALL, 2, rb_window, entered ? Qtrue : Qfalse);
|
1154
1181
|
}
|
1155
1182
|
|
1156
1183
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_cursor_enter_callback, rb_window_cursor_enter_callback, glfwSetCursorEnterCallback);
|
@@ -1160,8 +1187,8 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_cursor_enter_callback, rb_window_cursor_ent
|
|
1160
1187
|
static void rb_window_scroll_callback(GLFWwindow *window, double x, double y)
|
1161
1188
|
{
|
1162
1189
|
VALUE rb_window = rb_lookup_window(window);
|
1163
|
-
VALUE rb_func = rb_ivar_get(rb_window,
|
1164
|
-
rb_funcall(rb_func,
|
1190
|
+
VALUE rb_func = rb_ivar_get(rb_window, kRB_IVAR_WINDOW_SCROLL_CALLBACK);
|
1191
|
+
rb_funcall(rb_func, kRB_CALL, 4, rb_window, rb_float_new(x), rb_float_new(y));
|
1165
1192
|
}
|
1166
1193
|
|
1167
1194
|
RB_ENABLE_CALLBACK_DEF(rb_window_set_scroll_callback, rb_window_scroll_callback, glfwSetScrollCallback);
|
@@ -1444,6 +1471,28 @@ static VALUE rb_glfw_extension_supported(VALUE self, VALUE extension)
|
|
1444
1471
|
|
1445
1472
|
void Init_glfw3(void)
|
1446
1473
|
{
|
1474
|
+
kRB_IVAR_WINDOW_INTERNAL = rb_intern(kRB_IVAR_WINDOW_INTERNAL_NAME);
|
1475
|
+
kRB_IVAR_WINDOW_KEY_CALLBACK = rb_intern(kRB_IVAR_WINDOW_KEY_CALLBACK_NAME);
|
1476
|
+
kRB_IVAR_WINDOW_CHAR_CALLBACK = rb_intern(kRB_IVAR_WINDOW_CHAR_CALLBACK_NAME);
|
1477
|
+
kRB_IVAR_WINDOW_MOUSE_BUTTON_CALLBACK = rb_intern(kRB_IVAR_WINDOW_MOUSE_BUTTON_CALLBACK_NAME);
|
1478
|
+
kRB_IVAR_WINDOW_CURSOR_POSITION_CALLBACK = rb_intern(kRB_IVAR_WINDOW_CURSOR_POSITION_CALLBACK_NAME);
|
1479
|
+
kRB_IVAR_WINDOW_CURSOR_ENTER_CALLBACK = rb_intern(kRB_IVAR_WINDOW_CURSOR_ENTER_CALLBACK_NAME);
|
1480
|
+
kRB_IVAR_WINDOW_SCROLL_CALLBACK = rb_intern(kRB_IVAR_WINDOW_SCROLL_CALLBACK_NAME);
|
1481
|
+
kRB_IVAR_WINDOW_POSITION_CALLBACK = rb_intern(kRB_IVAR_WINDOW_POSITION_CALLBACK_NAME);
|
1482
|
+
kRB_IVAR_WINDOW_SIZE_CALLBACK = rb_intern(kRB_IVAR_WINDOW_SIZE_CALLBACK_NAME);
|
1483
|
+
kRB_IVAR_WINDOW_CLOSE_CALLBACK = rb_intern(kRB_IVAR_WINDOW_CLOSE_CALLBACK_NAME);
|
1484
|
+
kRB_IVAR_WINDOW_REFRESH_CALLBACK = rb_intern(kRB_IVAR_WINDOW_REFRESH_CALLBACK_NAME);
|
1485
|
+
kRB_IVAR_WINDOW_FOCUS_CALLBACK = rb_intern(kRB_IVAR_WINDOW_FOCUS_CALLBACK_NAME);
|
1486
|
+
kRB_IVAR_WINDOW_ICONIFY_CALLBACK = rb_intern(kRB_IVAR_WINDOW_ICONIFY_CALLBACK_NAME);
|
1487
|
+
kRB_IVAR_WINDOW_FRAMEBUFFER_SIZE_CALLBACK = rb_intern(kRB_IVAR_WINDOW_FRAMEBUFFER_SIZE_CALLBACK_NAME);
|
1488
|
+
kRB_CVAR_WINDOW_WINDOWS = rb_intern(kRB_CVAR_WINDOW_WINDOWS_NAME);
|
1489
|
+
kRB_CVAR_GLFW_ERROR_CALLBACK = rb_intern(kRB_CVAR_GLFW_ERROR_CALLBACK_NAME);
|
1490
|
+
kRB_CVAR_GLFW_MONITOR_CALLBACK = rb_intern(kRB_CVAR_GLFW_MONITOR_CALLBACK_NAME);
|
1491
|
+
kRB_CALL = rb_intern(kRB_CALL_NAME);
|
1492
|
+
kRB_RED = rb_intern(kRB_RED_NAME);
|
1493
|
+
kRB_GREEN = rb_intern(kRB_GREEN_NAME);
|
1494
|
+
kRB_BLUE = rb_intern(kRB_BLUE_NAME);
|
1495
|
+
|
1447
1496
|
s_glfw_module = rb_define_module("Glfw");
|
1448
1497
|
s_glfw_monitor_klass = rb_define_class_under(s_glfw_module, "Monitor", rb_cObject);
|
1449
1498
|
s_glfw_window_klass = rb_define_class_under(s_glfw_module, "Window", rb_cObject);
|
@@ -1513,11 +1562,11 @@ void Init_glfw3(void)
|
|
1513
1562
|
rb_define_method(s_glfw_window_klass, "set_scroll_callback__", rb_window_set_scroll_callback, 1);
|
1514
1563
|
rb_define_method(s_glfw_window_klass, "clipboard_string=", rb_window_set_clipboard_string, 1);
|
1515
1564
|
rb_define_method(s_glfw_window_klass, "clipboard_string", rb_window_get_clipboard_string, 0);
|
1516
|
-
rb_cvar_set(s_glfw_window_klass,
|
1565
|
+
rb_cvar_set(s_glfw_window_klass, kRB_CVAR_WINDOW_WINDOWS, rb_hash_new());
|
1517
1566
|
|
1518
1567
|
/* Glfw */
|
1519
|
-
rb_cvar_set(s_glfw_module,
|
1520
|
-
rb_cvar_set(s_glfw_module,
|
1568
|
+
rb_cvar_set(s_glfw_module, kRB_CVAR_GLFW_ERROR_CALLBACK, Qnil);
|
1569
|
+
rb_cvar_set(s_glfw_module, kRB_CVAR_GLFW_MONITOR_CALLBACK, Qnil);
|
1521
1570
|
rb_define_singleton_method(s_glfw_module, "version", rb_glfw_version, 0);
|
1522
1571
|
rb_define_singleton_method(s_glfw_module, "terminate", rb_glfw_terminate, 0);
|
1523
1572
|
rb_define_singleton_method(s_glfw_module, "init", rb_glfw_init, 0);
|