ui delta mouse, dragging scroller
This commit is contained in:
@@ -266,8 +266,9 @@ type_t type__app_event_t = { type_kind_struct, s8_const_lit("app_event_t"), size
|
||||
{.name = s8_const_lit("shift"), .type = &type__b8, .offset = offsetof(app_event_t, shift), .dont_serialize = 0},
|
||||
{.name = s8_const_lit("alt"), .type = &type__b8, .offset = offsetof(app_event_t, alt), .dont_serialize = 0},
|
||||
{.name = s8_const_lit("mouse_pos"), .type = &type__v2f32_t, .offset = offsetof(app_event_t, mouse_pos), .dont_serialize = 0},
|
||||
{.name = s8_const_lit("mouse_delta"), .type = &type__v2f32_t, .offset = offsetof(app_event_t, mouse_delta), .dont_serialize = 0},
|
||||
},
|
||||
.count = 11,
|
||||
.count = 12,
|
||||
};
|
||||
type_t type__app_frame_t = { type_kind_struct, s8_const_lit("app_frame_t"), sizeof(app_frame_t),
|
||||
.members = (type_member_t[]){
|
||||
|
||||
@@ -104,6 +104,7 @@ struct app_event_t {
|
||||
b8 shift;
|
||||
b8 alt;
|
||||
v2f32_t mouse_pos;
|
||||
v2f32_t mouse_delta;
|
||||
};
|
||||
|
||||
typedef struct app_frame_t app_frame_t;
|
||||
|
||||
@@ -175,6 +175,7 @@ void meta_app(ma_arena_t *arena) {
|
||||
b8 shift;
|
||||
b8 alt;
|
||||
v2f32_t mouse_pos;
|
||||
v2f32_t mouse_delta;
|
||||
};
|
||||
|
||||
typedef struct app_frame_t app_frame_t;
|
||||
|
||||
@@ -60,12 +60,17 @@ fn f64 w32_seconds_now(void) {
|
||||
gb app_frame_t *w32_frame;
|
||||
gb ma_arena_t *w32_event_arena;
|
||||
gb u64 w32_event_id;
|
||||
gb v2f32_t w32_last_mouse;
|
||||
|
||||
fn void w32_push_event(app_frame_t *frame, app_event_t event) {
|
||||
app_event_t *ev = ma_push_type(w32_event_arena, app_event_t);
|
||||
*ev = event;
|
||||
ev->id = ++w32_event_id;
|
||||
ev->mouse_pos = w32_get_mouse_pos(w32_window_handle);
|
||||
{
|
||||
v2f32_t new_pos = w32_get_mouse_pos(w32_window_handle);
|
||||
ev->mouse_delta = v2f32_sub(new_pos, w32_last_mouse);
|
||||
ev->mouse_pos = w32_last_mouse = new_pos;
|
||||
}
|
||||
|
||||
if (GetKeyState(VK_CONTROL) & 0x8000) ev->ctrl = true;
|
||||
if (GetKeyState(VK_SHIFT) & 0x8000) ev->shift = true;
|
||||
@@ -367,12 +372,6 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int n
|
||||
u64 frame_counter = 0;
|
||||
for (;;) {
|
||||
app_frame_t frame = {0};
|
||||
frame.window_size = w32_get_window_size(w32_window_handle);
|
||||
frame.dpr = w32_get_dpr(w32_window_handle);
|
||||
frame.mouse_pos = w32_get_mouse_pos(w32_window_handle);
|
||||
frame.delta = time_delta;
|
||||
frame.update = time_update;
|
||||
frame.frame = frame_counter;
|
||||
|
||||
b32 waited = w32_get_events(tcx.temp, &frame, wait_for_events);
|
||||
if (waited) {
|
||||
@@ -389,6 +388,13 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int n
|
||||
w32_push_event(&frame, (app_event_t){.kind = app_event_kind_update});
|
||||
}
|
||||
|
||||
frame.window_size = w32_get_window_size(w32_window_handle);
|
||||
frame.dpr = w32_get_dpr(w32_window_handle);
|
||||
frame.mouse_pos = frame.last_event->mouse_pos;
|
||||
frame.delta = time_delta;
|
||||
frame.update = time_update;
|
||||
frame.frame = frame_counter;
|
||||
|
||||
b32 animating = app_update(&frame);
|
||||
wait_for_events = !animating;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user