#ifndef BWIDGETS_KEYBOARD_HANDLER #define BWIDGETS_KEYBOARD_HANDLER #include struct SDL_KeyboardEvent; struct SDL_TextInputEvent; namespace bwidgets { class KeyboardHandler : public virtual FocusHandler { protected: virtual void _handle_key(const SDL_KeyboardEvent&) = 0; virtual void _handle_text_input(const SDL_TextInputEvent&) = 0; public: using FocusHandler::FocusHandler; KeyboardHandler(const KeyboardHandler&) = delete; KeyboardHandler(KeyboardHandler&&) = delete; ~KeyboardHandler() override = default; auto operator=(const KeyboardHandler&) = delete; auto operator=(KeyboardHandler&&) = delete; virtual auto handle_keyboard(const SDL_KeyboardEvent& ev) -> KeyboardHandler* final { if (_has_focus) _handle_key(ev); return this; } virtual auto handle_keyboard(const SDL_TextInputEvent& ev) -> KeyboardHandler* final { if (_has_focus) _handle_text_input(ev); return this; } }; } #endif