bwidgets/src/w/base/widget.cpp

61 lines
1.4 KiB
C++

#include <SDL2/SDL_assert.h>
#include <SDL2/SDL_events.h>
#include <basic_widgets/w/feat/keyboard_handler.hpp>
#include <basic_widgets/w/feat/mouse_handler.hpp>
#include <basic_widgets/w/base/widget.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;
#ifndef _NDEBUG
_renderer->draw_color({0, 255, 0, SDL_ALPHA_TRANSPARENT})
->draw_rect(nullptr);
#endif
_renderer->viewport(_viewport);
_handle_rendering();
return this;
}