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.
typedef struct {
size_t cursor;
size_t button;
size_t key;
size_t enter;
size_t resize;
bj_info(
"Resize event, window %p, %dx%d", (
void*)p_window, width, height);
}
static void*
setup(
struct bj_app* app,
void* init_data) {
(void)init_data;
return 0;
}
return counter;
}
static void step(
struct bj_app* app,
struct bj_tick_info tick,
void* user_data) {
(void)tick;
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;
}
}
}
}
static void teardown(
struct bj_app* app,
void* user_data) {
(void)app;
bj_info(
"Total events: %ld cursor, %ld button, %ld key, %ld enter, %ld resize",
);
}
int main(
int argc,
char* argv[]) {
(void)argc; (void)argv;
}
Application lifecycle: callback-driven setup, step, and teardown.
int main(int argc, char *argv[])
static void step(struct bj_app *app, struct bj_tick_info tick, void *user_data)
static void teardown(struct bj_app *app, void *user_data)
bj_audio_play_note_data data
static void * setup(struct bj_app *app, void *init_data)
Recoverable error handling.
Sytem event management API.
void resize_callback(bj_window *p_window, int width, int height, void *data)
int bj_run_app(bj_app_setup_fn setup, bj_app_step_fn step, bj_app_fixed_step_fn fixed_step, bj_app_teardown_fn teardown, void *init_data)
Drive the application lifecycle.
void bj_quit_app(struct bj_app *app, int exit_code)
Signal the given application to exit on the next iteration.
Timing snapshot handed to the step and fixed-step callbacks.
struct bj_window bj_window
union bj_event::@102271004006361263344115053024230242311221140216 as
enum bj_event_type type
Type of event.
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_EVENT_BUTTON
Mouse button.
@ BJ_EVENT_KEY
Keyboard key.
@ BJ_EVENT_ENTER
Mouse enter/leave.
@ BJ_EVENT_CURSOR
Mouse move.
@ BJ_PRESS
The key or button was pressed.
@ BJ_RELEASE
The key or button was released.
Represent a generic window-related event.
#define bj_info(...)
Log a message using the BJ_LOG_INFO level.
void * bj_calloc(size_t size)
Allocate size bytes of zero-initialised memory.
void bj_free(void *memory)
Free a previously allocated memory block.
bj_bool bj_begin(int systems, struct bj_error **error)
Initialises the system.
void bj_end(void)
De-initialises the system.
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.
void bj_set_resize_callback(struct bj_window *window, bj_window_resize_fn fn, void *user_data)
Register the resize callback for window.
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.
@ BJ_WINDOW_FLAG_RESIZABLE
User may resize the window.
Logging utility functions.
Portable main() replacement with platform-aware entry shim.
All memory-related functions, including custom allocators.
Header file for system interactions.
Header file for bj_window type.