53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
#include <SDL2/SDL_assert.h>
|
|
#include <SDL2/SDL_events.h>
|
|
|
|
#include <basic_widgets/w/base/widget.hpp>
|
|
#include <basic_widgets/w/feat/keyboard_handler.hpp>
|
|
#include <basic_widgets/w/feat/mouse_handler.hpp>
|
|
|
|
using namespace bwidgets;
|
|
|
|
widget::Widget* widget::Widget::handle_event(const SDL_Event& ev)
|
|
{
|
|
if (auto handler = dynamic_cast<KeyboardHandler*>(this); handler != nullptr) {
|
|
switch (ev.type) {
|
|
case SDL_KEYDOWN:
|
|
case SDL_KEYUP:
|
|
handler->handle_keyboard(ev.key);
|
|
break;
|
|
case SDL_TEXTINPUT:
|
|
handler->handle_keyboard(ev.text);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (auto handler = dynamic_cast<MouseHandler*>(this); handler != nullptr) {
|
|
switch (ev.type) {
|
|
case SDL_MOUSEBUTTONDOWN:
|
|
case SDL_MOUSEBUTTONUP:
|
|
handler->handle_mouse(ev.button, _viewport);
|
|
break;
|
|
case SDL_MOUSEMOTION:
|
|
handler->handle_mouse(ev.motion, _viewport);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
widget::Widget* widget::Widget::render()
|
|
{
|
|
SDL_assert_release(_renderer);
|
|
if (!_renderer) return this;
|
|
|
|
#ifdef _NDEBUG
|
|
_renderer->draw_color({0, 255, 0, SDL_ALPHA_TRANSPARENT})->draw_rect(nullptr);
|
|
#endif
|
|
|
|
_renderer->viewport(_viewport);
|
|
_handle_rendering();
|
|
|
|
return this;
|
|
}
|