bwidgets/src/w/base/layout.cpp

43 lines
888 B
C++

#include <basic_widgets/w/base/layout.hpp>
using namespace bwidgets;
Layout::~Layout() noexcept
{
for (auto* widget_ptr : _widgets) delete widget_ptr;
}
auto Layout::add_widget(Widget* widget_ptr) -> Layout*
{
widget_ptr->renderer(_renderer);
_widgets.emplace_back(widget_ptr);
_update_layout(_viewport);
return this;
}
void Layout::for_widgets(const std::function<void(Widget*)>& f)
{
for (auto* w : _widgets) f(w);
}
auto Layout::handle_event(const SDL_Event& ev) -> Layout*
{
for (auto* widget_ptr : _widgets) widget_ptr->handle_event(ev);
return this;
}
void Layout::_handle_geometry_change(const SDL_Rect& vp) noexcept
{
_update_layout(vp);
}
void Layout::_handle_renderer_change(Renderer* r)
{
for (auto* w : _widgets) w->renderer(r);
}
void Layout::_handle_rendering()
{
for (auto* widget_ptr : _widgets) widget_ptr->render();
}