From 508b36bd7114b057f6ecb8024a780bd189a5b76c Mon Sep 17 00:00:00 2001 From: anulax1225 Date: Sun, 21 Jan 2024 22:47:34 +0100 Subject: [PATCH] Prepering event handling from application side --- bakara/src/bakara/core/application.cpp | 6 ++++++ bakara/src/bakara/core/application.h | 6 +++++- bakara/src/bakara/events/event.h | 15 +++++++++------ bakara/src/bakara/events/window_event.h | 8 +++++--- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/bakara/src/bakara/core/application.cpp b/bakara/src/bakara/core/application.cpp index d31b6a0..f056186 100644 --- a/bakara/src/bakara/core/application.cpp +++ b/bakara/src/bakara/core/application.cpp @@ -4,10 +4,16 @@ namespace Bk { Application::Application() { p_window = Window::create_window(); + p_window->set_event_callback(BK_BIND_EVENT_FN(Application::on_event)); } Application::~Application() { } + void Application::on_event(Event& e) + { + BK_CORE_INFO("Event : {0}", EVENT_STRING(e)); + } + void Application::run() { while (p_running) diff --git a/bakara/src/bakara/core/application.h b/bakara/src/bakara/core/application.h index 509c76e..aff369a 100644 --- a/bakara/src/bakara/core/application.h +++ b/bakara/src/bakara/core/application.h @@ -2,14 +2,18 @@ #include #include "window.h" +#include namespace Bk { + + #define BK_BIND_EVENT_FN(fn) std::bind(&fn, this, std::placeholders::_1) + class Application { public: Application(); virtual ~Application(); - + void on_event(Event& e); void run(); private: std::unique_ptr p_window; diff --git a/bakara/src/bakara/events/event.h b/bakara/src/bakara/events/event.h index 40f18b9..dc51a9b 100644 --- a/bakara/src/bakara/events/event.h +++ b/bakara/src/bakara/events/event.h @@ -40,8 +40,16 @@ namespace Bk { virtual const char* get_name() const override { return BK_STRINGIFY(type); } #define EVENT_CLASS_CATEGORY(category) virtual int get_category_flags() const override { return category; } + + #ifdef BK_DEBUG + #define EVENT_STRINGIFY(str, ...) std::string to_string() const override { return format(str, __VA_ARGS__); } - #define EVENT_STRINGIFY(str, ...) std::string to_string() const override { return format(str, __VA_ARGS__); } + #define EVENT_STRING(event) event.to_string() + #else + #define EVENT_STRINGIFY(str, ...) + + #define EVENT_STRING(event) + #endif class Event { @@ -62,11 +70,6 @@ namespace Bk { } }; - inline std::ostream& operator<<(std::ostream& os, Event& e) - { - return os << e.to_string(); - } - class EventDispatcher { public: diff --git a/bakara/src/bakara/events/window_event.h b/bakara/src/bakara/events/window_event.h index acbcdb1..d44b8ac 100644 --- a/bakara/src/bakara/events/window_event.h +++ b/bakara/src/bakara/events/window_event.h @@ -25,9 +25,11 @@ namespace Bk { class WindowCloseEvent : public Event { - WindowCloseEvent() = default; + public: + WindowCloseEvent() = default; - EVENT_CLASS_TYPE(WindowClose) - EVENT_CLASS_CATEGORY(AppCategory) + EVENT_CLASS_TYPE(WindowClose) + EVENT_CLASS_CATEGORY(AppCategory) + EVENT_STRINGIFY("Window closing%s", ".") }; } \ No newline at end of file