Enumerado SDL_EventType
Un enumerado de los tipos de eventos que se pueden entregar.
typedef enum { SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ /* Application events */ SDL_QUIT = 0x100, /**< User-requested quit */ /* These application events have special meaning on iOS, see README-ios.md for details */ SDL_APP_TERMINATING, /**< The application is being terminated by the OS Called on iOS in applicationWillTerminate() Called on Android in onDestroy() */ SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible. Called on iOS in applicationDidReceiveMemoryWarning() Called on Android in onLowMemory() */ SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background Called on iOS in applicationWillResignActive() Called on Android in onPause() */ SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time Called on iOS in applicationDidEnterBackground() Called on Android in onPause() */ SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground Called on iOS in applicationWillEnterForeground() Called on Android in onResume() */ SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive Called on iOS in applicationDidBecomeActive() Called on Android in onResume() */ SDL_LOCALECHANGED, /**< The user's locale preferences have changed. */ /* Display events */ SDL_DISPLAYEVENT = 0x150, /**< Display state change */ /* Window events */ SDL_WINDOWEVENT = 0x200, /**< Window state change */ SDL_SYSWMEVENT, /**< System specific event */ /* Keyboard events */ SDL_KEYDOWN = 0x300, /**< Key pressed */ SDL_KEYUP, /**< Key released */ SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ SDL_TEXTINPUT, /**< Keyboard text input */ SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an input language or keyboard layout change. */ SDL_TEXTEDITING_EXT, /**< Extended keyboard text editing (composition) */ /* Mouse events */ SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ SDL_MOUSEBUTTONUP, /**< Mouse button released */ SDL_MOUSEWHEEL, /**< Mouse wheel motion */ /* Joystick events */ SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */ SDL_JOYBALLMOTION, /**< Joystick trackball motion */ SDL_JOYHATMOTION, /**< Joystick hat position change */ SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ SDL_JOYBUTTONUP, /**< Joystick button released */ SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */ SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */ SDL_JOYBATTERYUPDATED, /**< Joystick battery level change */ /* Game controller events */ SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */ SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */ SDL_CONTROLLERBUTTONUP, /**< Game controller button released */ SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */ SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */ SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */ SDL_CONTROLLERTOUCHPADDOWN, /**< Game controller touchpad was touched */ SDL_CONTROLLERTOUCHPADMOTION, /**< Game controller touchpad finger was moved */ SDL_CONTROLLERTOUCHPADUP, /**< Game controller touchpad finger was lifted */ SDL_CONTROLLERSENSORUPDATE, /**< Game controller sensor was updated */ /* Touch events */ SDL_FINGERDOWN = 0x700, SDL_FINGERUP, SDL_FINGERMOTION, /* Gesture events */ SDL_DOLLARGESTURE = 0x800, SDL_DOLLARRECORD, SDL_MULTIGESTURE, /* Clipboard events */ SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard or primary selection changed */ /* Drag and drop events */ SDL_DROPFILE = 0x1000, /**< The system requests a file open */ SDL_DROPTEXT, /**< text/plain drag-and-drop event */ SDL_DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */ SDL_DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */ /* Audio hotplug events */ SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */ /* Sensor events */ SDL_SENSORUPDATE = 0x1200, /**< A sensor was updated */ /* Render events */ SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ /* Internal events */ SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */ /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, * and should be allocated with SDL_RegisterEvents() */ SDL_USEREVENT = 0x8000, /** * This last event is only for bounding internal arrays */ SDL_LASTEVENT = 0xFFFF } SDL_EventType;
Valores
Valor | Significado |
---|---|
SDL_FIRSTEVENT | No borrar (sin uso). |
Eventos de aplicación | |
SDL_QUIT | Salida solicitada por el usuario; ver observaciones. |
SDL_APP_TERMINATING | El sistema operativo está terminando la aplicación- |
SDL_APP_LOWMEMORY | El sistema operativo tiene poca memoria; libera algo. |
SDL_APP_WILLENTERBACKGROUND | La aplicación está entrando en segundo plano. |
SDL_APP_DIDENTERBACKGROUND | La aplicación ha entrado en segundo plano. |
SDL_APP_WILLENTERFOREGROUND | La aplicación va a pasar a primer plano. |
SDL_APP_DIDENTERFOREGROUND | La aplicación entra en primer plano. |
SDL_LOCALECHANGED | Las preferencias de configuración regional del usuario han cambiado. |
Eventos de display | |
SDL_DISPLAYEVENT | Cambio de estado de la pantalla. |
Eventos de ventana | |
SDL_WINDOWEVENT | Cambio de estado de la ventana. |
SDL_SYSWMEVENT | Evento específico del sistema<./td> |
Eventos de teclado | |
SDL_KEYDOWN | Tecla pulsada. |
SDL_KEYUP | Tecla liberada. |
SDL_TEXTEDITING | Eedición de texto con teclado (composición). |
SDL_TEXTINPUT | Entrada de texto por teclado. |
SDL_KEYMAPCHANGED | El mapa de teclado ha cambiado debido a un evento del sistema, como un cambio en el lenguaje de entrada o en la distribución del teclado (>= SDL 2.0.4). |
Eventos del ratón | |
SDL_MOUSEMOTION | El ratón se ha movido. |
SDL_MOUSEBUTTONDOWN | Se ha pulsado un botón del ratón. |
SDL_MOUSEBUTTONUP | Se ha liberado un botón del ratón. |
SDL_MOUSEWHEEL | Movimiento de la rueda del ratón. |
Eventos del joystick | |
SDL_JOYAXISMOTION | Movimiento del eje del joystick. |
SDL_JOYBALLMOTION | Movimiento del trackball del joystick. |
SDL_JOYHATMOTION | Cambio de posición del sombrero del joystick. |
SDL_JOYBUTTONDOWN | Botón del joystick pulsado. |
SDL_JOYBUTTONUP | Botón del joystick librerado. |
SDL_JOYDEVICEADDED | Joystick conectado. |
SDL_JOYDEVICEREMOVED | Joystick desconectado. |
Eventos del controlador | |
SDL_CONTROLLERAXISMOTION | Movimiento del eje del controlador. |
SDL_CONTROLLERBUTTONDOWN | Botón del controlador pulsado. |
SDL_CONTROLLERBUTTONUP | Botón del controlador liberado. |
SDL_CONTROLLERDEVICEADDED | Controlador conectado. |
SDL_CONTROLLERDEVICEREMOVED | Controlador desconectado. |
SDL_CONTROLLERDEVICEREMAPPED | Mapeado del controlador actualizado. |
Eventos táctiles | |
SDL_FINGERDOWN | El usuario ha tocado el dispositivo de entrada. |
SDL_FINGERUP | El usuario ha dejado de tocar el dispositivo de entrada. |
SDL_FINGERMOTION | El usuario está arrastrando el dedo sobre el dispositivo de entrada. |
Eventos gestuales | |
SDL_DOLLARGESTURE | |
SDL_DOLLARRECORD | |
SDL_MULTIGESTURE | |
Eventos del clipboard | |
SDL_CLIPBOARDUPDATE | El clipboard ha cambiado. |
Eventos de drag & drop | |
SDL_DROPFILE | El sistema solicita la apertura de un archivo. |
SDL_DROPTEXT | Evento de arrastrar y soltar texto. |
SDL_DROPBEGIN | Comienza un nuevo conjunto de drops (>= SDL 2.0.5). |
SDL_DROPCOMPLETE | El conjunto actual de drps se ha completado (>= SDL 2.0.5). |
Eventos de conexión en caliente de audio | |
SDL_AUDIODEVICEADDED | Un nuevo dispositivo de audio está disponible (>= SDL 2.0.4). |
SDL_AUDIODEVICEREMOVED | Se ha eliminado un dispositivo de audio (>= SDL 2.0.4). |
Eventos de renderizado | |
SDL_RENDER_TARGETS_RESET | Los objetivos de render han sido reiniciados y sus contenidos necesitan ser actualizados (>= SDL 2.0.2). |
SDL_RENDER_DEVICE_RESET | El dispositivo ha sido reiniciado y todas las texturas necesitan ser recreadas (>= SDL 2.0.4). |
Estos son para uso del usuario, y deben ser asignados con SDL_RegisterEvents() | |
SDL_USEREVENT | Un evento especificado por el usuario. |
SDL_LASTEVENT | Solo para delimitar arrays internos. |
Ejemplo
SDL_Event e; while (SDL_PollEvent(&e)) { if (e.type == SDL_KEYDOWN) { SDL_Log("User just pressed down a key!"); } }
Observaciones
SDL_QUIT
Los eventos SDL_QUIT se generan por varias razones. Una aplicación puede elegir ignorar el evento, por ejemplo, si quiere ofrecer un aviso pidiendo al usuario que guarde el trabajo actual.
Se genera un evento SDL_QUIT cuando el usuario pulsa el botón de cierre de la última ventana existente. Esto ocurre además del evento SDL_WINDOWEVENT/SDL_WINDOWEVENT_CLOSE, por lo que la aplicación puede comprobar el que sea apropiado, o ambos, o ninguno. Si la aplicación ignora este evento y crea otra ventana, SDL_QUIT se enviará de nuevo la próxima vez que el usuario haga clic en el botón de cierre de la última ventana restante.
SDL_QUIT no se limita al cierre de ventanas. En Mac OS X, pulsar Command-Q (el atajo de teclado estándar para "Salir de esta aplicación") hará que SDL genere un evento SDL_QUIT, independientemente de las ventanas que existan en ese momento. Sin embargo, la aplicación sigue siendo responsable de terminarse a sí misma correctamente. Las aplicaciones que ignoren completamente Command-Q no obtendrán la certificación Mac App Store.
En sistemas POSIX, SDL_Init() instala manejadores de señales para SIGINT (interrupción de teclado) y SIGTERM (solicitud de terminación del sistema), si los manejadores no existen ya, que generan eventos SDL_QUIT también. No hay forma de determinar la causa de un evento SDL_QUIT, pero establecer un manejador de señal en su aplicación anulará la generación por defecto de eventos de abandono para esa señal.
Eventos Android, iOS y WinRT
Lo que actualmente denominamos "eventos de Android, iOS y WinRT" son específicos de dispositivos móviles e integrados que tienen requisitos diferentes a los de una aplicación de escritorio habitual. Estos eventos deben ser manejados en un filtro de eventos, ya que a menudo el sistema operativo necesita una respuesta inmediata y terminará su proceso poco después de enviar el evento, y si se sienta en la cola de eventos SDL, será demasiado tarde. Se puede manejar todo lo demás a través de un bucle normal SDL_PollEvent(), pero se debería configurar una llamada de retorno con SDL_SetEventFilter() para estos eventos específicos.
Así es como estos eventos se asignan actualmente al sistema operativo subyacente:
Evento SDL | Qué | iOS | Android | WinRT |
---|---|---|---|---|
SDL_APP_TERMINATING | La aplicación está siendo terminada por el sistema operativo. | applicationWillTerminate() | onDestroy() | Exiting() |
SDL_APP_LOWMEMORY | La aplicación tiene poca memoria, libere memoria si es posible. | applicationDidReceiveMemoryWarning() | onLowMemory() | -- |
SDL_APP_WILLENTERBACKGROUND | La aplicación está a punto de entrar en segundo plano. | applicationWillResignActive() | onPause() | Suspending() |
SDL_APP_DIDENTERBACKGROUND | La aplicación entró en segundo plano y puede que no obtenga CPU durante algún tiempo. | applicationDidEnterBackground() | onPause() | Suspending() |
SDL_APP_WILLENTERFOREGROUND | La aplicación está a punto de entrar en primer plano. | applicationWillEnterForeground() | onResume() | Resuming() |
SDL_APP_DIDENTERFOREGROUND | La aplicación es ahora interactiva. | applicationDidBecomeActive() | onResume() | Resuming() |