248 {
249
250 if (event->type >= SDL_EVENT_WINDOW_FIRST && event->type <= SDL_EVENT_WINDOW_LAST) {
251 if (event->window.windowID != SDL_GetWindowID(self->
window)) {
252 return;
253 }
254 }
255
256 SDL_SetPointerProperty(SDL_GetWindowProperties(self->
window),
"event", (ident) event);
257
258 switch (event->type) {
259 case SDL_EVENT_WINDOW_MOVED:
260 case SDL_EVENT_WINDOW_RESIZED:
261 case SDL_EVENT_WINDOW_MAXIMIZED:
262 case SDL_EVENT_WINDOW_RESTORED:
263 case SDL_EVENT_WINDOW_SAFE_AREA_CHANGED:
265 break;
266 case SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED:
267 case SDL_EVENT_WINDOW_DISPLAY_CHANGED:
268 case SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED: {
270
276
282 }
283 }
284 break;
285 case SDL_EVENT_WINDOW_DESTROYED:
286 case SDL_EVENT_WINDOW_CLOSE_REQUESTED:
290 break;
291 default:
292 break;
293 }
294
295 if (event->type == SDL_EVENT_MOUSE_MOTION) {
297 }
298
300
302
303 switch (event->type) {
304 case SDL_EVENT_KEY_UP:
305 case SDL_EVENT_KEY_DOWN:
306 case SDL_EVENT_TEXT_INPUT:
309 } else {
311 }
312 break;
313 case SDL_EVENT_MOUSE_BUTTON_DOWN:
320 } else {
322 }
323
327 }
328 break;
329 case SDL_EVENT_MOUSE_BUTTON_UP:
334 } else {
336 }
337 break;
338 case SDL_EVENT_MOUSE_MOTION:
339 case SDL_EVENT_MOUSE_WHEEL:
344 } else {
346 }
347 break;
348 default:
350 break;
351 }
352
353 if (event->type == SDL_EVENT_KEY_DOWN) {
354 if (event->key.key == SDLK_TAB || event->key.key == SDLK_KP_TAB) {
355
357
358
359 const bool consumed = current && current ==
keyResponder &&
360 $((Object *) current, isKindOfClass,
_TextView()) &&
361 ((
TextView *) current)->isEditable &&
363
364 if (!consumed) {
365 if (event->key.mod & SDL_KMOD_SHIFT) {
367 } else {
369 }
370
373 }
374 }
375 }
376
377 if (event->key.key == SDLK_D) {
378 if (event->key.mod & SDL_KMOD_CTRL) {
380 }
381 }
382 }
383
384 SDL_SetPointerProperty(SDL_GetWindowProperties(self->
window),
"event", NULL);
385}
static void becomeKeyResponder(View *self)
static void resignKeyResponder(View *self)
static bool isDisabled(const Control *self)
static void updateBindings(View *self, ident data)
static void renderDeviceWillReset(ImageAtlas *self)
static void enumerateVisible(View *self, ViewEnumerator enumerator, ident data)
static void becomeTouchResponder(View *self)
static void resignTouchResponder(View *self)
static void mouseMotion_enumerate(View *view, ident data)
ViewEnumerator for SDL_EVENT_MOUSE_MOTION.
Controls are Views which capture and respond to events.
A Control for presenting and capturing user-provied Text.