reflexion 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +8 -0
- data/README +4 -0
- data/Rakefile +70 -0
- data/VERSION +1 -0
- data/examples/hello/Rakefile +41 -0
- data/examples/hello/main.cpp +18 -0
- data/examples/ruby/app.rb +13 -0
- data/examples/ruby/checker.rb +41 -0
- data/examples/ruby/fps.rb +49 -0
- data/examples/ruby/hello.rb +38 -0
- data/examples/ruby/key.rb +44 -0
- data/examples/ruby/shapes.rb +124 -0
- data/examples/ruby/text.rb +35 -0
- data/ext/reflex/application.cpp +151 -0
- data/ext/reflex/extconf.rb +57 -0
- data/ext/reflex/key.cpp +128 -0
- data/ext/reflex/native.cpp +22 -0
- data/ext/reflex/points.cpp +160 -0
- data/ext/reflex/reflex.cpp +83 -0
- data/ext/reflex/reflex.h +39 -0
- data/ext/reflex/window.cpp +357 -0
- data/include/reflex/application.h +50 -0
- data/include/reflex/defs.h +258 -0
- data/include/reflex/helpers.h +32 -0
- data/include/reflex/reflex.h +26 -0
- data/include/reflex/ruby/application.h +39 -0
- data/include/reflex/ruby/key.h +39 -0
- data/include/reflex/ruby/points.h +39 -0
- data/include/reflex/ruby/reflex.h +21 -0
- data/include/reflex/ruby/window.h +39 -0
- data/include/reflex/ruby.h +14 -0
- data/include/reflex/window.h +79 -0
- data/include/reflex.h +13 -0
- data/lib/reflex/application.rb +25 -0
- data/lib/reflex/autoinit.rb +11 -0
- data/lib/reflex/bounds.rb +133 -0
- data/lib/reflex/helpers.rb +52 -0
- data/lib/reflex/module.rb +30 -0
- data/lib/reflex/point.rb +69 -0
- data/lib/reflex/reflex.rb +21 -0
- data/lib/reflex/window.rb +65 -0
- data/lib/reflex.rb +11 -0
- data/reflex.gemspec +57 -0
- data/src/cocoa/application.mm +90 -0
- data/src/cocoa/applicationdata.h +51 -0
- data/src/cocoa/cocoaapplication.h +19 -0
- data/src/cocoa/cocoaapplication.mm +180 -0
- data/src/cocoa/cocoawindow.h +44 -0
- data/src/cocoa/cocoawindow.mm +171 -0
- data/src/cocoa/defs.h +34 -0
- data/src/cocoa/defs.mm +84 -0
- data/src/cocoa/openglview.h +17 -0
- data/src/cocoa/openglview.mm +186 -0
- data/src/cocoa/reflex.mm +68 -0
- data/src/cocoa/window.mm +118 -0
- data/src/cocoa/windowdata.h +51 -0
- data/src/defs.cpp +47 -0
- data/src/win32/defs.cpp +150 -0
- data/src/win32/opengl.cpp +95 -0
- data/src/win32/opengl.h +50 -0
- data/src/win32/reflex.cpp +65 -0
- data/src/win32/window.cpp +480 -0
- data/src/window.cpp +60 -0
- data/support.rb +56 -0
- data/task/ext.rake +42 -0
- data/task/gem.rake +33 -0
- data/task/git.rake +22 -0
- data/task/lib.rake +54 -0
- data/test/helpers.rb +15 -0
- data/test/test_bounds.rb +163 -0
- data/test/test_point.rb +81 -0
- data/test/test_reflex.rb +17 -0
- data/test/test_window.rb +39 -0
- metadata +173 -0
data/src/win32/defs.cpp
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
#include "reflex/defs.h"
|
2
|
+
|
3
|
+
|
4
|
+
namespace Reflex
|
5
|
+
{
|
6
|
+
|
7
|
+
|
8
|
+
bool
|
9
|
+
get_key (String* ch, int* c, uint* m, int key)
|
10
|
+
{
|
11
|
+
if (!chars || !code || !modifiers)
|
12
|
+
return false;
|
13
|
+
|
14
|
+
switch (code)
|
15
|
+
{
|
16
|
+
case VK_CANCEL: *c = KEY_CANCEL; return true;
|
17
|
+
case VK_BACK: *c = KEY_BACKSPACE; return true;
|
18
|
+
case VK_TAB: *c = KEY_TAB; return true;
|
19
|
+
case VK_CLEAR: *c = KEY_CLEAR; return true;
|
20
|
+
case VK_RETURN: *c = KEY_RETURN; return true;
|
21
|
+
case VK_SHIFT: *c = KEY_SHIFT; return true;
|
22
|
+
case VK_CONTROL: *c = KEY_CONTROL; return true;
|
23
|
+
case VK_MENU: *c = KEY_ALT; return true;
|
24
|
+
case VK_PAUSE: *c = KEY_PAUSE; return true;
|
25
|
+
case VK_CAPITAL: *c = KEY_CAPSLOCK; return true;
|
26
|
+
case VK_KANA: *c = KEY_KANA; return true;
|
27
|
+
case VK_JUNJA: *c = KEY_JUNJA; return true;
|
28
|
+
case VK_FINAL: *c = KEY_FINAL; return true;
|
29
|
+
case VK_KANJI: *c = KEY_KANJI; return true;
|
30
|
+
case VK_ESCAPE: *c = KEY_ESCAPE; return true;
|
31
|
+
case VK_CONVERT: *c = KEY_CONVERT; return true;
|
32
|
+
case VK_NONCONVERT: *c = KEY_NONCONVERT; return true;
|
33
|
+
case VK_ACCEPT: *c = KEY_ACCEPT; return true;
|
34
|
+
case VK_MODECHANGE: *c = KEY_MODECHANGE; return true;
|
35
|
+
case VK_SPACE: *c = KEY_SPACE; return true;
|
36
|
+
case VK_PRIOR: *c = KEY_PAGEUP; return true;
|
37
|
+
case VK_NEXT: *c = KEY_PAGEDOWN; return true;
|
38
|
+
case VK_END: *c = KEY_END; return true;
|
39
|
+
case VK_HOME: *c = KEY_HOME; return true;
|
40
|
+
case VK_LEFT: *c = KEY_LEFT; return true;
|
41
|
+
case VK_UP: *c = KEY_UP; return true;
|
42
|
+
case VK_RIGHT: *c = KEY_RIGHT; return true;
|
43
|
+
case VK_DOWN: *c = KEY_DOWN; return true;
|
44
|
+
case VK_SELECT: *c = KEY_SELECT; return true;
|
45
|
+
case VK_PRINT: *c = KEY_PRINT; return true;
|
46
|
+
case VK_EXECUTE: *c = KEY_EXECUTE; return true;
|
47
|
+
case VK_PRINTSCREEN: *c = KEY_PRINTSCREEN; return true;
|
48
|
+
case VK_INSERT: *c = KEY_INSERT; return true;
|
49
|
+
case VK_DELETE: *c = KEY_DELETE; return true;
|
50
|
+
case VK_HELP: *c = KEY_HELP; return true;
|
51
|
+
case VK_LWIN: *c = KEY_LWIN; return true;
|
52
|
+
case VK_RWIN: *c = KEY_RWIN; return true;
|
53
|
+
case VK_APPS: *c = KEY_APPS; return true;
|
54
|
+
case VK_SLEEP: *c = KEY_SLEEP; return true;
|
55
|
+
case VK_NUMPAD0: *ch = "0"; *m = MOD_NUMPAD; return true;
|
56
|
+
case VK_NUMPAD1: *ch = "1"; *m = MOD_NUMPAD; return true;
|
57
|
+
case VK_NUMPAD2: *ch = "2"; *m = MOD_NUMPAD; return true;
|
58
|
+
case VK_NUMPAD3: *ch = "3"; *m = MOD_NUMPAD; return true;
|
59
|
+
case VK_NUMPAD4: *ch = "4"; *m = MOD_NUMPAD; return true;
|
60
|
+
case VK_NUMPAD5: *ch = "5"; *m = MOD_NUMPAD; return true;
|
61
|
+
case VK_NUMPAD6: *ch = "6"; *m = MOD_NUMPAD; return true;
|
62
|
+
case VK_NUMPAD7: *ch = "7"; *m = MOD_NUMPAD; return true;
|
63
|
+
case VK_NUMPAD8: *ch = "8"; *m = MOD_NUMPAD; return true;
|
64
|
+
case VK_NUMPAD9: *ch = "9"; *m = MOD_NUMPAD; return true;
|
65
|
+
case VK_MULTIPLY: *ch = "*"; *m = MOD_NUMPAD; return true;
|
66
|
+
case VK_ADD: *ch = "+"; *m = MOD_NUMPAD; return true;
|
67
|
+
case VK_SEPARATOR: *ch = ":"; *m = MOD_NUMPAD; return true;
|
68
|
+
case VK_SUBTRACT: *ch = "-"; *m = MOD_NUMPAD; return true;
|
69
|
+
case VK_DECIMAL: *ch = "."; *m = MOD_NUMPAD; return true;
|
70
|
+
case VK_DEVICE: *ch = "/"; *m = MOD_NUMPAD; return true;
|
71
|
+
case VK_F1: *c = KEY_F1; *m = MOD_FUNCTION; return true;
|
72
|
+
case VK_F2: *c = KEY_F2; *m = MOD_FUNCTION; return true;
|
73
|
+
case VK_F3: *c = KEY_F3; *m = MOD_FUNCTION; return true;
|
74
|
+
case VK_F4: *c = KEY_F4; *m = MOD_FUNCTION; return true;
|
75
|
+
case VK_F5: *c = KEY_F5; *m = MOD_FUNCTION; return true;
|
76
|
+
case VK_F6: *c = KEY_F6; *m = MOD_FUNCTION; return true;
|
77
|
+
case VK_F7: *c = KEY_F7; *m = MOD_FUNCTION; return true;
|
78
|
+
case VK_F8: *c = KEY_F8; *m = MOD_FUNCTION; return true;
|
79
|
+
case VK_F9: *c = KEY_F9; *m = MOD_FUNCTION; return true;
|
80
|
+
case VK_F10: *c = KEY_F10; *m = MOD_FUNCTION; return true;
|
81
|
+
case VK_F11: *c = KEY_F11; *m = MOD_FUNCTION; return true;
|
82
|
+
case VK_F12: *c = KEY_F12; *m = MOD_FUNCTION; return true;
|
83
|
+
case VK_F13: *c = KEY_F13; *m = MOD_FUNCTION; return true;
|
84
|
+
case VK_F14: *c = KEY_F14; *m = MOD_FUNCTION; return true;
|
85
|
+
case VK_F15: *c = KEY_F15; *m = MOD_FUNCTION; return true;
|
86
|
+
case VK_F16: *c = KEY_F16; *m = MOD_FUNCTION; return true;
|
87
|
+
case VK_F17: *c = KEY_F17; *m = MOD_FUNCTION; return true;
|
88
|
+
case VK_F18: *c = KEY_F18; *m = MOD_FUNCTION; return true;
|
89
|
+
case VK_F19: *c = KEY_F19; *m = MOD_FUNCTION; return true;
|
90
|
+
case VK_F20: *c = KEY_F20; *m = MOD_FUNCTION; return true;
|
91
|
+
case VK_F21: *c = KEY_F21; *m = MOD_FUNCTION; return true;
|
92
|
+
case VK_F22: *c = KEY_F22; *m = MOD_FUNCTION; return true;
|
93
|
+
case VK_F23: *c = KEY_F23; *m = MOD_FUNCTION; return true;
|
94
|
+
case VK_F24: *c = KEY_F24; *m = MOD_FUNCTION; return true;
|
95
|
+
case VK_NUMLOCK: *c = KEY_NUMLOCK; return true;
|
96
|
+
case VK_SCROLL: *c = KEY_SCROLLLOCK; return true;
|
97
|
+
case VK_LSHIFT: *c = KEY_LSHIFT; return true;
|
98
|
+
case VK_RSHIFT: *c = KEY_RSHIFT; return true;
|
99
|
+
case VK_LCONTROL: *c = KEY_LCONTROL; return true;
|
100
|
+
case VK_RCONTROL: *c = KEY_RCONTROL; return true;
|
101
|
+
case VK_LMENU: *c = KEY_LALT; return true;
|
102
|
+
case VK_RMENU: *c = KEY_RALT; return true;
|
103
|
+
//case VK_OEM_1: *ch = ","; return true;
|
104
|
+
//case VK_OEM_PLUS: *ch = "},"; return true;
|
105
|
+
//case VK_OEM_COMMA: *ch = ","; return true;
|
106
|
+
//case VK_OEM_MINUS: *ch = "-"; return true;
|
107
|
+
//case VK_OEM_PERIOD: *ch = "."; return true;
|
108
|
+
//case VK_OEM_2: *ch = "/"; return true;
|
109
|
+
//case VK_OEM_3: *ch = "@"; return true;
|
110
|
+
//case VK_OEM_4: *ch = "["; return true;
|
111
|
+
//case VK_OEM_5: *ch = "\\"; return true;
|
112
|
+
//case VK_OEM_6: *ch = "]"; return true;
|
113
|
+
//case VK_OEM_7: *ch = "^"; return true;
|
114
|
+
//case VK_OEM_8: *c = KEY_OEM_8; return true;
|
115
|
+
//case VK_OEM_AX: *c = KEY_KEY_OEM_AX; return true;
|
116
|
+
//case VK_OEM_102: *ch = "\\"; return true;
|
117
|
+
//case VK_ICO_HELP: *c = KEY_ICO_HELP; return true;
|
118
|
+
//case VK_ICO_OO: *c = KEY_ICO_OO; return true;
|
119
|
+
//case VK_PROCESSKEY: *c = KEY_PROCESSKEY; return true;
|
120
|
+
//case VK_ICO_CLEAR: *c = KEY_ICO_CLEAR; return true;
|
121
|
+
//case VK_PACKET: *c = KEY_PACKET; return true;
|
122
|
+
//case VK_OEM_RESET: *c = KEY_OEM_RESET; return true;
|
123
|
+
//case VK_OEM_JUMP: *c = KEY_OEM_JUMP; return true;
|
124
|
+
//case VK_OEM_PA1: *c = KEY_OEM_PA1; return true;
|
125
|
+
//case VK_OEM_PA2: *c = KEY_OEM_PA2; return true;
|
126
|
+
//case VK_OEM_PA3: *c = KEY_OEM_PA3; return true;
|
127
|
+
//case VK_OEM_WSCTRL: *c = KEY_OEM_WSCTRL; return true;
|
128
|
+
//case VK_OEM_CUSEL: *c = KEY_OEM_CUSEL; return true;
|
129
|
+
//case VK_OEM_ATTN: *c = KEY_OEM_ATTN; return true;
|
130
|
+
//case VK_OEM_FINISH: *c = KEY_OEM_FINISH; return true;
|
131
|
+
//case VK_OEM_COPY: *c = KEY_OEM_COPY; return true;
|
132
|
+
//case VK_OEM_AUTO: *c = KEY_OEM_AUTO; return true;
|
133
|
+
//case VK_OEM_ENLW: *c = KEY_OEM_ENLW; return true;
|
134
|
+
//case VK_OEM_BACKTAB: *c = KEY_OEM_BACKTAB; return true;
|
135
|
+
//case VK_ATTN: *c = KEY_ATTN; return true;
|
136
|
+
//case VK_CRSEL: *c = KEY_CRSEL; return true;
|
137
|
+
//case VK_EXSEL: *c = KEY_EXSEL; return true;
|
138
|
+
//case VK_EREOF: *c = KEY_EREOF; return true;
|
139
|
+
//case VK_PLAY: *c = KEY_PLAY; return true;
|
140
|
+
//case VK_ZOOM: *c = KEY_ZOOM; return true;
|
141
|
+
//case VK_NONAME: *c = KEY_NONAME; return true;
|
142
|
+
//case VK_PA1: *c = KEY_PA1; return true;
|
143
|
+
//case VK_OEM_CLEAR: *c = KEY_OEM_CLEAR; return true;
|
144
|
+
}
|
145
|
+
|
146
|
+
return false;
|
147
|
+
}
|
148
|
+
|
149
|
+
|
150
|
+
}// Reflex
|
@@ -0,0 +1,95 @@
|
|
1
|
+
#include "opengl.h"
|
2
|
+
|
3
|
+
|
4
|
+
namespace Reflex
|
5
|
+
{
|
6
|
+
|
7
|
+
|
8
|
+
OpenGL::OpenGL ()
|
9
|
+
: hwnd(NULL), hdc(NULL), hrc(NULL)
|
10
|
+
{
|
11
|
+
}
|
12
|
+
|
13
|
+
OpenGL::~OpenGL ()
|
14
|
+
{
|
15
|
+
fin();
|
16
|
+
}
|
17
|
+
|
18
|
+
bool
|
19
|
+
OpenGL::init (HWND hwnd_)
|
20
|
+
{
|
21
|
+
if (!hwnd_ || *this) return false;
|
22
|
+
|
23
|
+
hwnd = hwnd_;
|
24
|
+
hdc = GetDC(hwnd);
|
25
|
+
if (!hdc) return false;
|
26
|
+
|
27
|
+
static const PIXELFORMATDESCRIPTOR PFD =
|
28
|
+
{
|
29
|
+
sizeof(PIXELFORMATDESCRIPTOR), 1,
|
30
|
+
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
|
31
|
+
PFD_TYPE_RGBA, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,
|
32
|
+
PFD_MAIN_PLANE, 0, 0, 0, 0
|
33
|
+
};
|
34
|
+
|
35
|
+
int pf = ChoosePixelFormat(hdc, &PFD);
|
36
|
+
if (pf == 0) return false;
|
37
|
+
|
38
|
+
if (!SetPixelFormat(hdc, pf, &PFD))
|
39
|
+
return false;
|
40
|
+
|
41
|
+
hrc = wglCreateContext(hdc);
|
42
|
+
if (!hrc) return false;
|
43
|
+
|
44
|
+
return make_current();
|
45
|
+
}
|
46
|
+
|
47
|
+
bool
|
48
|
+
OpenGL::fin ()
|
49
|
+
{
|
50
|
+
if (!*this) return false;
|
51
|
+
|
52
|
+
if (hrc)
|
53
|
+
{
|
54
|
+
wglMakeCurrent(NULL, NULL);
|
55
|
+
wglDeleteContext(hrc);
|
56
|
+
hrc = NULL;
|
57
|
+
}
|
58
|
+
|
59
|
+
if (hdc)
|
60
|
+
{
|
61
|
+
ReleaseDC(hwnd, hdc);
|
62
|
+
hdc = NULL;
|
63
|
+
}
|
64
|
+
|
65
|
+
hwnd = NULL;
|
66
|
+
return true;
|
67
|
+
}
|
68
|
+
|
69
|
+
bool
|
70
|
+
OpenGL::make_current ()
|
71
|
+
{
|
72
|
+
if (!*this) return false;
|
73
|
+
return wglMakeCurrent(hdc, hrc) != FALSE;
|
74
|
+
}
|
75
|
+
|
76
|
+
bool
|
77
|
+
OpenGL::swap_buffers ()
|
78
|
+
{
|
79
|
+
if (!*this) return false;
|
80
|
+
return SwapBuffers(hdc) != FALSE;
|
81
|
+
}
|
82
|
+
|
83
|
+
OpenGL::operator bool () const
|
84
|
+
{
|
85
|
+
return hwnd && hdc && hrc;
|
86
|
+
}
|
87
|
+
|
88
|
+
bool
|
89
|
+
OpenGL::operator ! () const
|
90
|
+
{
|
91
|
+
return !operator bool();
|
92
|
+
}
|
93
|
+
|
94
|
+
|
95
|
+
}// Reflex
|
data/src/win32/opengl.h
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#pragma once
|
3
|
+
#ifndef __REFLEX_WIN32_OPENGL_H__
|
4
|
+
#define __REFLEX_WIN32_OPENGL_H__
|
5
|
+
|
6
|
+
|
7
|
+
#include <windows.h>
|
8
|
+
#include <rays/opengl.h>
|
9
|
+
|
10
|
+
|
11
|
+
namespace Reflex
|
12
|
+
{
|
13
|
+
|
14
|
+
|
15
|
+
class OpenGL
|
16
|
+
{
|
17
|
+
|
18
|
+
public:
|
19
|
+
|
20
|
+
OpenGL ();
|
21
|
+
|
22
|
+
~OpenGL ();
|
23
|
+
|
24
|
+
bool init (HWND hwnd);
|
25
|
+
|
26
|
+
bool fin ();
|
27
|
+
|
28
|
+
bool make_current ();
|
29
|
+
|
30
|
+
bool swap_buffers ();
|
31
|
+
|
32
|
+
operator bool () const;
|
33
|
+
|
34
|
+
bool operator ! () const;
|
35
|
+
|
36
|
+
private:
|
37
|
+
|
38
|
+
HWND hwnd;
|
39
|
+
|
40
|
+
HDC hdc;
|
41
|
+
|
42
|
+
HGLRC hrc;
|
43
|
+
|
44
|
+
};// OpenGL
|
45
|
+
|
46
|
+
|
47
|
+
}// Reflex
|
48
|
+
|
49
|
+
|
50
|
+
#endif//EOH
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#include "reflex/reflex.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include <windows.h>
|
5
|
+
|
6
|
+
|
7
|
+
namespace Reflex
|
8
|
+
{
|
9
|
+
|
10
|
+
|
11
|
+
namespace global
|
12
|
+
{
|
13
|
+
|
14
|
+
|
15
|
+
static bool initialized = false, running = false;
|
16
|
+
|
17
|
+
|
18
|
+
}// global
|
19
|
+
|
20
|
+
|
21
|
+
bool
|
22
|
+
init ()
|
23
|
+
{
|
24
|
+
if (global::initialized) return false;
|
25
|
+
global::initialized = true;
|
26
|
+
|
27
|
+
return true;
|
28
|
+
}
|
29
|
+
|
30
|
+
bool
|
31
|
+
fin ()
|
32
|
+
{
|
33
|
+
if (!global::initialized) return false;
|
34
|
+
global::initialized = false;
|
35
|
+
|
36
|
+
return true;
|
37
|
+
}
|
38
|
+
|
39
|
+
bool
|
40
|
+
run ()
|
41
|
+
{
|
42
|
+
if (!global::initialized || global::running) return false;
|
43
|
+
global::running = true;
|
44
|
+
|
45
|
+
MSG msg;
|
46
|
+
while (GetMessage(&msg, NULL, 0, 0))
|
47
|
+
{
|
48
|
+
TranslateMessage(&msg);
|
49
|
+
DispatchMessage(&msg);
|
50
|
+
}
|
51
|
+
|
52
|
+
return msg.wParam == 0;
|
53
|
+
}
|
54
|
+
|
55
|
+
bool
|
56
|
+
quit ()
|
57
|
+
{
|
58
|
+
if (!global::initialized || !global::running) return false;
|
59
|
+
|
60
|
+
PostQuitMessage(0);
|
61
|
+
return true;
|
62
|
+
}
|
63
|
+
|
64
|
+
|
65
|
+
}// Reflex
|