ray 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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;
|