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:22
size_t enter
Definition event_callbacks.c:24
size_t cursor
Definition event_callbacks.c:21
size_t key
Definition event_callbacks.c:23
Definition event_callbacks.c:20
struct bj_window bj_window
Definition api.h:296
union bj_event::@102271004006361263344115053024230242311221140216 as
enum bj_event_type type
Type of event.
Definition event.h:362
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:83
@ BJ_EVENT_BUTTON
Mouse button.
Definition event.h:349
@ BJ_EVENT_KEY
Keyboard key.
Definition event.h:348
@ BJ_EVENT_ENTER
Mouse enter/leave.
Definition event.h:346
@ BJ_EVENT_CURSOR
Mouse move.
Definition event.h:347
@ BJ_PRESS
The key or button was pressed.
Definition event.h:299
@ BJ_RELEASE
The key or button was released.
Definition event.h:298
Represent a generic window-related event.
Definition event.h:360
#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.
Header file for system interactions.
Header file for time manipulation utilities.
Header file for bj_window type.