glfw3 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- 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);
|