Event handling using the polling pattern.
Event handling using the polling pattern.This demonstrates polling events from a queue instead of using callbacks. Polling gives you fine-grained control over when and how events are processed, which is useful for game loops and custom event prioritization.
#define BJ_AUTOMAIN_CALLBACKS
typedef struct {
size_t cursor;
size_t button;
size_t key;
size_t enter;
int bj_app_begin(
void** user_data,
int argc,
char* argv[]) {
(void)argc; (void)argv;
return bj_callback_exit_error;
}
return bj_callback_continue;
}
bj_info(
"Enter event, window %p, %s, (%d,%d)",
e.
as.enter.enter ?
"entered" :
"left",
e.
as.enter.x, e.
as.enter.y
);
break;
bj_info(
"Cursor event, window %p, (%d,%d)",
);
break;
const char* action_str = "pressed";
action_str = e.
as.key.action ==
BJ_RELEASE ?
"released" :
"repeated";
}
bj_info(
"Key 0x%04X (%s) Scancode 0x%04X (with no mods) was %s",
);
}
break;
bj_info(
"Button event, window %p, button %d, %s, (%d,%d)",
e.
as.button.action ==
BJ_PRESS ?
"pressed" :
"released",
e.
as.button.x, e.
as.button.y
);
break;
}
}
? bj_callback_exit_success
: bj_callback_continue;
}
bj_info(
"Total events: %ld cursor, %ld button, %ld key, %ld enter",
);
return status;
}
int bj_app_begin(void **user_data, int argc, char *argv[])
Definition audio_pcm.c:25
int bj_app_iterate(void *user_data)
Definition audio_pcm.c:60
int bj_app_end(void *user_data, int status)
Definition audio_pcm.c:84
bj_window * window
Definition bitmap_blit.c:24
Recoverable error handling.
Sytem event management API.
size_t button
Definition event_callbacks.c:23
size_t enter
Definition event_callbacks.c:25
size_t cursor
Definition event_callbacks.c:22
size_t key
Definition event_callbacks.c:24
Definition event_callbacks.c:21
struct bj_window bj_window
Definition api.h:303
union bj_event::@102271004006361263344115053024230242311221140216 as
enum bj_event_type type
Type of event.
Definition event.h:364
const char * bj_key_name(int key)
Get the string name of a key.
bj_bool bj_poll_events(struct bj_event *event)
Poll the next pending event from the system queue.
@ BJ_KEY_ESCAPE
Esc key.
Definition event.h:85
@ BJ_EVENT_BUTTON
Mouse button.
Definition event.h:351
@ BJ_EVENT_KEY
Keyboard key.
Definition event.h:350
@ BJ_EVENT_ENTER
Mouse enter/leave.
Definition event.h:348
@ BJ_EVENT_CURSOR
Mouse move.
Definition event.h:349
@ BJ_PRESS
The key or button was pressed.
Definition event.h:301
@ BJ_RELEASE
The key or button was released.
Definition event.h:300
Represent a generic window-related event.
Definition event.h:362
#define bj_info(...)
Log a message using the BJ_LOG_INFO level.
Definition log.h:105
void * bj_calloc(size_t size)
Allocate size bytes of zero-initialized memory.
void bj_free(void *memory)
Free a previously allocated memory block.
bj_bool bj_begin(int systems, struct bj_error **error)
Initializes the system.
void bj_end(void)
De-initializes the system.
@ BJ_VIDEO_SYSTEM
Definition system.h:20
void bj_sleep(int milliseconds)
Suspends the current thread for a specified duration.
void bj_set_window_should_close(struct bj_window *window)
Flag a given window to be closed.
struct bj_window * bj_bind_window(const char *title, uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t flags, struct bj_error **error)
Create a new struct bj_window with the specified attributes.
bj_bool bj_should_close_window(struct bj_window *window)
Get the close flag state of a window.
void bj_unbind_window(struct bj_window *window)
Deletes a struct bj_window object and releases associated memory.
Logging utility functions.
Portable main substitution and application callback facilities.
All memory-related functions, including custom allocators.
Header file for system interactions.
Header file for time manipulation utilities.
Header file for bj_window type.