ray 0.1.1 → 0.2.0
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.
- data/README.md +9 -6
- data/Rakefile +1 -5
- data/ext/audio.c +25 -19
- data/ext/audio_source.c +67 -39
- data/ext/color.c +19 -19
- data/ext/drawable.c +190 -31
- data/ext/extconf.rb +16 -14
- data/ext/gl.c +310 -30
- data/ext/gl_buffer.c +223 -2
- data/ext/gl_index_buffer.c +11 -0
- data/ext/gl_int_array.c +24 -22
- data/ext/gl_vertex.c +84 -49
- data/ext/image.c +115 -51
- data/ext/image_target.c +58 -10
- data/ext/input.c +73 -6
- data/ext/mo.c +583 -0
- data/ext/mo.h +189 -0
- data/ext/music.c +9 -8
- data/ext/pixel_bus.c +349 -0
- data/ext/polygon.c +68 -45
- data/ext/ray.c +1 -0
- data/ext/ray.h +19 -1
- data/ext/rect.c +9 -47
- data/ext/say.h +1 -2
- data/ext/say_all.h +6 -0
- data/ext/say_audio.h +3 -0
- data/ext/say_audio_context.c +1 -4
- data/ext/say_basic_type.c +24 -0
- data/ext/say_basic_type.h +4 -0
- data/ext/say_buffer.c +217 -88
- data/ext/say_buffer.h +20 -5
- data/ext/say_buffer_renderer.c +10 -7
- data/ext/say_buffer_renderer.h +1 -1
- data/ext/say_buffer_slice.c +70 -76
- data/ext/say_context.c +109 -22
- data/ext/say_context.h +14 -0
- data/ext/say_drawable.c +113 -25
- data/ext/say_drawable.h +23 -2
- data/ext/say_error.c +7 -2
- data/ext/say_font.c +30 -27
- data/ext/say_font.h +3 -6
- data/ext/say_get_proc.c +35 -0
- data/ext/say_image.c +102 -27
- data/ext/say_image.h +11 -4
- data/ext/say_image_target.c +88 -34
- data/ext/say_image_target.h +3 -2
- data/ext/say_index_buffer.c +31 -19
- data/ext/say_index_buffer.h +4 -2
- data/ext/say_index_buffer_slice.c +78 -70
- data/ext/say_music.c +4 -2
- data/ext/say_osx.h +3 -2
- data/ext/say_osx_context.h +37 -4
- data/ext/say_osx_window.h +32 -37
- data/ext/say_pixel_bus.c +163 -0
- data/ext/say_pixel_bus.h +44 -0
- data/ext/say_polygon.c +2 -2
- data/ext/say_shader.c +66 -62
- data/ext/say_shader.h +2 -0
- data/ext/say_sprite.c +1 -2
- data/ext/say_target.c +14 -23
- data/ext/say_target.h +3 -1
- data/ext/say_text.c +45 -7
- data/ext/say_text.h +12 -3
- data/ext/say_thread.c +13 -6
- data/ext/say_thread.h +1 -1
- data/ext/say_thread_variable.c +5 -5
- data/ext/say_vertex_type.c +79 -41
- data/ext/say_vertex_type.h +6 -2
- data/ext/say_view.c +10 -31
- data/ext/say_view.h +1 -5
- data/ext/say_win.h +2 -2
- data/ext/say_win_context.h +49 -11
- data/ext/say_win_window.h +30 -27
- data/ext/say_window.c +3 -3
- data/ext/say_x11.h +3 -1
- data/ext/say_x11_context.h +64 -10
- data/ext/say_x11_window.h +22 -17
- data/ext/shader.c +9 -0
- data/ext/sprite.c +7 -1
- data/ext/target.c +80 -28
- data/ext/text.c +43 -1
- data/ext/view.c +53 -1
- data/ext/window.c +4 -0
- data/lib/ray/animation_list.rb +17 -2
- data/lib/ray/audio_source.rb +11 -0
- data/lib/ray/color.rb +14 -0
- data/lib/ray/drawable.rb +23 -0
- data/lib/ray/dsl/event.rb +1 -9
- data/lib/ray/dsl/event_runner.rb +3 -4
- data/lib/ray/dsl/matcher.rb +20 -1
- data/lib/ray/effect.rb +116 -0
- data/lib/ray/effect/black_and_white.rb +38 -0
- data/lib/ray/effect/color_inversion.rb +16 -0
- data/lib/ray/effect/generator.rb +145 -0
- data/lib/ray/effect/grayscale.rb +32 -0
- data/lib/ray/game.rb +25 -5
- data/lib/ray/gl/vertex.rb +105 -26
- data/lib/ray/helper.rb +5 -0
- data/lib/ray/image.rb +54 -13
- data/lib/ray/image_target.rb +7 -0
- data/lib/ray/matrix.rb +26 -0
- data/lib/ray/music.rb +4 -0
- data/lib/ray/pixel_bus.rb +22 -0
- data/lib/ray/polygon.rb +17 -0
- data/lib/ray/pp.rb +28 -0
- data/lib/ray/ray.rb +7 -1
- data/lib/ray/rect.rb +7 -13
- data/lib/ray/scene.rb +24 -5
- data/lib/ray/scene_list.rb +9 -0
- data/lib/ray/shader.rb +11 -2
- data/lib/ray/sound.rb +4 -0
- data/lib/ray/sprite.rb +23 -62
- data/lib/ray/target.rb +25 -0
- data/lib/ray/text.rb +10 -0
- data/lib/ray/turtle.rb +9 -3
- data/lib/ray/vector.rb +18 -0
- data/lib/ray/vertex.rb +6 -0
- data/lib/ray/view.rb +22 -0
- data/samples/animation/sprite_motion.rb +0 -60
- data/samples/audio/{spacial.rb → spatial.rb} +1 -1
- data/samples/buffer/buffer.rb +1 -0
- data/samples/buffer/index_buffer.rb +2 -0
- data/samples/cptn_ruby/cptn_ruby.rb +6 -7
- data/samples/effects/effect.rb +39 -0
- data/samples/effects/grayscale.rb +27 -0
- data/samples/opengl/image.rb +7 -5
- data/samples/opengl/instancing.rb +159 -0
- data/samples/opengl/instancing.rbc +3231 -0
- data/samples/opengl/obj_loader.rb +9 -8
- data/samples/opengl/shader.rb +1 -3
- data/samples/shaders/geometry.rb +108 -38
- data/samples/shaders/geometry.rbc +2074 -0
- data/samples/shaders/shape.rb +2 -2
- data/samples/starfighter/starfighter.rb +5 -5
- data/samples/window/get_pixel.rb +1 -1
- data/test/animation_list_test.rb +18 -4
- data/test/drawable_test.rb +70 -1
- data/test/effect_generator_test.rb +63 -0
- data/test/effect_test.rb +61 -0
- data/test/game_test.rb +18 -0
- data/test/gl_buffer_test.rb +43 -1
- data/test/gl_index_buffer_test.rb +5 -0
- data/test/gl_vertex_test.rb +28 -1
- data/test/image_test.rb +5 -5
- data/test/input_test.rb +49 -0
- data/test/pixel_bus_test.rb +28 -0
- data/test/rect_test.rb +4 -0
- data/{samples/_media → test/res}/Beep.wav +0 -0
- data/samples/_media/CptnRuby Gem.png b/data/test/res/CptnRuby → Gem.png +0 -0
- data/samples/_media/CptnRuby Map.txt b/data/test/res/CptnRuby → Map.txt +0 -0
- data/samples/_media/CptnRuby Tileset.png b/data/test/res/CptnRuby → Tileset.png +0 -0
- data/{samples/_media → test/res}/CptnRuby.png +0 -0
- data/{samples/_media → test/res}/Space.png +0 -0
- data/{samples/_media → test/res}/Star.png +0 -0
- data/{samples/_media → test/res}/Starfighter.png +0 -0
- data/test/res/cube.obj +28 -0
- data/test/res/light3d.c +2 -2
- data/test/res/stone.png +0 -0
- data/test/scene_test.rb +3 -0
- data/test/sprite_test.rb +10 -0
- data/test/text_test.rb +31 -2
- data/test/view_test.rb +13 -1
- metadata +38 -17
- data/ext/say_array.c +0 -124
- data/ext/say_array.h +0 -34
- data/ext/say_table.c +0 -86
- data/ext/say_table.h +0 -24
data/ext/say_view.c
CHANGED
@@ -4,22 +4,12 @@ static void say_view_update_matrix(say_view *view) {
|
|
4
4
|
if (!view->custom_matrix) {
|
5
5
|
say_matrix_reset(view->matrix);
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
-1, 1);
|
14
|
-
}
|
15
|
-
else {
|
16
|
-
say_matrix_set_ortho(view->matrix,
|
17
|
-
view->center.x - view->size.x / 2,
|
18
|
-
view->center.x + view->size.x / 2,
|
19
|
-
view->center.y - view->size.y / 2,
|
20
|
-
view->center.y + view->size.y / 2,
|
21
|
-
-1, 1);
|
22
|
-
}
|
7
|
+
say_matrix_set_ortho(view->matrix,
|
8
|
+
view->center.x - view->size.x / 2,
|
9
|
+
view->center.x + view->size.x / 2,
|
10
|
+
view->center.y + view->size.y / 2,
|
11
|
+
view->center.y - view->size.y / 2,
|
12
|
+
-1, 1);
|
23
13
|
}
|
24
14
|
|
25
15
|
view->matrix_updated = 1;
|
@@ -37,8 +27,6 @@ say_view *say_view_create() {
|
|
37
27
|
|
38
28
|
view->viewport = say_make_rect(0, 0, 1, 1);
|
39
29
|
|
40
|
-
view->flip_y = 1;
|
41
|
-
|
42
30
|
return view;
|
43
31
|
}
|
44
32
|
|
@@ -102,17 +90,6 @@ say_rect say_view_get_viewport(say_view *view) {
|
|
102
90
|
return view->viewport;
|
103
91
|
}
|
104
92
|
|
105
|
-
|
106
|
-
void say_view_flip_y(say_view *view, uint8_t val) {
|
107
|
-
view->flip_y = val;
|
108
|
-
view->matrix_updated = 0;
|
109
|
-
view->has_changed = 1;
|
110
|
-
}
|
111
|
-
|
112
|
-
uint8_t say_view_is_y_flipped(say_view *view) {
|
113
|
-
return view->flip_y;
|
114
|
-
}
|
115
|
-
|
116
93
|
say_matrix *say_view_get_matrix(say_view *view) {
|
117
94
|
if (!view->matrix_updated)
|
118
95
|
say_view_update_matrix(view);
|
@@ -123,13 +100,15 @@ void say_view_set_matrix(say_view *view, say_matrix *matrix) {
|
|
123
100
|
if (matrix) {
|
124
101
|
view->custom_matrix = 1;
|
125
102
|
say_matrix_set_content(view->matrix, matrix->content);
|
103
|
+
|
104
|
+
view->matrix_updated = 1;
|
126
105
|
}
|
127
106
|
else {
|
128
107
|
say_matrix_reset(view->matrix);
|
129
|
-
view->custom_matrix
|
108
|
+
view->custom_matrix = 0;
|
109
|
+
view->matrix_updated = 0;
|
130
110
|
}
|
131
111
|
|
132
|
-
view->matrix_updated = 1;
|
133
112
|
view->has_changed = 1;
|
134
113
|
}
|
135
114
|
|
data/ext/say_view.h
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
#define SAY_VIEW_H_
|
3
3
|
|
4
4
|
#include "say_matrix.h"
|
5
|
+
#include "say_shader.h"
|
5
6
|
|
6
7
|
typedef struct {
|
7
8
|
say_matrix *matrix;
|
@@ -14,8 +15,6 @@ typedef struct {
|
|
14
15
|
|
15
16
|
say_rect viewport;
|
16
17
|
uint8_t viewport_changed;
|
17
|
-
|
18
|
-
uint8_t flip_y;
|
19
18
|
} say_view;
|
20
19
|
|
21
20
|
say_view *say_view_create();
|
@@ -32,9 +31,6 @@ say_vector2 say_view_get_size(say_view *view);
|
|
32
31
|
say_vector2 say_view_get_center(say_view *view);
|
33
32
|
say_rect say_view_get_viewport(say_view *view);
|
34
33
|
|
35
|
-
void say_view_flip_y(say_view *view, uint8_t val);
|
36
|
-
uint8_t say_view_is_y_flipped(say_view *view);
|
37
|
-
|
38
34
|
say_matrix *say_view_get_matrix(say_view *view);
|
39
35
|
void say_view_set_matrix(say_view *view, say_matrix *matrix);
|
40
36
|
|
data/ext/say_win.h
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
#include <stdbool.h>
|
6
6
|
|
7
|
-
|
7
|
+
#include "mo.h"
|
8
8
|
|
9
9
|
typedef struct say_win_window {
|
10
10
|
HWND win;
|
@@ -12,7 +12,7 @@ typedef struct say_win_window {
|
|
12
12
|
HCURSOR cursor;
|
13
13
|
bool cursor_inside;
|
14
14
|
|
15
|
-
|
15
|
+
mo_array events;
|
16
16
|
} say_win_window;
|
17
17
|
|
18
18
|
typedef struct say_win_context {
|
data/ext/say_win_context.h
CHANGED
@@ -1,7 +1,20 @@
|
|
1
|
+
#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
|
2
|
+
#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
|
3
|
+
#define WGL_CONTEXT_FLAGS_ARB 0x2094
|
4
|
+
#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
|
5
|
+
|
6
|
+
#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 1
|
7
|
+
#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 2
|
8
|
+
#define WGL_CONTEXT_DEBUG_BIT_ARB 1
|
9
|
+
|
10
|
+
typedef HGLRC (*say_gl_create_context)(HDC dc, HGLRC share, const GLint *attr);
|
11
|
+
|
1
12
|
static void say_win_set_pixel_format(HDC dc) {
|
13
|
+
say_context_config *conf = say_context_get_config();
|
14
|
+
|
2
15
|
PIXELFORMATDESCRIPTOR pfd = {
|
3
16
|
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
|
4
|
-
1,
|
17
|
+
1, // version number
|
5
18
|
PFD_DRAW_TO_WINDOW | // support window
|
6
19
|
PFD_SUPPORT_OPENGL | // support OpenGL
|
7
20
|
PFD_DOUBLEBUFFER, // double buffered
|
@@ -12,18 +25,45 @@ static void say_win_set_pixel_format(HDC dc) {
|
|
12
25
|
0, // shift bit ignored
|
13
26
|
0, // no accumulation buffer
|
14
27
|
0, 0, 0, 0, // accum bits ignored
|
15
|
-
|
16
|
-
|
28
|
+
conf->depth_size, // z-buffer
|
29
|
+
conf->stencil_size, // stencil buffer
|
17
30
|
0, // no auxiliary buffer
|
18
31
|
PFD_MAIN_PLANE, // main layer
|
19
32
|
0, // reserved
|
20
33
|
0, 0, 0 // layer masks ignored
|
21
34
|
};
|
22
|
-
|
23
35
|
int format = ChoosePixelFormat(dc, &pfd);
|
24
36
|
SetPixelFormat(dc, format, &pfd);
|
25
37
|
}
|
26
38
|
|
39
|
+
static HGLRC say_win_context_build(HDC device, HGLRC share) {
|
40
|
+
say_gl_create_context create = (say_gl_create_context)
|
41
|
+
say_get_proc("wglCreateContextAttribsARB");
|
42
|
+
|
43
|
+
say_context_config *conf = say_context_get_config();
|
44
|
+
|
45
|
+
if (create && (conf->major_version > 3 || conf->debug)) {
|
46
|
+
GLint attribs[] = {
|
47
|
+
WGL_CONTEXT_MAJOR_VERSION_ARB, conf->major_version,
|
48
|
+
WGL_CONTEXT_MINOR_VERSION_ARB, conf->minor_version,
|
49
|
+
WGL_CONTEXT_FLAGS_ARB, conf->debug ? WGL_CONTEXT_DEBUG_BIT_ARB :
|
50
|
+
0,
|
51
|
+
WGL_CONTEXT_PROFILE_MASK_ARB, conf->core_profile ?
|
52
|
+
WGL_CONTEXT_CORE_PROFILE_BIT_ARB :
|
53
|
+
WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB
|
54
|
+
};
|
55
|
+
|
56
|
+
HGLRC ctxt = create(device, share, attribs);
|
57
|
+
if (ctxt)
|
58
|
+
return ctxt;
|
59
|
+
}
|
60
|
+
|
61
|
+
HGLRC ctxt = wglCreateContext(device);
|
62
|
+
if (share) wglShareLists(share, ctxt);
|
63
|
+
|
64
|
+
return ctxt;
|
65
|
+
}
|
66
|
+
|
27
67
|
void say_imp_context_free(say_imp_context ctxt) {
|
28
68
|
if (ctxt->context) {
|
29
69
|
if (wglGetCurrentContext() == ctxt->context) {
|
@@ -57,9 +97,8 @@ say_imp_context say_imp_context_create_shared(say_imp_context shared) {
|
|
57
97
|
ctxt->device = GetDC(ctxt->win);
|
58
98
|
say_win_set_pixel_format(ctxt->device);
|
59
99
|
|
60
|
-
ctxt->context =
|
61
|
-
|
62
|
-
wglShareLists(shared->context, ctxt->context);
|
100
|
+
ctxt->context = say_win_context_build(ctxt->device,
|
101
|
+
shared ? shared->context : NULL);
|
63
102
|
|
64
103
|
return ctxt;
|
65
104
|
}
|
@@ -75,9 +114,8 @@ say_imp_context say_imp_context_create_for_window(say_imp_context shared,
|
|
75
114
|
|
76
115
|
say_win_set_pixel_format(ctxt->device);
|
77
116
|
|
78
|
-
ctxt->context =
|
79
|
-
|
80
|
-
wglShareLists(shared->context, ctxt->context);
|
117
|
+
ctxt->context = say_win_context_build(ctxt->device,
|
118
|
+
shared ? shared->context : NULL);
|
81
119
|
|
82
120
|
return ctxt;
|
83
121
|
}
|
@@ -88,4 +126,4 @@ void say_imp_context_make_current(say_imp_context ctxt) {
|
|
88
126
|
|
89
127
|
void say_imp_context_update(say_imp_context ctxt) {
|
90
128
|
SwapBuffers(ctxt->device);
|
91
|
-
}
|
129
|
+
}
|
data/ext/say_win_window.h
CHANGED
@@ -200,7 +200,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
200
200
|
case WM_CLOSE: {
|
201
201
|
say_event ev;
|
202
202
|
ev.type = SAY_EVENT_QUIT;
|
203
|
-
|
203
|
+
mo_array_push(&win->events, &ev);
|
204
204
|
break;
|
205
205
|
}
|
206
206
|
|
@@ -214,7 +214,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
214
214
|
say_event ev;
|
215
215
|
ev.type = SAY_EVENT_RESIZE;
|
216
216
|
ev.ev.resize.size = say_make_vector2(w, h);
|
217
|
-
|
217
|
+
mo_array_push(&win->events, &ev);
|
218
218
|
}
|
219
219
|
|
220
220
|
break;
|
@@ -223,14 +223,14 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
223
223
|
case WM_SETFOCUS: {
|
224
224
|
say_event ev;
|
225
225
|
ev.type = SAY_EVENT_FOCUS_GAIN;
|
226
|
-
|
226
|
+
mo_array_push(&win->events, &ev);
|
227
227
|
break;
|
228
228
|
}
|
229
229
|
|
230
230
|
case WM_KILLFOCUS: {
|
231
231
|
say_event ev;
|
232
232
|
ev.type = SAY_EVENT_FOCUS_LOSS;
|
233
|
-
|
233
|
+
mo_array_push(&win->events, &ev);
|
234
234
|
break;
|
235
235
|
}
|
236
236
|
|
@@ -239,7 +239,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
239
239
|
ev.type = SAY_EVENT_TEXT_ENTERED;
|
240
240
|
ev.ev.text.text = (uint32_t)wparam;
|
241
241
|
|
242
|
-
|
242
|
+
mo_array_push(&win->events, &ev);
|
243
243
|
|
244
244
|
break;
|
245
245
|
}
|
@@ -253,7 +253,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
253
253
|
ev.ev.key.native_code = (uint32_t)wparam;
|
254
254
|
ev.ev.key.code = say_win_get_key(wparam, lparam);
|
255
255
|
|
256
|
-
|
256
|
+
mo_array_push(&win->events, &ev);
|
257
257
|
}
|
258
258
|
break;
|
259
259
|
}
|
@@ -266,7 +266,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
266
266
|
ev.ev.key.native_code = (uint32_t)wparam;
|
267
267
|
ev.ev.key.code = say_win_get_key(wparam, lparam);
|
268
268
|
|
269
|
-
|
269
|
+
mo_array_push(&win->events, &ev);
|
270
270
|
break;
|
271
271
|
}
|
272
272
|
|
@@ -281,7 +281,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
281
281
|
ev.ev.wheel.pos = say_make_vector2(pos.x, pos.y);
|
282
282
|
ev.ev.wheel.delta = (int16_t)(HIWORD(wparam)) / 120;
|
283
283
|
|
284
|
-
|
284
|
+
mo_array_push(&win->events, &ev);
|
285
285
|
break;
|
286
286
|
}
|
287
287
|
|
@@ -291,7 +291,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
291
291
|
ev.ev.button.pos = say_make_vector2(LOWORD(lparam), HIWORD(lparam));
|
292
292
|
ev.ev.button.button = SAY_BUTTON_LEFT;
|
293
293
|
|
294
|
-
|
294
|
+
mo_array_push(&win->events, &ev);
|
295
295
|
break;
|
296
296
|
}
|
297
297
|
|
@@ -301,7 +301,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
301
301
|
ev.ev.button.pos = say_make_vector2(LOWORD(lparam), HIWORD(lparam));
|
302
302
|
ev.ev.button.button = SAY_BUTTON_LEFT;
|
303
303
|
|
304
|
-
|
304
|
+
mo_array_push(&win->events, &ev);
|
305
305
|
break;
|
306
306
|
}
|
307
307
|
|
@@ -311,7 +311,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
311
311
|
ev.ev.button.pos = say_make_vector2(LOWORD(lparam), HIWORD(lparam));
|
312
312
|
ev.ev.button.button = SAY_BUTTON_RIGHT;
|
313
313
|
|
314
|
-
|
314
|
+
mo_array_push(&win->events, &ev);
|
315
315
|
break;
|
316
316
|
}
|
317
317
|
|
@@ -321,7 +321,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
321
321
|
ev.ev.button.pos = say_make_vector2(LOWORD(lparam), HIWORD(lparam));
|
322
322
|
ev.ev.button.button = SAY_BUTTON_RIGHT;
|
323
323
|
|
324
|
-
|
324
|
+
mo_array_push(&win->events, &ev);
|
325
325
|
break;
|
326
326
|
}
|
327
327
|
|
@@ -331,7 +331,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
331
331
|
ev.ev.button.pos = say_make_vector2(LOWORD(lparam), HIWORD(lparam));
|
332
332
|
ev.ev.button.button = SAY_BUTTON_MIDDLE;
|
333
333
|
|
334
|
-
|
334
|
+
mo_array_push(&win->events, &ev);
|
335
335
|
break;
|
336
336
|
}
|
337
337
|
|
@@ -341,7 +341,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
341
341
|
ev.ev.button.pos = say_make_vector2(LOWORD(lparam), HIWORD(lparam));
|
342
342
|
ev.ev.button.button = SAY_BUTTON_MIDDLE;
|
343
343
|
|
344
|
-
|
344
|
+
mo_array_push(&win->events, &ev);
|
345
345
|
break;
|
346
346
|
}
|
347
347
|
|
@@ -357,14 +357,14 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
357
357
|
|
358
358
|
say_event ev;
|
359
359
|
ev.type = SAY_EVENT_MOUSE_ENTERED;
|
360
|
-
|
360
|
+
mo_array_push(&win->events, &ev);
|
361
361
|
}
|
362
362
|
|
363
363
|
say_event ev;
|
364
364
|
ev.type = SAY_EVENT_MOUSE_MOTION;
|
365
365
|
ev.ev.motion.pos = say_make_vector2(LOWORD(lparam), HIWORD(lparam));
|
366
366
|
|
367
|
-
|
367
|
+
mo_array_push(&win->events, &ev);
|
368
368
|
break;
|
369
369
|
}
|
370
370
|
|
@@ -373,7 +373,7 @@ static void say_win_window_translate(say_win_window *win, UINT msg, WPARAM wpara
|
|
373
373
|
|
374
374
|
say_event ev;
|
375
375
|
ev.type = SAY_EVENT_MOUSE_LEFT;
|
376
|
-
|
376
|
+
mo_array_push(&win->events, &ev);
|
377
377
|
break;
|
378
378
|
}
|
379
379
|
}
|
@@ -466,14 +466,14 @@ say_imp_window say_imp_window_create() {
|
|
466
466
|
win->icon = 0;
|
467
467
|
win->cursor = LoadCursor(NULL, IDC_ARROW);;
|
468
468
|
|
469
|
-
win->events
|
469
|
+
mo_array_init(&win->events, sizeof(say_event));
|
470
470
|
|
471
471
|
return win;
|
472
472
|
}
|
473
473
|
|
474
474
|
void say_imp_window_free(say_imp_window win) {
|
475
475
|
say_imp_window_close(win);
|
476
|
-
|
476
|
+
mo_array_release(&win->events);
|
477
477
|
free(win);
|
478
478
|
}
|
479
479
|
|
@@ -588,7 +588,8 @@ bool say_imp_window_set_icon(say_imp_window win, struct say_image *img) {
|
|
588
588
|
return false;
|
589
589
|
}
|
590
590
|
|
591
|
-
say_color *orig = say_image_get_buffer(img)
|
591
|
+
say_color *orig = say_flip_color_buffer_copy(say_image_get_buffer(img),
|
592
|
+
w, h);
|
592
593
|
|
593
594
|
for (size_t i = 0; i < w * h; i++) {
|
594
595
|
buf[i * 4 + 0] = orig[i].b;
|
@@ -597,6 +598,8 @@ bool say_imp_window_set_icon(say_imp_window win, struct say_image *img) {
|
|
597
598
|
buf[i * 4 + 3] = orig[i].a;
|
598
599
|
}
|
599
600
|
|
601
|
+
free(orig);
|
602
|
+
|
600
603
|
win->icon = CreateIcon(GetModuleHandle(NULL), w, h, 1, 32, NULL, buf);
|
601
604
|
|
602
605
|
if (!win->icon) {
|
@@ -634,7 +637,7 @@ bool say_imp_window_resize(say_imp_window win, size_t w, size_t h) {
|
|
634
637
|
bool say_imp_window_poll_event(say_imp_window win, struct say_event *ev,
|
635
638
|
struct say_input *input) {
|
636
639
|
|
637
|
-
if (
|
640
|
+
if (win->events.size == 0) {
|
638
641
|
MSG message;
|
639
642
|
while (PeekMessage(&message, win->win, 0, 0, PM_REMOVE)) {
|
640
643
|
TranslateMessage(&message);
|
@@ -642,20 +645,20 @@ bool say_imp_window_poll_event(say_imp_window win, struct say_event *ev,
|
|
642
645
|
}
|
643
646
|
}
|
644
647
|
|
645
|
-
if (
|
648
|
+
if (win->events.size == 0) {
|
646
649
|
ev->type = SAY_EVENT_NONE;
|
647
650
|
return false;
|
648
651
|
}
|
649
652
|
else {
|
650
|
-
*ev =
|
651
|
-
|
653
|
+
*ev = mo_array_get_as(&win->events, 0, say_event);
|
654
|
+
mo_array_delete(&win->events, 0);
|
652
655
|
return true;
|
653
656
|
}
|
654
657
|
}
|
655
658
|
|
656
659
|
void say_imp_window_wait_event(say_imp_window win, struct say_event *ev,
|
657
660
|
struct say_input *input) {
|
658
|
-
while (
|
661
|
+
while (win->events.size == 0) {
|
659
662
|
WaitMessage();
|
660
663
|
|
661
664
|
MSG message;
|
@@ -665,6 +668,6 @@ void say_imp_window_wait_event(say_imp_window win, struct say_event *ev,
|
|
665
668
|
}
|
666
669
|
}
|
667
670
|
|
668
|
-
*ev =
|
669
|
-
|
671
|
+
*ev = mo_array_get_as(&win->events, 0, say_event);
|
672
|
+
mo_array_delete(&win->events, 0);
|
670
673
|
}
|
data/ext/say_window.c
CHANGED
@@ -25,7 +25,7 @@ say_window *say_window_create() {
|
|
25
25
|
win->show_cursor = true;
|
26
26
|
|
27
27
|
win->win = say_imp_window_create();
|
28
|
-
|
28
|
+
|
29
29
|
return win;
|
30
30
|
}
|
31
31
|
|
@@ -46,7 +46,7 @@ int say_window_open(say_window *win, size_t w, size_t h, const char *title,
|
|
46
46
|
}
|
47
47
|
|
48
48
|
win->show_cursor = true;
|
49
|
-
|
49
|
+
|
50
50
|
if (!say_imp_window_open(win->win, title, w, h, style))
|
51
51
|
return false;
|
52
52
|
|
@@ -121,7 +121,7 @@ static void say_window_process_event(say_window *win, say_event *ev) {
|
|
121
121
|
say_input_release(&win->input, ev->ev.key.code);
|
122
122
|
break;
|
123
123
|
}
|
124
|
-
|
124
|
+
|
125
125
|
case SAY_EVENT_MOUSE_MOTION: {
|
126
126
|
say_input_set_mouse_pos(&win->input, ev->ev.motion.pos);
|
127
127
|
break;
|