reflexion 0.6.0 → 0.7.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.
Files changed (275) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/application.cpp +37 -6
  3. data/.doc/ext/reflex/capture_event.cpp +1 -1
  4. data/.doc/ext/reflex/chase_constraint.cpp +1 -1
  5. data/.doc/ext/reflex/clipboard.cpp +1 -1
  6. data/.doc/ext/reflex/color_event.cpp +76 -0
  7. data/.doc/ext/reflex/color_picker.cpp +113 -0
  8. data/.doc/ext/reflex/constraint.cpp +1 -1
  9. data/.doc/ext/reflex/contact_event.cpp +1 -1
  10. data/.doc/ext/reflex/control_change_event.cpp +1 -1
  11. data/.doc/ext/reflex/device.cpp +1 -1
  12. data/.doc/ext/reflex/device_event.cpp +1 -1
  13. data/.doc/ext/reflex/draw_event.cpp +1 -1
  14. data/.doc/ext/reflex/ellipse_shape.cpp +1 -1
  15. data/.doc/ext/reflex/event.cpp +1 -1
  16. data/.doc/ext/reflex/file_dialog.cpp +181 -0
  17. data/.doc/ext/reflex/file_event.cpp +103 -0
  18. data/.doc/ext/reflex/filter.cpp +1 -1
  19. data/.doc/ext/reflex/focus_event.cpp +1 -1
  20. data/.doc/ext/reflex/frame_event.cpp +1 -1
  21. data/.doc/ext/reflex/gamepad.cpp +48 -0
  22. data/.doc/ext/reflex/image_view.cpp +1 -1
  23. data/.doc/ext/reflex/key_event.cpp +1 -274
  24. data/.doc/ext/reflex/line_shape.cpp +1 -1
  25. data/.doc/ext/reflex/link_constraint.cpp +1 -1
  26. data/.doc/ext/reflex/menu.cpp +6 -5
  27. data/.doc/ext/reflex/midi.cpp +9 -2
  28. data/.doc/ext/reflex/midi_event.cpp +1 -1
  29. data/.doc/ext/reflex/motion_event.cpp +1 -1
  30. data/.doc/ext/reflex/native.cpp +18 -6
  31. data/.doc/ext/reflex/note_event.cpp +1 -1
  32. data/.doc/ext/reflex/pin.cpp +1 -1
  33. data/.doc/ext/reflex/pointer.cpp +1 -1
  34. data/.doc/ext/reflex/pointer_event.cpp +2 -2
  35. data/.doc/ext/reflex/polygon_shape.cpp +1 -1
  36. data/.doc/ext/reflex/rect_shape.cpp +1 -1
  37. data/.doc/ext/reflex/reflex.cpp +566 -232
  38. data/.doc/ext/reflex/screen.cpp +27 -1
  39. data/.doc/ext/reflex/scroll_event.cpp +1 -1
  40. data/.doc/ext/reflex/selector.cpp +1 -1
  41. data/.doc/ext/reflex/shape.cpp +1 -1
  42. data/.doc/ext/reflex/snap_constraint.cpp +1 -1
  43. data/.doc/ext/reflex/style.cpp +1 -1
  44. data/.doc/ext/reflex/style_length.cpp +1 -1
  45. data/.doc/ext/reflex/text_event.cpp +104 -0
  46. data/.doc/ext/reflex/timer.cpp +1 -1
  47. data/.doc/ext/reflex/timer_event.cpp +1 -1
  48. data/.doc/ext/reflex/update_event.cpp +1 -1
  49. data/.doc/ext/reflex/view.cpp +110 -56
  50. data/.doc/ext/reflex/wheel_constraint.cpp +1 -1
  51. data/.doc/ext/reflex/wheel_event.cpp +1 -1
  52. data/.doc/ext/reflex/window.cpp +226 -17
  53. data/.github/workflows/release-gem.yml +2 -49
  54. data/.github/workflows/tag.yml +5 -28
  55. data/.github/workflows/test.yml +1 -37
  56. data/ChangeLog.md +54 -0
  57. data/Gemfile.lock +13 -8
  58. data/Rakefile +13 -2
  59. data/Reflex.podspec +2 -2
  60. data/VERSION +1 -1
  61. data/ext/reflex/application.cpp +41 -6
  62. data/ext/reflex/capture_event.cpp +1 -1
  63. data/ext/reflex/chase_constraint.cpp +1 -1
  64. data/ext/reflex/clipboard.cpp +1 -1
  65. data/ext/reflex/color_event.cpp +80 -0
  66. data/ext/reflex/color_picker.cpp +121 -0
  67. data/ext/reflex/constraint.cpp +1 -1
  68. data/ext/reflex/contact_event.cpp +1 -1
  69. data/ext/reflex/control_change_event.cpp +1 -1
  70. data/ext/reflex/device.cpp +1 -1
  71. data/ext/reflex/device_event.cpp +1 -1
  72. data/ext/reflex/draw_event.cpp +1 -1
  73. data/ext/reflex/ellipse_shape.cpp +1 -1
  74. data/ext/reflex/event.cpp +1 -1
  75. data/ext/reflex/extconf.rb +4 -2
  76. data/ext/reflex/file_dialog.cpp +194 -0
  77. data/ext/reflex/file_event.cpp +108 -0
  78. data/ext/reflex/filter.cpp +1 -1
  79. data/ext/reflex/focus_event.cpp +1 -1
  80. data/ext/reflex/frame_event.cpp +1 -1
  81. data/ext/reflex/gamepad.cpp +50 -0
  82. data/ext/reflex/image_view.cpp +1 -1
  83. data/ext/reflex/key_event.cpp +1 -275
  84. data/ext/reflex/line_shape.cpp +1 -1
  85. data/ext/reflex/link_constraint.cpp +1 -1
  86. data/ext/reflex/menu.cpp +8 -7
  87. data/ext/reflex/midi.cpp +11 -3
  88. data/ext/reflex/midi_event.cpp +1 -1
  89. data/ext/reflex/motion_event.cpp +1 -1
  90. data/ext/reflex/native.cpp +18 -6
  91. data/ext/reflex/note_event.cpp +1 -1
  92. data/ext/reflex/pin.cpp +1 -1
  93. data/ext/reflex/pointer.cpp +1 -1
  94. data/ext/reflex/pointer_event.cpp +2 -2
  95. data/ext/reflex/polygon_shape.cpp +1 -1
  96. data/ext/reflex/rect_shape.cpp +1 -1
  97. data/ext/reflex/reflex.cpp +568 -232
  98. data/ext/reflex/screen.cpp +31 -2
  99. data/ext/reflex/scroll_event.cpp +1 -1
  100. data/ext/reflex/selector.cpp +1 -1
  101. data/ext/reflex/selector.h +9 -9
  102. data/ext/reflex/shape.cpp +1 -1
  103. data/ext/reflex/snap_constraint.cpp +1 -1
  104. data/ext/reflex/style.cpp +1 -1
  105. data/ext/reflex/style_length.cpp +1 -1
  106. data/ext/reflex/text_event.cpp +111 -0
  107. data/ext/reflex/timer.cpp +1 -1
  108. data/ext/reflex/timer_event.cpp +1 -1
  109. data/ext/reflex/update_event.cpp +1 -1
  110. data/ext/reflex/view.cpp +121 -61
  111. data/ext/reflex/wheel_constraint.cpp +1 -1
  112. data/ext/reflex/wheel_event.cpp +1 -1
  113. data/ext/reflex/window.cpp +256 -25
  114. data/include/reflex/application.h +10 -0
  115. data/include/reflex/color_picker.h +65 -0
  116. data/include/reflex/event.h +178 -88
  117. data/include/reflex/file_dialog.h +73 -0
  118. data/include/reflex/gamepad.h +3 -0
  119. data/include/reflex/menu.h +3 -3
  120. data/include/reflex/midi.h +3 -0
  121. data/include/reflex/reflex.h +2 -0
  122. data/include/reflex/ruby/application.h +6 -1
  123. data/include/reflex/ruby/color_picker.h +89 -0
  124. data/include/reflex/ruby/event.h +62 -29
  125. data/include/reflex/ruby/file_dialog.h +89 -0
  126. data/include/reflex/ruby/gamepad.h +46 -0
  127. data/include/reflex/ruby/reflex.h +3 -0
  128. data/include/reflex/ruby/view.h +92 -44
  129. data/include/reflex/ruby/window.h +60 -1
  130. data/include/reflex/ruby.h +3 -0
  131. data/include/reflex/screen.h +11 -2
  132. data/include/reflex/view.h +28 -16
  133. data/include/reflex/window.h +40 -8
  134. data/include/reflex.h +3 -0
  135. data/lib/reflex/application.rb +5 -5
  136. data/lib/reflex/autoinit.rb +3 -1
  137. data/lib/reflex/button.rb +3 -3
  138. data/lib/reflex/color_event.rb +16 -0
  139. data/lib/reflex/color_picker.rb +45 -0
  140. data/lib/reflex/control_change_event.rb +17 -0
  141. data/lib/reflex/file_dialog.rb +70 -0
  142. data/lib/reflex/file_event.rb +37 -0
  143. data/lib/reflex/helper.rb +58 -7
  144. data/lib/reflex/key_event.rb +9 -4
  145. data/lib/reflex/menu.rb +17 -1
  146. data/lib/reflex/model.rb +19 -19
  147. data/lib/reflex/note_event.rb +1 -1
  148. data/lib/reflex/pointer.rb +14 -3
  149. data/lib/reflex/pointer_event.rb +12 -1
  150. data/lib/reflex/reflex.rb +5 -0
  151. data/lib/reflex/shape.rb +14 -14
  152. data/lib/reflex/style.rb +16 -16
  153. data/lib/reflex/text_event.rb +40 -0
  154. data/lib/reflex/timer.rb +3 -3
  155. data/lib/reflex/view.rb +29 -14
  156. data/lib/reflex/wheel_event.rb +12 -3
  157. data/lib/reflex/window.rb +25 -13
  158. data/lib/reflex.rb +8 -2
  159. data/reflex.gemspec +4 -4
  160. data/samples/ime.rb +100 -0
  161. data/samples/ios/hello/hello.xcodeproj/project.pbxproj +236 -224
  162. data/samples/menu.rb +4 -1
  163. data/samples/model.rb +3 -3
  164. data/samples/test/alert.rb +93 -0
  165. data/samples/test/always_on.rb +76 -0
  166. data/samples/test/app_background.rb +51 -0
  167. data/samples/test/boundary.rb +75 -0
  168. data/samples/test/callback_exception.rb +101 -0
  169. data/samples/test/cancel.rb +53 -0
  170. data/samples/test/color_picker.rb +63 -0
  171. data/samples/test/file_dialog.rb +102 -0
  172. data/samples/window_style.rb +156 -0
  173. data/src/application.cpp +159 -18
  174. data/src/application.h +92 -7
  175. data/src/color_picker.cpp +113 -0
  176. data/src/color_picker.h +36 -0
  177. data/src/event.cpp +410 -252
  178. data/src/event.h +12 -0
  179. data/src/file_dialog.cpp +163 -0
  180. data/src/file_dialog.h +52 -0
  181. data/src/gamepad.cpp +42 -5
  182. data/src/gamepad.h +4 -0
  183. data/src/ios/app_delegate.mm +5 -3
  184. data/src/ios/application.mm +24 -0
  185. data/src/ios/color_picker.mm +19 -0
  186. data/src/ios/file_dialog.mm +21 -0
  187. data/src/ios/gamepad.mm +4 -4
  188. data/src/ios/menu.mm +5 -0
  189. data/src/ios/reflex.mm +8 -0
  190. data/src/ios/screen.mm +26 -0
  191. data/src/ios/view_controller.mm +2 -30
  192. data/src/ios/window.mm +38 -9
  193. data/src/menu.cpp +66 -4
  194. data/src/menu.h +17 -1
  195. data/src/midi.cpp +61 -31
  196. data/src/osx/app_delegate.h +4 -0
  197. data/src/osx/app_delegate.mm +102 -22
  198. data/src/osx/application.mm +88 -6
  199. data/src/osx/color_picker.mm +112 -0
  200. data/src/osx/event.h +10 -0
  201. data/src/osx/event.mm +84 -30
  202. data/src/osx/file_dialog.mm +168 -0
  203. data/src/osx/gamepad.mm +2 -2
  204. data/src/osx/gamepad_hid.mm +1 -1
  205. data/src/osx/menu.mm +177 -33
  206. data/src/osx/native_window.h +16 -2
  207. data/src/osx/native_window.mm +114 -57
  208. data/src/osx/opengl_view.h +2 -1
  209. data/src/osx/opengl_view.mm +184 -43
  210. data/src/osx/reflex.mm +38 -0
  211. data/src/osx/screen.mm +36 -0
  212. data/src/osx/window.mm +106 -24
  213. data/src/pointer.cpp +13 -4
  214. data/src/pointer.h +4 -0
  215. data/src/rays.h +46 -0
  216. data/src/sdl/application.cpp +68 -8
  217. data/src/sdl/color_picker.cpp +18 -0
  218. data/src/sdl/event.cpp +24 -3
  219. data/src/sdl/event.h +12 -0
  220. data/src/sdl/file_dialog.cpp +20 -0
  221. data/src/sdl/gamepad.cpp +3 -7
  222. data/src/sdl/menu.cpp +5 -0
  223. data/src/sdl/reflex.cpp +20 -0
  224. data/src/sdl/screen.cpp +36 -0
  225. data/src/sdl/window.cpp +142 -29
  226. data/src/shape.cpp +15 -10
  227. data/src/view.cpp +287 -198
  228. data/src/view.h +4 -2
  229. data/src/vk.h +416 -0
  230. data/src/win32/application.cpp +162 -12
  231. data/src/win32/application.h +20 -0
  232. data/src/win32/color_picker.cpp +82 -0
  233. data/src/win32/event.cpp +114 -12
  234. data/src/win32/event.h +21 -4
  235. data/src/win32/file_dialog.cpp +226 -0
  236. data/src/win32/gamepad.cpp +9 -2
  237. data/src/win32/menu.cpp +191 -53
  238. data/src/win32/menu.h +9 -1
  239. data/src/win32/opengl.cpp +2 -9
  240. data/src/win32/reflex.cpp +44 -3
  241. data/src/win32/screen.cpp +164 -3
  242. data/src/win32/screen.h +8 -0
  243. data/src/win32/tray.cpp +191 -0
  244. data/src/win32/tray.h +22 -0
  245. data/src/win32/vk.cpp +11 -0
  246. data/src/win32/window.cpp +809 -148
  247. data/src/win32/window.h +6 -0
  248. data/src/window.cpp +718 -185
  249. data/src/window.h +66 -33
  250. data/src/world.cpp +9 -1
  251. data/test/helper.rb +17 -0
  252. data/test/test_application.rb +90 -1
  253. data/test/test_chase_constraint.rb +1 -3
  254. data/test/test_color_event.rb +36 -0
  255. data/test/test_color_picker.rb +62 -0
  256. data/test/test_constraint.rb +2 -4
  257. data/test/test_event.rb +1 -1
  258. data/test/test_file_dialog.rb +48 -0
  259. data/test/test_file_event.rb +43 -0
  260. data/test/test_has_text_preedit.rb +54 -0
  261. data/test/test_key_event.rb +20 -5
  262. data/test/test_link_constraint.rb +1 -3
  263. data/test/test_menu.rb +40 -10
  264. data/test/test_pointer.rb +33 -23
  265. data/test/test_pointer_event.rb +24 -9
  266. data/test/test_reflex.rb +36 -0
  267. data/test/test_screen.rb +24 -2
  268. data/test/test_snap_constraint.rb +1 -3
  269. data/test/test_text_event.rb +54 -0
  270. data/test/test_view.rb +41 -4
  271. data/test/test_wheel_constraint.rb +1 -3
  272. data/test/test_wheel_event.rb +13 -5
  273. data/test/test_window.rb +196 -44
  274. metadata +80 -10
  275. data/.github/workflows/utils.rb +0 -127
