reflexion 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/ChangeLog +8 -0
  2. data/README +4 -0
  3. data/Rakefile +70 -0
  4. data/VERSION +1 -0
  5. data/examples/hello/Rakefile +41 -0
  6. data/examples/hello/main.cpp +18 -0
  7. data/examples/ruby/app.rb +13 -0
  8. data/examples/ruby/checker.rb +41 -0
  9. data/examples/ruby/fps.rb +49 -0
  10. data/examples/ruby/hello.rb +38 -0
  11. data/examples/ruby/key.rb +44 -0
  12. data/examples/ruby/shapes.rb +124 -0
  13. data/examples/ruby/text.rb +35 -0
  14. data/ext/reflex/application.cpp +151 -0
  15. data/ext/reflex/extconf.rb +57 -0
  16. data/ext/reflex/key.cpp +128 -0
  17. data/ext/reflex/native.cpp +22 -0
  18. data/ext/reflex/points.cpp +160 -0
  19. data/ext/reflex/reflex.cpp +83 -0
  20. data/ext/reflex/reflex.h +39 -0
  21. data/ext/reflex/window.cpp +357 -0
  22. data/include/reflex/application.h +50 -0
  23. data/include/reflex/defs.h +258 -0
  24. data/include/reflex/helpers.h +32 -0
  25. data/include/reflex/reflex.h +26 -0
  26. data/include/reflex/ruby/application.h +39 -0
  27. data/include/reflex/ruby/key.h +39 -0
  28. data/include/reflex/ruby/points.h +39 -0
  29. data/include/reflex/ruby/reflex.h +21 -0
  30. data/include/reflex/ruby/window.h +39 -0
  31. data/include/reflex/ruby.h +14 -0
  32. data/include/reflex/window.h +79 -0
  33. data/include/reflex.h +13 -0
  34. data/lib/reflex/application.rb +25 -0
  35. data/lib/reflex/autoinit.rb +11 -0
  36. data/lib/reflex/bounds.rb +133 -0
  37. data/lib/reflex/helpers.rb +52 -0
  38. data/lib/reflex/module.rb +30 -0
  39. data/lib/reflex/point.rb +69 -0
  40. data/lib/reflex/reflex.rb +21 -0
  41. data/lib/reflex/window.rb +65 -0
  42. data/lib/reflex.rb +11 -0
  43. data/reflex.gemspec +57 -0
  44. data/src/cocoa/application.mm +90 -0
  45. data/src/cocoa/applicationdata.h +51 -0
  46. data/src/cocoa/cocoaapplication.h +19 -0
  47. data/src/cocoa/cocoaapplication.mm +180 -0
  48. data/src/cocoa/cocoawindow.h +44 -0
  49. data/src/cocoa/cocoawindow.mm +171 -0
  50. data/src/cocoa/defs.h +34 -0
  51. data/src/cocoa/defs.mm +84 -0
  52. data/src/cocoa/openglview.h +17 -0
  53. data/src/cocoa/openglview.mm +186 -0
  54. data/src/cocoa/reflex.mm +68 -0
  55. data/src/cocoa/window.mm +118 -0
  56. data/src/cocoa/windowdata.h +51 -0
  57. data/src/defs.cpp +47 -0
  58. data/src/win32/defs.cpp +150 -0
  59. data/src/win32/opengl.cpp +95 -0
  60. data/src/win32/opengl.h +50 -0
  61. data/src/win32/reflex.cpp +65 -0
  62. data/src/win32/window.cpp +480 -0
  63. data/src/window.cpp +60 -0
  64. data/support.rb +56 -0
  65. data/task/ext.rake +42 -0
  66. data/task/gem.rake +33 -0
  67. data/task/git.rake +22 -0
  68. data/task/lib.rake +54 -0
  69. data/test/helpers.rb +15 -0
  70. data/test/test_bounds.rb +163 -0
  71. data/test/test_point.rb +81 -0
  72. data/test/test_reflex.rb +17 -0
  73. data/test/test_window.rb +39 -0
  74. metadata +173 -0
@@ -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
@@ -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