diff --git a/kernel/include/kernel/Input.h b/kernel/include/kernel/Input.h index 71a737f37..38e66786b 100644 --- a/kernel/include/kernel/Input.h +++ b/kernel/include/kernel/Input.h @@ -1,5 +1,6 @@ #pragma once +#include #include namespace Input @@ -57,9 +58,9 @@ namespace Input void update(); bool is_key_down(Key); - void register_key_event_callback(void (*callback)(KeyEvent)); - void register_mouse_button_event_callback(void (*callback)(MouseButtonEvent)); - void register_mouse_move_event_callback(void (*callback)(MouseMoveEvent)); + void register_key_event_callback(const BAN::Function&); + void register_mouse_button_event_callback(const BAN::Function&); + void register_mouse_move_event_callback(const BAN::Function&); const char* key_event_to_utf8(KeyEvent); diff --git a/kernel/kernel/Input.cpp b/kernel/kernel/Input.cpp index aa83ac1c2..c3c4a6f15 100644 --- a/kernel/kernel/Input.cpp +++ b/kernel/kernel/Input.cpp @@ -106,9 +106,9 @@ namespace Input static uint8_t s_led_states = 0b000; static uint8_t s_modifiers = 0x00; - static void (*s_key_event_callback)(KeyEvent) = nullptr; - static void (*s_mouse_button_event_callback)(MouseButtonEvent) = nullptr; - static void (*s_mouse_move_event_callback)(MouseMoveEvent) = nullptr; + static BAN::Function s_key_event_callback; + static BAN::Function s_mouse_button_event_callback; + static BAN::Function s_mouse_move_event_callback; static const char* s_key_to_utf8_lower[] { @@ -385,21 +385,21 @@ namespace Input while (!s_key_event_queue.Empty()) { - if (s_key_event_callback) + if (s_key_event_callback.HasFunction()) s_key_event_callback(s_key_event_queue.Front()); s_key_event_queue.Pop(); } while (!s_mouse_button_event_queue.Empty()) { - if (s_mouse_button_event_callback) + if (s_mouse_button_event_callback.HasFunction()) s_mouse_button_event_callback(s_mouse_button_event_queue.Front()); s_mouse_button_event_queue.Pop(); } while (!s_mouse_move_event_queue.Empty()) { - if (s_mouse_move_event_callback) + if (s_mouse_move_event_callback.HasFunction()) s_mouse_move_event_callback(s_mouse_move_event_queue.Front()); s_mouse_move_event_queue.Pop(); } @@ -663,17 +663,17 @@ namespace Input return true; } - void register_key_event_callback(void (*callback)(KeyEvent)) + void register_key_event_callback(const BAN::Function& callback) { s_key_event_callback = callback; } - void register_mouse_button_event_callback(void (*callback)(MouseButtonEvent)) + void register_mouse_button_event_callback(const BAN::Function& callback) { s_mouse_button_event_callback = callback; } - void register_mouse_move_event_callback(void (*callback)(MouseMoveEvent)) + void register_mouse_move_event_callback(const BAN::Function& callback) { s_mouse_move_event_callback = callback; } diff --git a/kernel/kernel/Shell.cpp b/kernel/kernel/Shell.cpp index 3826f6ea3..7511d1327 100644 --- a/kernel/kernel/Shell.cpp +++ b/kernel/kernel/Shell.cpp @@ -48,9 +48,9 @@ namespace Kernel Shell::Shell() { - Input::register_key_event_callback([](Input::KeyEvent event) { Shell::Get().KeyEventCallback(event); }); - Input::register_mouse_move_event_callback([](Input::MouseMoveEvent event) { Shell::Get().MouseMoveEventCallback(event); }); SetPrompt("\\[\e[32m\\]user\\[\e[m\\]# "_sv); + Input::register_key_event_callback({ &Shell::KeyEventCallback, this }); + Input::register_mouse_move_event_callback({ &Shell::MouseMoveEventCallback, this }); MUST(m_buffer.PushBack(""_sv)); }