@@ -0,0 +1,191 @@
1
+ #include "tray.h"
2
+
3
+
4
+ #include <vector>
5
+ #include <xot/windows.h>
6
+ #include <shellapi.h>
7
+ #include "reflex/exception.h"
8
+ #include "../rays.h"
9
+ #include "application.h"
10
+ #include "menu.h"
11
+
12
+
13
+ namespace Reflex
14
+ {
15
+
16
+
17
+ enum {TRAY_ICON_ID = 1, WM_TRAY_ICON = WM_APP + 1};
18
+
19
+ static HWND tray_hwnd = NULL;
20
+
21
+ static Menu* tray_menu = NULL;
22
+
23
+ static HICON tray_icon = NULL;
24
+
25
+ static bool tray_shown = false;
26
+
27
+
28
+ static void
29
+ popup_tray_menu ()
30
+ {
31
+ if (!tray_hwnd || !tray_menu) return;
32
+
33
+ POINT pos;
34
+ if (!GetCursorPos(&pos)) return;
35
+
36
+ Menu_track_popup(
37
+ Menu_get_hmenu(tray_menu),
38
+ TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_RIGHTBUTTON, pos, tray_hwnd);
39
+ }
40
+
41
+ static LRESULT CALLBACK
42
+ tray_wndproc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
43
+ {
44
+ if (Application_has_exception())
45
+ return DefWindowProcW(hwnd, msg, wp, lp);
46
+
47
+ return Application_guard([&]() -> LRESULT
48
+ {
49
+ switch (msg)
50
+ {
51
+ case WM_TRAY_ICON:
52
+ {
53
+ if (lp == WM_LBUTTONUP || lp == WM_RBUTTONUP)
54
+ popup_tray_menu();
55
+ return 0;
56
+ }
57
+
58
+ case WM_MENUCOMMAND:
59
+ {
60
+ Menu_call_command_event((HMENU) lp, (uint) wp);
61
+ return 0;
62
+ }
63
+
64
+ case WM_INITMENUPOPUP:
65
+ {
66
+ Menu_call_open_event((HMENU) wp);
67
+ break;
68
+ }
69
+
70
+ case WM_UNINITMENUPOPUP:
71
+ {
72
+ Menu_call_close_event((HMENU) wp);
73
+ break;
74
+ }
75
+ }
76
+ return DefWindowProcW(hwnd, msg, wp, lp);
77
+ }, (LRESULT) 0);
78
+ }
79
+
80
+ static HWND
81
+ create_tray_window ()
82
+ {
83
+ static const wchar_t* WINDOWCLASS = L"Reflex:TrayWindowClass";
84
+
85
+ WNDCLASSEXW wc = {sizeof(wc)};
86
+ wc.lpfnWndProc = tray_wndproc;
87
+ wc.hInstance = GetModuleHandle(NULL);
88
+ wc.lpszClassName = WINDOWCLASS;
89
+ if (!RegisterClassExW(&wc))
90
+ system_error(__FILE__, __LINE__);
91
+
92
+ HWND hwnd = CreateWindowExW(
93
+ WS_EX_TOOLWINDOW, WINDOWCLASS, L"", WS_POPUP,
94
+ 0, 0, 0, 0, NULL, NULL, wc.hInstance, NULL);
95
+ if (!hwnd)
96
+ system_error(__FILE__, __LINE__);
97
+
98
+ return hwnd;
99
+ }
100
+
101
+ static HICON
102
+ create_tray_icon (const Image& image)
103
+ {
104
+ HBITMAP color = Rays::Bitmap_get_hbitmap(image.bitmap());
105
+ if (!color) return NULL;
106
+
107
+ BITMAP bmp = {0};
108
+ GetObjectW(color, sizeof(bmp), &bmp);
109
+
110
+ // the mask is required but the alpha channel decides what shows,
111
+ // so it stays all zero
112
+ int stride = ((bmp.bmWidth + 15) / 16) * 2;
113
+ std::vector<BYTE> zero((size_t) stride * bmp.bmHeight, 0);
114
+ HBITMAP mask = CreateBitmap(bmp.bmWidth, bmp.bmHeight, 1, 1, zero.data());
115
+
116
+ ICONINFO info = {0};
117
+ info.fIcon = TRUE;
118
+ info.hbmColor = color;
119
+ info.hbmMask = mask;
120
+
121
+ HICON icon = CreateIconIndirect(&info);
122
+ DeleteObject(mask);
123
+ DeleteObject(color);
124
+ return icon;
125
+ }
126
+
127
+ void
128
+ Tray_update_icon (Application* app)
129
+ {
130
+ Menu* menu = app ? app->background_menu() : NULL;
131
+ if (!menu && app && app->background())
132
+ menu = app->menu();
133
+
134
+ if (!menu)
135
+ {
136
+ Tray_remove_icon();
137
+ Application_quit_if_should();
138
+ return;
139
+ }
140
+
141
+ if (!tray_hwnd)
142
+ tray_hwnd = create_tray_window();
143
+
144
+ if (tray_icon)
145
+ {
146
+ DestroyIcon(tray_icon);
147
+ tray_icon = NULL;
148
+ }
149
+ if (menu->image())
150
+ tray_icon = create_tray_icon(menu->image());
151
+
152
+ String tip = menu->label();
153
+ if (tip.empty()) tip = app->name();
154
+
155
+ NOTIFYICONDATAW nid = {sizeof(nid)};
156
+ nid.hWnd = tray_hwnd;
157
+ nid.uID = TRAY_ICON_ID;
158
+ nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
159
+ nid.uCallbackMessage = WM_TRAY_ICON;
160
+ nid.hIcon =
161
+ tray_icon ? tray_icon : LoadIconW(NULL, (LPCWSTR) IDI_APPLICATION);
162
+ lstrcpynW(nid.szTip, tip.to_wstr().c_str(), sizeof(nid.szTip) / sizeof(*nid.szTip));
163
+
164
+ Shell_NotifyIconW(tray_shown ? NIM_MODIFY : NIM_ADD, &nid);
165
+ tray_shown = true;
166
+ tray_menu = menu;
167
+ }
168
+
169
+ void
170
+ Tray_remove_icon ()
171
+ {
172
+ if (tray_shown)
173
+ {
174
+ NOTIFYICONDATAW nid = {sizeof(nid)};
175
+ nid.hWnd = tray_hwnd;
176
+ nid.uID = TRAY_ICON_ID;
177
+ Shell_NotifyIconW(NIM_DELETE, &nid);
178
+ tray_shown = false;
179
+ }
180
+
181
+ if (tray_icon)
182
+ {
183
+ DestroyIcon(tray_icon);
184
+ tray_icon = NULL;
185
+ }
186
+
187
+ tray_menu = NULL;
188
+ }
189
+
190
+
191
+ }// Reflex
data/src/win32/tray.h ADDED
@@ -0,0 +1,22 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __REFLEX_SRC_WIN32_TRAY_H__
4
+ #define __REFLEX_SRC_WIN32_TRAY_H__
5
+
6
+
7
+ #include "application.h"
8
+
9
+
10
+ namespace Reflex
11
+ {
12
+
13
+
14
+ void Tray_update_icon (Application* app);
15
+
16
+ void Tray_remove_icon ();
17
+
18
+
19
+ }// Reflex
20
+
21
+
22
+ #endif//EOH
data/src/win32/vk.cpp ADDED
@@ -0,0 +1,11 @@
1
+ // vk.h needs VK_NAVIGATION_*, but winuser.h defines them only when
2
+ // _WIN32_WINNT >= 0x0604, and RbConfig's CPPFLAGS sets it to 0x0600.
3
+ // so set a higher value here before vk.h includes windows.h.
4
+ #if _WIN32_WINNT >= 0x0604
5
+ #error _WIN32_WINNT is now high enough; delete this workaround
6
+ #endif
7
+
8
+ #undef _WIN32_WINNT
9
+ #define _WIN32_WINNT 0x0A00
10
+
11
+ #include "../vk.h"