lovr/src/modules/event/event.h

122 lines
1.9 KiB
C

#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#pragma once
#define MAX_EVENT_NAME_LENGTH 32
struct Thread;
typedef enum {
EVENT_QUIT,
EVENT_RESTART,
EVENT_FOCUS,
EVENT_RESIZE,
EVENT_KEYPRESSED,
EVENT_KEYRELEASED,
EVENT_TEXTINPUT,
#ifndef LOVR_DISABLE_THREAD
EVENT_THREAD_ERROR,
#endif
EVENT_PERMISSION,
EVENT_CUSTOM
} EventType;
typedef enum {
TYPE_NIL,
TYPE_BOOLEAN,
TYPE_NUMBER,
TYPE_STRING,
TYPE_MINISTRING,
TYPE_OBJECT
} VariantType;
typedef union {
bool boolean;
double number;
struct {
char* pointer;
size_t length;
} string;
struct {
uint8_t length;
char data[23];
} ministring;
struct {
void* pointer;
const char* type;
void (*destructor)(void*);
} object;
} VariantValue;
typedef struct Variant {
VariantType type;
VariantValue value;
} Variant;
typedef struct {
int exitCode;
} QuitEvent;
typedef struct {
bool value;
} BoolEvent;
typedef struct {
uint32_t width;
uint32_t height;
} ResizeEvent;
typedef struct {
uint32_t code;
uint32_t scancode;
bool repeat;
} KeyEvent;
typedef struct {
char utf8[4];
uint32_t codepoint;
} TextEvent;
typedef struct {
struct Thread* thread;
char* error;
} ThreadEvent;
typedef struct {
char name[MAX_EVENT_NAME_LENGTH];
Variant data[4];
uint32_t count;
} CustomEvent;
typedef struct {
uint32_t permission;
bool granted;
} PermissionEvent;
typedef union {
QuitEvent quit;
BoolEvent boolean;
ResizeEvent resize;
KeyEvent key;
TextEvent text;
ThreadEvent thread;
CustomEvent custom;
PermissionEvent permission;
} EventData;
typedef struct {
EventType type;
EventData data;
} Event;
void lovrVariantDestroy(Variant* variant);
bool lovrEventInit(void);
void lovrEventDestroy(void);
void lovrEventPump(void);
void lovrEventPush(Event event);
bool lovrEventPoll(Event* event);
void lovrEventClear(void);