reflexion 0.5.3 → 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.
- checksums.yaml +4 -4
- data/.doc/ext/reflex/application.cpp +56 -7
- data/.doc/ext/reflex/capture_event.cpp +1 -1
- data/.doc/ext/reflex/chase_constraint.cpp +84 -0
- data/.doc/ext/reflex/clipboard.cpp +65 -0
- data/.doc/ext/reflex/color_event.cpp +76 -0
- data/.doc/ext/reflex/color_picker.cpp +113 -0
- data/.doc/ext/reflex/constraint.cpp +135 -0
- data/.doc/ext/reflex/contact_event.cpp +1 -1
- data/.doc/ext/reflex/control_change_event.cpp +1 -1
- data/.doc/ext/reflex/device.cpp +1 -1
- data/.doc/ext/reflex/device_event.cpp +1 -1
- data/.doc/ext/reflex/draw_event.cpp +1 -1
- data/.doc/ext/reflex/ellipse_shape.cpp +1 -1
- data/.doc/ext/reflex/event.cpp +1 -1
- data/.doc/ext/reflex/file_dialog.cpp +181 -0
- data/.doc/ext/reflex/file_event.cpp +103 -0
- data/.doc/ext/reflex/filter.cpp +1 -1
- data/.doc/ext/reflex/focus_event.cpp +1 -1
- data/.doc/ext/reflex/frame_event.cpp +1 -1
- data/.doc/ext/reflex/gamepad.cpp +48 -0
- data/.doc/ext/reflex/image_view.cpp +1 -1
- data/.doc/ext/reflex/key_event.cpp +1 -274
- data/.doc/ext/reflex/line_shape.cpp +1 -1
- data/.doc/ext/reflex/link_constraint.cpp +178 -0
- data/.doc/ext/reflex/menu.cpp +303 -0
- data/.doc/ext/reflex/midi.cpp +9 -2
- data/.doc/ext/reflex/midi_event.cpp +1 -1
- data/.doc/ext/reflex/motion_event.cpp +1 -1
- data/.doc/ext/reflex/native.cpp +40 -10
- data/.doc/ext/reflex/note_event.cpp +1 -1
- data/.doc/ext/reflex/pin.cpp +156 -0
- data/.doc/ext/reflex/pointer.cpp +3 -1
- data/.doc/ext/reflex/pointer_event.cpp +3 -3
- data/.doc/ext/reflex/polygon_shape.cpp +1 -1
- data/.doc/ext/reflex/rect_shape.cpp +1 -1
- data/.doc/ext/reflex/reflex.cpp +606 -237
- data/.doc/ext/reflex/screen.cpp +27 -1
- data/.doc/ext/reflex/scroll_event.cpp +1 -1
- data/.doc/ext/reflex/selector.cpp +5 -5
- data/.doc/ext/reflex/shape.cpp +1 -1
- data/.doc/ext/reflex/snap_constraint.cpp +125 -0
- data/.doc/ext/reflex/style.cpp +1 -1
- data/.doc/ext/reflex/style_length.cpp +4 -3
- data/.doc/ext/reflex/text_event.cpp +104 -0
- data/.doc/ext/reflex/timer.cpp +1 -1
- data/.doc/ext/reflex/timer_event.cpp +1 -1
- data/.doc/ext/reflex/update_event.cpp +1 -1
- data/.doc/ext/reflex/view.cpp +206 -79
- data/.doc/ext/reflex/wheel_constraint.cpp +142 -0
- data/.doc/ext/reflex/wheel_event.cpp +1 -1
- data/.doc/ext/reflex/window.cpp +282 -31
- data/.github/workflows/release-gem.yml +2 -40
- data/.github/workflows/tag.yml +5 -28
- data/.github/workflows/test.yml +1 -28
- data/ChangeLog.md +79 -0
- data/Gemfile.lock +13 -8
- data/README.md +1 -0
- data/Rakefile +13 -2
- data/Reflex.podspec +2 -2
- data/VERSION +1 -1
- data/ext/reflex/application.cpp +62 -7
- data/ext/reflex/capture_event.cpp +1 -1
- data/ext/reflex/chase_constraint.cpp +89 -0
- data/ext/reflex/clipboard.cpp +69 -0
- data/ext/reflex/color_event.cpp +80 -0
- data/ext/reflex/color_picker.cpp +121 -0
- data/ext/reflex/constraint.cpp +146 -0
- data/ext/reflex/contact_event.cpp +1 -1
- data/ext/reflex/control_change_event.cpp +1 -1
- data/ext/reflex/device.cpp +1 -1
- data/ext/reflex/device_event.cpp +1 -1
- data/ext/reflex/draw_event.cpp +1 -1
- data/ext/reflex/ellipse_shape.cpp +1 -1
- data/ext/reflex/event.cpp +1 -1
- data/ext/reflex/extconf.rb +4 -2
- data/ext/reflex/file_dialog.cpp +194 -0
- data/ext/reflex/file_event.cpp +108 -0
- data/ext/reflex/filter.cpp +1 -1
- data/ext/reflex/focus_event.cpp +1 -1
- data/ext/reflex/frame_event.cpp +1 -1
- data/ext/reflex/gamepad.cpp +50 -0
- data/ext/reflex/image_view.cpp +1 -1
- data/ext/reflex/key_event.cpp +1 -275
- data/ext/reflex/line_shape.cpp +1 -1
- data/ext/reflex/link_constraint.cpp +194 -0
- data/ext/reflex/menu.cpp +331 -0
- data/ext/reflex/midi.cpp +11 -3
- data/ext/reflex/midi_event.cpp +1 -1
- data/ext/reflex/motion_event.cpp +1 -1
- data/ext/reflex/native.cpp +40 -10
- data/ext/reflex/note_event.cpp +1 -1
- data/ext/reflex/pin.cpp +165 -0
- data/ext/reflex/pointer.cpp +3 -1
- data/ext/reflex/pointer_event.cpp +3 -3
- data/ext/reflex/polygon_shape.cpp +1 -1
- data/ext/reflex/rect_shape.cpp +1 -1
- data/ext/reflex/reflex.cpp +608 -237
- data/ext/reflex/screen.cpp +31 -2
- data/ext/reflex/scroll_event.cpp +1 -1
- data/ext/reflex/selector.cpp +5 -5
- data/ext/reflex/selector.h +10 -10
- data/ext/reflex/shape.cpp +1 -1
- data/ext/reflex/snap_constraint.cpp +135 -0
- data/ext/reflex/style.cpp +1 -1
- data/ext/reflex/style_length.cpp +4 -3
- data/ext/reflex/text_event.cpp +111 -0
- data/ext/reflex/timer.cpp +1 -1
- data/ext/reflex/timer_event.cpp +1 -1
- data/ext/reflex/update_event.cpp +1 -1
- data/ext/reflex/view.cpp +236 -96
- data/ext/reflex/wheel_constraint.cpp +154 -0
- data/ext/reflex/wheel_event.cpp +1 -1
- data/ext/reflex/window.cpp +318 -40
- data/include/reflex/application.h +19 -0
- data/include/reflex/clipboard.h +53 -0
- data/include/reflex/color_picker.h +65 -0
- data/include/reflex/constraint.h +275 -0
- data/include/reflex/defs.h +204 -195
- data/include/reflex/event.h +180 -88
- data/include/reflex/file_dialog.h +73 -0
- data/include/reflex/gamepad.h +3 -0
- data/include/reflex/menu.h +120 -0
- data/include/reflex/midi.h +3 -0
- data/include/reflex/pin.h +68 -0
- data/include/reflex/pointer.h +4 -0
- data/include/reflex/reflex.h +2 -0
- data/include/reflex/ruby/application.h +6 -1
- data/include/reflex/ruby/clipboard.h +23 -0
- data/include/reflex/ruby/color_picker.h +89 -0
- data/include/reflex/ruby/constraint.h +94 -0
- data/include/reflex/ruby/event.h +62 -29
- data/include/reflex/ruby/file_dialog.h +89 -0
- data/include/reflex/ruby/gamepad.h +46 -0
- data/include/reflex/ruby/menu.h +103 -0
- data/include/reflex/ruby/pin.h +40 -0
- data/include/reflex/ruby/reflex.h +3 -0
- data/include/reflex/ruby/view.h +123 -39
- data/include/reflex/ruby/window.h +96 -19
- data/include/reflex/ruby.h +3 -0
- data/include/reflex/screen.h +11 -2
- data/include/reflex/view.h +66 -27
- data/include/reflex/window.h +57 -12
- data/include/reflex.h +8 -0
- data/lib/reflex/application.rb +5 -5
- data/lib/reflex/autoinit.rb +3 -1
- data/lib/reflex/button.rb +3 -3
- data/lib/reflex/chase_constraint.rb +15 -0
- data/lib/reflex/clipboard.rb +19 -0
- data/lib/reflex/color_event.rb +16 -0
- data/lib/reflex/color_picker.rb +45 -0
- data/lib/reflex/constraint.rb +29 -0
- data/lib/reflex/control_change_event.rb +17 -0
- data/lib/reflex/extension.rb +1 -1
- data/lib/reflex/file_dialog.rb +70 -0
- data/lib/reflex/file_event.rb +37 -0
- data/lib/reflex/helper.rb +79 -0
- data/lib/reflex/key_event.rb +14 -14
- data/lib/reflex/link_constraint.rb +31 -0
- data/lib/reflex/menu.rb +92 -0
- data/lib/reflex/model.rb +19 -19
- data/lib/reflex/note_event.rb +1 -1
- data/lib/reflex/pin.rb +39 -0
- data/lib/reflex/pointer.rb +30 -1
- data/lib/reflex/pointer_event.rb +13 -2
- data/lib/reflex/reflex.rb +5 -0
- data/lib/reflex/shape.rb +14 -14
- data/lib/reflex/snap_constraint.rb +28 -0
- data/lib/reflex/style.rb +16 -16
- data/lib/reflex/text_event.rb +40 -0
- data/lib/reflex/timer.rb +3 -3
- data/lib/reflex/view.rb +85 -18
- data/lib/reflex/wheel_constraint.rb +28 -0
- data/lib/reflex/wheel_event.rb +19 -1
- data/lib/reflex/window.rb +25 -13
- data/lib/reflex.rb +23 -8
- data/pod.rake +1 -1
- data/reflex.gemspec +4 -4
- data/samples/constraint.rb +152 -0
- data/samples/ime.rb +100 -0
- data/samples/ios/hello/hello.xcodeproj/project.pbxproj +236 -224
- data/samples/menu.rb +32 -0
- data/samples/model.rb +3 -3
- data/samples/test/alert.rb +93 -0
- data/samples/test/always_on.rb +76 -0
- data/samples/test/app_background.rb +51 -0
- data/samples/test/boundary.rb +75 -0
- data/samples/test/callback_exception.rb +101 -0
- data/samples/test/cancel.rb +53 -0
- data/samples/test/color_picker.rb +63 -0
- data/samples/test/file_dialog.rb +102 -0
- data/samples/window_style.rb +156 -0
- data/src/application.cpp +180 -20
- data/src/application.h +95 -5
- data/src/clipboard.cpp +81 -0
- data/src/color_picker.cpp +113 -0
- data/src/color_picker.h +36 -0
- data/src/constraint.cpp +1662 -0
- data/src/constraint.h +64 -0
- data/src/event.cpp +416 -252
- data/src/event.h +13 -2
- data/src/file_dialog.cpp +163 -0
- data/src/file_dialog.h +52 -0
- data/src/gamepad.cpp +42 -5
- data/src/gamepad.h +4 -0
- data/src/ios/app_delegate.mm +5 -3
- data/src/ios/application.mm +29 -0
- data/src/ios/clipboard.mm +44 -0
- data/src/ios/color_picker.mm +19 -0
- data/src/ios/event.h +6 -2
- data/src/ios/event.mm +31 -12
- data/src/ios/file_dialog.mm +21 -0
- data/src/ios/gamepad.mm +4 -4
- data/src/ios/menu.mm +41 -0
- data/src/ios/reflex.mm +8 -0
- data/src/ios/screen.mm +26 -0
- data/src/ios/view_controller.mm +47 -42
- data/src/ios/window.mm +44 -9
- data/src/menu.cpp +387 -0
- data/src/menu.h +81 -0
- data/src/midi.cpp +61 -31
- data/src/osx/app_delegate.h +4 -0
- data/src/osx/app_delegate.mm +168 -139
- data/src/osx/application.mm +103 -5
- data/src/osx/clipboard.mm +45 -0
- data/src/osx/color_picker.mm +112 -0
- data/src/osx/event.h +10 -0
- data/src/osx/event.mm +114 -30
- data/src/osx/file_dialog.mm +168 -0
- data/src/osx/gamepad.mm +2 -2
- data/src/osx/gamepad_hid.mm +1 -1
- data/src/osx/menu.h +25 -0
- data/src/osx/menu.mm +516 -0
- data/src/osx/native_window.h +16 -2
- data/src/osx/native_window.mm +141 -57
- data/src/osx/opengl_view.h +2 -1
- data/src/osx/opengl_view.mm +229 -37
- data/src/osx/reflex.mm +38 -0
- data/src/osx/screen.mm +36 -0
- data/src/osx/window.mm +117 -24
- data/src/pin.cpp +137 -0
- data/src/pointer.cpp +36 -16
- data/src/pointer.h +10 -0
- data/src/rays.h +46 -0
- data/src/sdl/application.cpp +73 -8
- data/src/sdl/clipboard.cpp +39 -0
- data/src/sdl/color_picker.cpp +18 -0
- data/src/sdl/event.cpp +44 -6
- data/src/sdl/event.h +18 -3
- data/src/sdl/file_dialog.cpp +20 -0
- data/src/sdl/gamepad.cpp +3 -7
- data/src/sdl/menu.cpp +40 -0
- data/src/sdl/reflex.cpp +20 -0
- data/src/sdl/screen.cpp +36 -0
- data/src/sdl/window.cpp +168 -37
- data/src/shape.cpp +15 -10
- data/src/view.cpp +583 -233
- data/src/view.h +22 -4
- data/src/vk.h +416 -0
- data/src/win32/application.cpp +167 -12
- data/src/win32/application.h +20 -0
- data/src/win32/clipboard.cpp +210 -0
- data/src/win32/color_picker.cpp +82 -0
- data/src/win32/event.cpp +123 -11
- data/src/win32/event.h +22 -3
- data/src/win32/file_dialog.cpp +226 -0
- data/src/win32/gamepad.cpp +9 -2
- data/src/win32/menu.cpp +490 -0
- data/src/win32/menu.h +35 -0
- data/src/win32/opengl.cpp +2 -9
- data/src/win32/reflex.cpp +44 -3
- data/src/win32/screen.cpp +164 -3
- data/src/win32/screen.h +8 -0
- data/src/win32/tray.cpp +191 -0
- data/src/win32/tray.h +22 -0
- data/src/win32/vk.cpp +11 -0
- data/src/win32/window.cpp +858 -135
- data/src/win32/window.h +9 -0
- data/src/window.cpp +929 -183
- data/src/window.h +77 -33
- data/src/world.cpp +86 -15
- data/src/world.h +9 -2
- data/test/helper.rb +24 -0
- data/test/test_application.rb +101 -1
- data/test/test_chase_constraint.rb +122 -0
- data/test/test_clipboard.rb +54 -0
- data/test/test_color_event.rb +36 -0
- data/test/test_color_picker.rb +62 -0
- data/test/test_constraint.rb +184 -0
- data/test/test_event.rb +1 -1
- data/test/test_file_dialog.rb +48 -0
- data/test/test_file_event.rb +43 -0
- data/test/test_has_text_preedit.rb +54 -0
- data/test/test_key_event.rb +23 -2
- data/test/test_link_constraint.rb +237 -0
- data/test/test_menu.rb +237 -0
- data/test/test_pin.rb +65 -0
- data/test/test_pointer.rb +50 -26
- data/test/test_pointer_event.rb +25 -10
- data/test/test_reflex.rb +36 -0
- data/test/test_screen.rb +24 -2
- data/test/test_snap_constraint.rb +140 -0
- data/test/test_text_event.rb +54 -0
- data/test/test_view.rb +152 -25
- data/test/test_wheel_constraint.rb +125 -0
- data/test/test_wheel_event.rb +24 -10
- data/test/test_window.rb +205 -43
- metadata +154 -10
- data/.github/workflows/utils.rb +0 -127
data/src/sdl/window.cpp
CHANGED
|
@@ -24,6 +24,10 @@ namespace Reflex
|
|
|
24
24
|
|
|
25
25
|
bool need_rebind = false;
|
|
26
26
|
|
|
27
|
+
// whether the input method is composing, which is what tells the text
|
|
28
|
+
// it commits apart from the text a key produces on its own
|
|
29
|
+
bool composing = false;
|
|
30
|
+
|
|
27
31
|
OpenGLContext context;
|
|
28
32
|
|
|
29
33
|
mutable String title_tmp;
|
|
@@ -87,13 +91,16 @@ namespace Reflex
|
|
|
87
91
|
if (win) win->release();
|
|
88
92
|
|
|
89
93
|
if (Window_all().empty())
|
|
90
|
-
Reflex::app()
|
|
94
|
+
Reflex::Application_call_quit(Reflex::app());
|
|
91
95
|
}
|
|
92
96
|
|
|
93
97
|
Uint32 to_sdl_flags (uint flags)
|
|
94
98
|
{
|
|
95
99
|
Uint32 sdl_flags = SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI;
|
|
96
100
|
|
|
101
|
+
if (!Xot::has_flag(flags, Window::FLAG_TITLEBAR_BACKGROUND))
|
|
102
|
+
sdl_flags |= SDL_WINDOW_BORDERLESS;
|
|
103
|
+
|
|
97
104
|
if (Xot::has_flag(flags, Window::FLAG_RESIZABLE))
|
|
98
105
|
sdl_flags |= SDL_WINDOW_RESIZABLE;
|
|
99
106
|
|
|
@@ -157,32 +164,60 @@ namespace Reflex
|
|
|
157
164
|
Window_call_draw_event(win, &e);
|
|
158
165
|
}
|
|
159
166
|
|
|
167
|
+
static bool
|
|
168
|
+
accepts_text_input (Window* win)
|
|
169
|
+
{
|
|
170
|
+
const View* focus = win->focus();
|
|
171
|
+
return focus && focus->accepts_text_input();
|
|
172
|
+
}
|
|
173
|
+
|
|
160
174
|
static void
|
|
161
|
-
|
|
175
|
+
update_text_input_rect (Window* win)
|
|
162
176
|
{
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
Rays::Point dsize = b.size() - win->self->prev_size;
|
|
166
|
-
win->self->prev_position = b.position();
|
|
167
|
-
win->self->prev_size = b.size();
|
|
177
|
+
const View* focus = win->focus();
|
|
178
|
+
if (!focus) return;
|
|
168
179
|
|
|
169
|
-
|
|
180
|
+
Bounds b = focus->text_input_bounds();
|
|
181
|
+
Point p1 = focus->to_window(b.position());
|
|
182
|
+
Point p2 = focus->to_window(b.position() + b.size());
|
|
170
183
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
{
|
|
175
|
-
Rays::Bounds b = win->frame();
|
|
176
|
-
b.move_to(0, 0);
|
|
184
|
+
SDL_Rect rect = {(int) p1.x, (int) p1.y, (int) (p2.x - p1.x), (int) (p2.y - p1.y)};
|
|
185
|
+
SDL_SetTextInputRect(&rect);
|
|
186
|
+
}
|
|
177
187
|
|
|
178
|
-
|
|
179
|
-
|
|
188
|
+
static void
|
|
189
|
+
preedit (Window* win, const char* text, int offset, int size)
|
|
190
|
+
{
|
|
191
|
+
WindowData* self = get_data(win);
|
|
180
192
|
|
|
181
|
-
|
|
182
|
-
|
|
193
|
+
// the input method reports an empty composition before anything is typed
|
|
194
|
+
bool empty = !text || *text == '\0';
|
|
195
|
+
if (empty && !self->composing)
|
|
196
|
+
return;
|
|
183
197
|
|
|
184
|
-
|
|
185
|
-
|
|
198
|
+
self->composing = !empty;
|
|
199
|
+
|
|
200
|
+
if (!accepts_text_input(win))
|
|
201
|
+
return;
|
|
202
|
+
|
|
203
|
+
NativeTextEvent e(text ? text : "", offset, size);
|
|
204
|
+
Window_call_text_event(win, &e);
|
|
205
|
+
|
|
206
|
+
update_text_input_rect(win);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
static void
|
|
210
|
+
commit (Window* win, const SDL_TextInputEvent& event)
|
|
211
|
+
{
|
|
212
|
+
WindowData* self = get_data(win);
|
|
213
|
+
|
|
214
|
+
bool composed = self->composing;
|
|
215
|
+
|
|
216
|
+
if (!accepts_text_input(win))
|
|
217
|
+
return;
|
|
218
|
+
|
|
219
|
+
NativeTextEvent e(event);
|
|
220
|
+
Window_call_text_event(win, &e, composed);
|
|
186
221
|
}
|
|
187
222
|
|
|
188
223
|
|
|
@@ -196,9 +231,12 @@ namespace Reflex
|
|
|
196
231
|
Window_default_flags ()
|
|
197
232
|
{
|
|
198
233
|
return
|
|
199
|
-
Window::FLAG_CLOSABLE
|
|
200
|
-
Window::
|
|
201
|
-
Window::
|
|
234
|
+
Window::FLAG_CLOSABLE |
|
|
235
|
+
Window::FLAG_MINIMIZABLE |
|
|
236
|
+
Window::FLAG_RESIZABLE |
|
|
237
|
+
Window::FLAG_TITLEBAR_BUTTONS |
|
|
238
|
+
Window::FLAG_TITLEBAR_BACKGROUND |
|
|
239
|
+
Window::FLAG_SHADOW;
|
|
202
240
|
}
|
|
203
241
|
|
|
204
242
|
void
|
|
@@ -283,6 +321,12 @@ namespace Reflex
|
|
|
283
321
|
return Bounds(x, y, w, h);
|
|
284
322
|
}
|
|
285
323
|
|
|
324
|
+
void
|
|
325
|
+
Window_set_menu (Window* window, Menu* menu)
|
|
326
|
+
{
|
|
327
|
+
not_implemented_error(__FILE__, __LINE__);
|
|
328
|
+
}
|
|
329
|
+
|
|
286
330
|
Screen
|
|
287
331
|
Window_get_screen (const Window& win)
|
|
288
332
|
{
|
|
@@ -305,13 +349,48 @@ namespace Reflex
|
|
|
305
349
|
if (!*win)
|
|
306
350
|
invalid_state_error(__FILE__, __LINE__);
|
|
307
351
|
|
|
352
|
+
bool buttons = Xot::has_flag(flags, Window::FLAG_TITLEBAR_BUTTONS);
|
|
353
|
+
bool background = Xot::has_flag(flags, Window::FLAG_TITLEBAR_BACKGROUND);
|
|
354
|
+
if (buttons != background)
|
|
355
|
+
{
|
|
356
|
+
argument_error(
|
|
357
|
+
__FILE__, __LINE__,
|
|
358
|
+
"FLAG_TITLEBAR_BUTTONS and FLAG_TITLEBAR_BACKGROUND must match");
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
if (Xot::has_flag(flags, Window::FLAG_UNLISTED))
|
|
362
|
+
not_implemented_error(__FILE__, __LINE__, "FLAG_UNLISTED");
|
|
363
|
+
|
|
364
|
+
if (!Xot::has_flag(flags, Window::FLAG_SHADOW))
|
|
365
|
+
not_implemented_error(__FILE__, __LINE__, "missing FLAG_SHADOW");
|
|
366
|
+
|
|
367
|
+
if (Xot::has_flag(flags, Window::FLAG_TRANSPARENT))
|
|
368
|
+
not_implemented_error(__FILE__, __LINE__, "FLAG_TRANSPARENT");
|
|
369
|
+
|
|
370
|
+
if (Xot::has_flag(flags, Window::FLAG_ALWAYS_ON_BOTTOM))
|
|
371
|
+
not_implemented_error(__FILE__, __LINE__, "FLAG_ALWAYS_ON_BOTTOM");
|
|
372
|
+
|
|
373
|
+
if (Xot::has_flag(flags, Window::FLAG_POINTER_THROUGH))
|
|
374
|
+
not_implemented_error(__FILE__, __LINE__, "FLAG_POINTER_THROUGH");
|
|
375
|
+
|
|
308
376
|
WindowData* self = get_data(win);
|
|
309
377
|
Uint32 sdl_flags = self->to_sdl_flags(flags);
|
|
310
378
|
|
|
379
|
+
#if SDL_VERSION_ATLEAST(2, 0, 16)
|
|
380
|
+
SDL_SetWindowAlwaysOnTop(
|
|
381
|
+
self->native,
|
|
382
|
+
Xot::has_flag(flags, Window::FLAG_ALWAYS_ON_TOP) ? SDL_TRUE : SDL_FALSE);
|
|
383
|
+
#else
|
|
384
|
+
if (Xot::has_flag(flags, Window::FLAG_ALWAYS_ON_TOP))
|
|
385
|
+
not_implemented_error(__FILE__, __LINE__, "FLAG_ALWAYS_ON_TOP");
|
|
386
|
+
#endif
|
|
387
|
+
|
|
311
388
|
SDL_SetWindowResizable(
|
|
312
389
|
self->native,
|
|
313
390
|
sdl_flags & SDL_WINDOW_RESIZABLE ? SDL_TRUE : SDL_FALSE);
|
|
314
391
|
|
|
392
|
+
SDL_SetWindowBordered(self->native, background ? SDL_TRUE : SDL_FALSE);
|
|
393
|
+
|
|
315
394
|
int result = SDL_SetWindowFullscreen(
|
|
316
395
|
self->native,
|
|
317
396
|
sdl_flags & SDL_WINDOW_FULLSCREEN_DESKTOP ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
|
|
@@ -338,6 +417,17 @@ namespace Reflex
|
|
|
338
417
|
return (float) draw_w / (float) win_w;
|
|
339
418
|
}
|
|
340
419
|
|
|
420
|
+
void
|
|
421
|
+
Window_set_pointer_through (Window* window, bool through)
|
|
422
|
+
{
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
bool
|
|
426
|
+
Window_is_pointer_over_and_uncovered (Point* position, const Window& window)
|
|
427
|
+
{
|
|
428
|
+
return false;
|
|
429
|
+
}
|
|
430
|
+
|
|
341
431
|
Window*
|
|
342
432
|
Window_from (SDL_Window* native)
|
|
343
433
|
{
|
|
@@ -358,7 +448,7 @@ namespace Reflex
|
|
|
358
448
|
switch (event.window.event)
|
|
359
449
|
{
|
|
360
450
|
case SDL_WINDOWEVENT_CLOSE:
|
|
361
|
-
win
|
|
451
|
+
Window_call_close(win);
|
|
362
452
|
break;
|
|
363
453
|
|
|
364
454
|
case SDL_WINDOWEVENT_EXPOSED:
|
|
@@ -373,7 +463,7 @@ namespace Reflex
|
|
|
373
463
|
case SDL_WINDOWEVENT_RESTORED:
|
|
374
464
|
case SDL_WINDOWEVENT_MAXIMIZED:
|
|
375
465
|
case SDL_WINDOWEVENT_MINIMIZED:
|
|
376
|
-
|
|
466
|
+
Window_call_frame_event(win);
|
|
377
467
|
break;
|
|
378
468
|
|
|
379
469
|
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
|
@@ -381,8 +471,23 @@ namespace Reflex
|
|
|
381
471
|
break;
|
|
382
472
|
|
|
383
473
|
case SDL_WINDOWEVENT_FOCUS_LOST:
|
|
474
|
+
Window_cancel_active_pointers(win);
|
|
384
475
|
Window_call_deactivate_event(win);
|
|
385
476
|
break;
|
|
477
|
+
|
|
478
|
+
case SDL_WINDOWEVENT_ENTER:
|
|
479
|
+
{
|
|
480
|
+
NativePointerEvent e(self->native, Pointer::ENTER);
|
|
481
|
+
Window_call_pointer_event(win, &e);
|
|
482
|
+
break;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
case SDL_WINDOWEVENT_LEAVE:
|
|
486
|
+
{
|
|
487
|
+
NativePointerEvent e(self->native, Pointer::LEAVE);
|
|
488
|
+
Window_call_pointer_event(win, &e);
|
|
489
|
+
break;
|
|
490
|
+
}
|
|
386
491
|
}
|
|
387
492
|
break;
|
|
388
493
|
}
|
|
@@ -401,25 +506,54 @@ namespace Reflex
|
|
|
401
506
|
break;
|
|
402
507
|
}
|
|
403
508
|
|
|
509
|
+
case SDL_TEXTEDITING:
|
|
510
|
+
{
|
|
511
|
+
preedit(win, event.edit.text, event.edit.start, event.edit.length);
|
|
512
|
+
break;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
#if SDL_VERSION_ATLEAST(2, 0, 22)
|
|
516
|
+
case SDL_TEXTEDITING_EXT:
|
|
517
|
+
{
|
|
518
|
+
preedit(win, event.editExt.text, event.editExt.start, event.editExt.length);
|
|
519
|
+
break;
|
|
520
|
+
}
|
|
521
|
+
#endif
|
|
522
|
+
|
|
523
|
+
case SDL_TEXTINPUT:
|
|
524
|
+
{
|
|
525
|
+
commit(win, event.text);
|
|
526
|
+
break;
|
|
527
|
+
}
|
|
528
|
+
|
|
404
529
|
case SDL_MOUSEBUTTONDOWN:
|
|
405
530
|
{
|
|
406
|
-
NativePointerEvent e(
|
|
407
|
-
event.button, self->native, Pointer::DOWN);
|
|
531
|
+
NativePointerEvent e(self->native, event.button, Pointer::DOWN);
|
|
408
532
|
Window_call_pointer_event(win, &e);
|
|
533
|
+
|
|
534
|
+
#if SDL_VERSION_ATLEAST(2, 0, 4)
|
|
535
|
+
SDL_CaptureMouse(SDL_TRUE);
|
|
536
|
+
#endif
|
|
409
537
|
break;
|
|
410
538
|
}
|
|
411
539
|
|
|
412
540
|
case SDL_MOUSEBUTTONUP:
|
|
413
541
|
{
|
|
414
|
-
NativePointerEvent e(
|
|
415
|
-
event.button, self->native, Pointer::UP);
|
|
542
|
+
NativePointerEvent e(self->native, event.button, Pointer::UP);
|
|
416
543
|
Window_call_pointer_event(win, &e);
|
|
544
|
+
|
|
545
|
+
#if SDL_VERSION_ATLEAST(2, 0, 4)
|
|
546
|
+
static const uint32_t BUTTONS =
|
|
547
|
+
SDL_BUTTON_LMASK | SDL_BUTTON_RMASK | SDL_BUTTON_MMASK;
|
|
548
|
+
if ((SDL_GetMouseState(NULL, NULL) & BUTTONS) == 0)
|
|
549
|
+
SDL_CaptureMouse(SDL_FALSE);
|
|
550
|
+
#endif
|
|
417
551
|
break;
|
|
418
552
|
}
|
|
419
553
|
|
|
420
554
|
case SDL_MOUSEMOTION:
|
|
421
555
|
{
|
|
422
|
-
NativePointerEvent e(event.motion
|
|
556
|
+
NativePointerEvent e(self->native, event.motion);
|
|
423
557
|
Window_call_pointer_event(win, &e);
|
|
424
558
|
break;
|
|
425
559
|
}
|
|
@@ -433,21 +567,21 @@ namespace Reflex
|
|
|
433
567
|
|
|
434
568
|
case SDL_FINGERDOWN:
|
|
435
569
|
{
|
|
436
|
-
NativePointerEvent e(event.tfinger,
|
|
570
|
+
NativePointerEvent e(self->native, event.tfinger, Pointer::DOWN);
|
|
437
571
|
Window_call_pointer_event(win, &e);
|
|
438
572
|
break;
|
|
439
573
|
}
|
|
440
574
|
|
|
441
575
|
case SDL_FINGERUP:
|
|
442
576
|
{
|
|
443
|
-
NativePointerEvent e(event.tfinger,
|
|
577
|
+
NativePointerEvent e(self->native, event.tfinger, Pointer::UP);
|
|
444
578
|
Window_call_pointer_event(win, &e);
|
|
445
579
|
break;
|
|
446
580
|
}
|
|
447
581
|
|
|
448
582
|
case SDL_FINGERMOTION:
|
|
449
583
|
{
|
|
450
|
-
NativePointerEvent e(event.tfinger,
|
|
584
|
+
NativePointerEvent e(self->native, event.tfinger, Pointer::MOVE);
|
|
451
585
|
Window_call_pointer_event(win, &e);
|
|
452
586
|
break;
|
|
453
587
|
}
|
|
@@ -476,11 +610,8 @@ namespace Reflex
|
|
|
476
610
|
|
|
477
611
|
Window_call_update_event(win);
|
|
478
612
|
|
|
479
|
-
if (self->
|
|
480
|
-
{
|
|
613
|
+
if (Xot::check_and_remove_flag(&self->flags, Window::Data::REDRAW))
|
|
481
614
|
redraw_window(self->native);
|
|
482
|
-
self->redraw = false;
|
|
483
|
-
}
|
|
484
615
|
}
|
|
485
616
|
|
|
486
617
|
|
data/src/shape.cpp
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
#include <rays/polygon.h>
|
|
8
8
|
#include "reflex/exception.h"
|
|
9
9
|
#include "reflex/debug.h"
|
|
10
|
+
#include "application.h"
|
|
10
11
|
#include "selector.h"
|
|
11
12
|
#include "view.h"
|
|
12
13
|
#include "world.h"
|
|
@@ -449,18 +450,22 @@ namespace Reflex
|
|
|
449
450
|
if (!event)
|
|
450
451
|
argument_error(__FILE__, __LINE__);
|
|
451
452
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
switch (event->action())
|
|
453
|
+
// called back from box2d, which can not let an exception through
|
|
454
|
+
Application_guard([&]()
|
|
455
455
|
{
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
456
|
+
shape->on_contact(event);
|
|
457
|
+
|
|
458
|
+
switch (event->action())
|
|
459
|
+
{
|
|
460
|
+
case ContactEvent::BEGIN: shape->on_contact_begin(event); break;
|
|
461
|
+
case ContactEvent::END: shape->on_contact_end(event); break;
|
|
462
|
+
default: break;
|
|
463
|
+
}
|
|
460
464
|
|
|
461
|
-
|
|
465
|
+
if (event->is_blocked()) return;
|
|
462
466
|
|
|
463
|
-
|
|
467
|
+
View_call_contact_event(shape->owner(), event);
|
|
468
|
+
});
|
|
464
469
|
}
|
|
465
470
|
|
|
466
471
|
|
|
@@ -705,7 +710,7 @@ namespace Reflex
|
|
|
705
710
|
if (points.empty())
|
|
706
711
|
return Polygon();
|
|
707
712
|
|
|
708
|
-
return Rays::create_line(
|
|
713
|
+
return Rays::create_line(points.data(), points.size(), loop);
|
|
709
714
|
}
|
|
710
715
|
|
|
711
716
|
Bounds get_fixed_frame () const override
|