w32_map_wparam_to_app_key, todo, api
This commit is contained in:
@@ -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},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user