From d7c5b72bb9631ae7bd40176ccac2f1c316b41559 Mon Sep 17 00:00:00 2001 From: krzosa Date: Sun, 29 Dec 2024 10:54:28 +0100 Subject: [PATCH] w32_map_wparam_to_app_key, todo, api --- build_file.c | 2 +- src/app/app.gen.c | 148 +++++++++++++++++++++---------------------- src/app/app.gen.h | 4 +- src/app/app.meta.c | 13 ++-- src/app/app_wasm.c | 6 +- src/app/app_win32.c | 14 ++-- src/wasm_app/debug.c | 3 - todo.txt | 50 +++++++++------ 8 files changed, 121 insertions(+), 119 deletions(-) delete mode 100644 src/wasm_app/debug.c diff --git a/build_file.c b/build_file.c index 4a7db48..30b85c7 100644 --- a/build_file.c +++ b/build_file.c @@ -18,7 +18,7 @@ int main(int argc, char **argv) { bool run_server = false; bool core_test_target = false; bool wasm_target = true; - bool win32_target = false; + bool win32_target = true; if (run_server) { os_systemf("start /D ..\\package ..\\package\\run_server.bat"); diff --git a/src/app/app.gen.c b/src/app/app.gen.c index cc552e9..c089918 100644 --- a/src/app/app.gen.c +++ b/src/app/app.gen.c @@ -1,7 +1,7 @@ type_t type__app_key_t = { type_kind_enum, s8_const_lit("app_key_t"), sizeof(app_key_t), .members = (type_member_t[]){ - {.name = s8_const_lit("app_key_invalid"), .value = app_key_invalid}, + {.name = s8_const_lit("app_key_null"), .value = app_key_null}, {.name = s8_const_lit("app_key_1"), .value = app_key_1}, {.name = s8_const_lit("app_key_2"), .value = app_key_2}, {.name = s8_const_lit("app_key_3"), .value = app_key_3}, @@ -152,79 +152,79 @@ wasm_key_map_t wasm_map_key_string_to_app_key(s8_t key) { #endif #if PLATFORM_WINDOWS -void w32_key_dispatch(WPARAM wparam, void (*handle_key)(app_key_t)) { +app_key_t w32_map_wparam_to_app_key(WPARAM wparam) { switch(wparam) { - case '1': handle_key(app_key_1); break; - case '2': handle_key(app_key_2); break; - case '3': handle_key(app_key_3); break; - case '4': handle_key(app_key_4); break; - case '5': handle_key(app_key_5); break; - case '6': handle_key(app_key_6); break; - case '7': handle_key(app_key_7); break; - case '8': handle_key(app_key_8); break; - case '9': handle_key(app_key_9); break; - case '0': handle_key(app_key_0); break; - case VK_F1: handle_key(app_key_f1); break; - case VK_F2: handle_key(app_key_f2); break; - case VK_F3: handle_key(app_key_f3); break; - case VK_F4: handle_key(app_key_f4); break; - case VK_F5: handle_key(app_key_f5); break; - case VK_F6: handle_key(app_key_f6); break; - case VK_F7: handle_key(app_key_f7); break; - case VK_F8: handle_key(app_key_f8); break; - case VK_F9: handle_key(app_key_f9); break; - case VK_F10: handle_key(app_key_f10); break; - case VK_F11: handle_key(app_key_f11); break; - case VK_F12: handle_key(app_key_f12); break; - case 'A': handle_key(app_key_a); break; - case 'B': handle_key(app_key_b); break; - case 'C': handle_key(app_key_c); break; - case 'D': handle_key(app_key_d); break; - case 'E': handle_key(app_key_e); break; - case 'F': handle_key(app_key_f); break; - case 'G': handle_key(app_key_g); break; - case 'H': handle_key(app_key_h); break; - case 'I': handle_key(app_key_i); break; - case 'J': handle_key(app_key_j); break; - case 'K': handle_key(app_key_k); break; - case 'L': handle_key(app_key_l); break; - case 'M': handle_key(app_key_m); break; - case 'N': handle_key(app_key_n); break; - case 'O': handle_key(app_key_o); break; - case 'P': handle_key(app_key_p); break; - case 'Q': handle_key(app_key_q); break; - case 'R': handle_key(app_key_r); break; - case 'S': handle_key(app_key_s); break; - case 'T': handle_key(app_key__t); break; - case 'U': handle_key(app_key_u); break; - case 'V': handle_key(app_key_v); break; - case 'W': handle_key(app_key_w); break; - case 'X': handle_key(app_key_x); break; - case 'Y': handle_key(app_key_y); break; - case 'Z': handle_key(app_key_z); break; - case VK_SPACE: handle_key(app_key_space); break; - case VK_RETURN: handle_key(app_key_enter); break; - case VK_ESCAPE: handle_key(app_key_escape); break; - case VK_LEFT: handle_key(app_key_left); break; - case VK_UP: handle_key(app_key_up); break; - case VK_RIGHT: handle_key(app_key_right); break; - case VK_DOWN: handle_key(app_key_down); break; - case VK_TAB: handle_key(app_key_tab); break; - case VK_BACK: handle_key(app_key_backspace); break; - case VK_CONTROL: handle_key(app_key_control); break; - case VK_SHIFT: handle_key(app_key_shift); break; - case VK_LMENU: handle_key(app_key_alt); break; - case VK_RMENU: handle_key(app_key_alt); break; - case VK_LWIN: handle_key(app_key_meta); break; - case VK_RWIN: handle_key(app_key_meta); break; - case VK_CAPITAL: handle_key(app_key_caps_lock); break; - case VK_DELETE: handle_key(app_key_delete); break; - case VK_HOME: handle_key(app_key_home); break; - case VK_END: handle_key(app_key_end); break; - case VK_NEXT: handle_key(app_key_insert); break; - case VK_INSERT: handle_key(app_key_page_up); break; - case VK_PRIOR: handle_key(app_key_page_down); break; - default: {} break; + case '1': return app_key_1; break; + case '2': return app_key_2; break; + case '3': return app_key_3; break; + case '4': return app_key_4; break; + case '5': return app_key_5; break; + case '6': return app_key_6; break; + case '7': return app_key_7; break; + case '8': return app_key_8; break; + case '9': return app_key_9; break; + case '0': return app_key_0; break; + case VK_F1: return app_key_f1; break; + case VK_F2: return app_key_f2; break; + case VK_F3: return app_key_f3; break; + case VK_F4: return app_key_f4; break; + case VK_F5: return app_key_f5; break; + case VK_F6: return app_key_f6; break; + case VK_F7: return app_key_f7; break; + case VK_F8: return app_key_f8; break; + case VK_F9: return app_key_f9; break; + case VK_F10: return app_key_f10; break; + case VK_F11: return app_key_f11; break; + case VK_F12: return app_key_f12; break; + case 'A': return app_key_a; break; + case 'B': return app_key_b; break; + case 'C': return app_key_c; break; + case 'D': return app_key_d; break; + case 'E': return app_key_e; break; + case 'F': return app_key_f; break; + case 'G': return app_key_g; break; + case 'H': return app_key_h; break; + case 'I': return app_key_i; break; + case 'J': return app_key_j; break; + case 'K': return app_key_k; break; + case 'L': return app_key_l; break; + case 'M': return app_key_m; break; + case 'N': return app_key_n; break; + case 'O': return app_key_o; break; + case 'P': return app_key_p; break; + case 'Q': return app_key_q; break; + case 'R': return app_key_r; break; + case 'S': return app_key_s; break; + case 'T': return app_key__t; break; + case 'U': return app_key_u; break; + case 'V': return app_key_v; break; + case 'W': return app_key_w; break; + case 'X': return app_key_x; break; + case 'Y': return app_key_y; break; + case 'Z': return app_key_z; break; + case VK_SPACE: return app_key_space; break; + case VK_RETURN: return app_key_enter; break; + case VK_ESCAPE: return app_key_escape; break; + case VK_LEFT: return app_key_left; break; + case VK_UP: return app_key_up; break; + case VK_RIGHT: return app_key_right; break; + case VK_DOWN: return app_key_down; break; + case VK_TAB: return app_key_tab; break; + case VK_BACK: return app_key_backspace; break; + case VK_CONTROL: return app_key_control; break; + case VK_SHIFT: return app_key_shift; break; + case VK_LMENU: return app_key_alt; break; + case VK_RMENU: return app_key_alt; break; + case VK_LWIN: return app_key_meta; break; + case VK_RWIN: return app_key_meta; break; + case VK_CAPITAL: return app_key_caps_lock; break; + case VK_DELETE: return app_key_delete; break; + case VK_HOME: return app_key_home; break; + case VK_END: return app_key_end; break; + case VK_NEXT: return app_key_insert; break; + case VK_INSERT: return app_key_page_up; break; + case VK_PRIOR: return app_key_page_down; break; + default: {return app_key_null;} break; } } #endif/*D:\dev\wasm\src/app/app.meta.c*/ @@ -240,7 +240,7 @@ type_t type__app_mouse_button_t = { type_kind_enum, s8_const_lit("app_mouse_butt }; type_t type__app_event_kind_t = { type_kind_enum, s8_const_lit("app_event_kind_t"), sizeof(app_event_kind_t), .members = (type_member_t[]){ - {.name = s8_const_lit("app_event_kind_invalid"), .value = app_event_kind_invalid}, + {.name = s8_const_lit("app_event_kind_null"), .value = app_event_kind_null}, {.name = s8_const_lit("app_event_kind_update"), .value = app_event_kind_update}, {.name = s8_const_lit("app_event_kind_text"), .value = app_event_kind_text}, {.name = s8_const_lit("app_event_kind_key_down"), .value = app_event_kind_key_down}, diff --git a/src/app/app.gen.h b/src/app/app.gen.h index 3867c6b..50fd165 100644 --- a/src/app/app.gen.h +++ b/src/app/app.gen.h @@ -1,5 +1,5 @@ typedef enum { -app_key_invalid, +app_key_null, app_key_1, app_key_2, app_key_3, @@ -79,7 +79,7 @@ typedef enum { app_mouse_button_count, } app_mouse_button_t; typedef enum { - app_event_kind_invalid, + app_event_kind_null, app_event_kind_update, app_event_kind_text, app_event_kind_key_down, diff --git a/src/app/app.meta.c b/src/app/app.meta.c index 8859e2d..2e0802a 100644 --- a/src/app/app.meta.c +++ b/src/app/app.meta.c @@ -5,8 +5,8 @@ void meta_app(ma_arena_t *arena) { ast_t *keys = parse_table(arena, __FILE__, CODE( // javascript filter out - | name | js1 | js2 | jf | windows1 | windows2 | - | invalid | XXX | XXX | 1 | XXX | XXX | + | name | js1 | js2 | jf | windows1 | windows2 | + | null | XXX | XXX | 1 | XXX | XXX | | 1 | 1 | XXX | 0 | `'1'` | XXX | | 2 | 2 | XXX | 0 | `'2'` | XXX | | 3 | 3 | XXX | 0 | `'3'` | XXX | @@ -115,7 +115,7 @@ void meta_app(ma_arena_t *arena) { i32 w2i = row_findi(keys->first, "windows2"); sb8_stmtf(c, "\n#if PLATFORM_WINDOWS"); - sb8_stmtf(c, "void w32_key_dispatch(WPARAM wparam, void (*handle_key)(app_key_t)) {"); + sb8_stmtf(c, "app_key_t w32_map_wparam_to_app_key(WPARAM wparam) {"); c->indent += 1; sb8_stmtf(c, "switch(wparam) {"); c->indent += 1; @@ -124,11 +124,10 @@ void meta_app(ma_arena_t *arena) { s8_t w[] = {row_geti(row, w1i)->string, row_geti(row, w2i)->string}; for (i32 i = 0; i < lengthof(w); i += 1) { if (s8_equal(w[i], s8_lit("XXX"))) continue; - - sb8_stmtf(c, "case %.*s: handle_key(app_key_%.*s); break;", s8_fmtspec(w[i]), s8_fmtspec(name)); + sb8_stmtf(c, "case %S: return app_key_%S; break;", w[i], name); } } - sb8_stmtf(c, "default: {} break;"); + sb8_stmtf(c, "default: {return app_key_null;} break;"); c->indent -= 1; sb8_stmtf(c, "}"); c->indent -= 1; @@ -147,7 +146,7 @@ void meta_app(ma_arena_t *arena) { } app_mouse_button_t; typedef enum { - app_event_kind_invalid, + app_event_kind_null, app_event_kind_update, app_event_kind_text, app_event_kind_key_down, diff --git a/src/app/app_wasm.c b/src/app/app_wasm.c index cb1f5a6..4f83659 100644 --- a/src/app/app_wasm.c +++ b/src/app/app_wasm.c @@ -136,7 +136,7 @@ WASM_EXPORT void wasm_key_down(char *key, b32 ctrl, b32 shift, b32 alt, b32 meta s8_t key8 = s8_from_char(key); wasm_key_map_t map = wasm_map_key_string_to_app_key(key8); - if (map.key != app_key_invalid) { + if (map.key != app_key_null) { wasm_add_event((app_event_t){ .kind = app_event_kind_key_down, .key = map.key, @@ -169,7 +169,7 @@ WASM_EXPORT void wasm_key_up(char *key, b32 ctrl, b32 shift, b32 alt, b32 meta) s8_t key8 = s8_from_char(key); wasm_key_map_t map = wasm_map_key_string_to_app_key(key8); - if (map.key != app_key_invalid) { + if (map.key != app_key_null) { wasm_add_event((app_event_t){ .kind = app_event_kind_key_up, .key = map.key, @@ -206,5 +206,5 @@ WASM_EXPORT void wasm_init(void) { wasm_perm_arena.data = memory; wasm_perm_arena.commit = wasm_perm_arena.reserve = memory_size; wasm_input_text_arena = ma_push_arena(&wasm_perm_arena, kib(1)); - debugf("on_init, __builtin_wasm_memory_size(0) = %d(%d)", page_count, memory_size); + debugexf("on_init, __builtin_wasm_memory_size(0) = %d(%d)", page_count, memory_size); } \ No newline at end of file diff --git a/src/app/app_win32.c b/src/app/app_win32.c index 0bdc438..d3b37ab 100644 --- a/src/app/app_win32.c +++ b/src/app/app_win32.c @@ -15,17 +15,15 @@ WNDCLASSW w32_wc; HWND w32_window_handle; HDC w32_dc; -void w32_on_key_down(app_key_t key) { -} - -void w32_on_key_up(app_key_t key) { -} - LRESULT CALLBACK w32_window_proc(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_CLOSE: PostQuitMessage(0); break; - case WM_KEYUP: w32_key_dispatch(wparam, w32_on_key_up); break; - case WM_KEYDOWN: w32_key_dispatch(wparam, w32_on_key_down); break; + case WM_KEYUP: { + app_key_t key = w32_map_wparam_to_app_key(wparam); + } break; + case WM_KEYDOWN: { + app_key_t key = w32_map_wparam_to_app_key(wparam); + } break; default: return DefWindowProcW(wnd, msg, wparam, lparam); } return 0; diff --git a/src/wasm_app/debug.c b/src/wasm_app/debug.c deleted file mode 100644 index f3a8a03..0000000 --- a/src/wasm_app/debug.c +++ /dev/null @@ -1,3 +0,0 @@ -void dr2f64(r2f64_t r) { - debugf("[%f %f %f %f]", r.x0, r.y0, r.x1, r.y1); -} \ No newline at end of file diff --git a/todo.txt b/todo.txt index d8ef0e3..086f289 100644 --- a/todo.txt +++ b/todo.txt @@ -1,23 +1,31 @@ -platform - more then 2 platform abstraction - app platform game - in the future event based? - or maybe hybrid? - os functionality - gfx - w32 - canvas - dll hot reload - wasm: - input and key down (use KeyA KeyB etc.) +[ ] platform + [ ] app + [ ] wasm + [ ] win32 + [ ] hot reload / plugins + [ ] linux + [ ] os + [?] wasm (explore) + [ ] win32 + [ ] linux + [ ] gfx + [ ] simple 2d + [ ] revisit api -type_info: - serialize - deserialize +[ ] core + [ ] revisit api + [ ] s8_bin + [ ] bin_write_begin - serialize binary data (sb8_bin_write?) + bin_write_end + bin_write_u64 + bin_write_u32 + bin_write_u16 + bin_write_u8 + bin_write_data + bin_write_size + bin_write_s8 + bin_write_cs + [ ] bin_read_begin + bin_read_end + bin_read_... - -app - loop styles: - infinite loop update -> gather all events -> loop event and update -> render (vsync wait) + block when no events - update (render) + other events (don't render) + block when no events - \ No newline at end of file