56 lines
1.5 KiB
C++
56 lines
1.5 KiB
C++
/**
|
|
* @file Container.cpp
|
|
* @author apio (cloudapio.eu)
|
|
* @brief A container widget to pad and align objects inside it.
|
|
*
|
|
* @copyright Copyright (c) 2023, the Luna authors.
|
|
*
|
|
*/
|
|
|
|
#include <ui/Container.h>
|
|
|
|
namespace ui
|
|
{
|
|
Container::Container(Rect rect, VerticalAlignment valign, HorizontalAlignment halign)
|
|
: m_valign(valign), m_halign(halign)
|
|
{
|
|
m_rect = rect;
|
|
}
|
|
|
|
void Container::set_widget(Widget& widget)
|
|
{
|
|
m_widget = &widget;
|
|
widget.rect() = ui::align(m_rect, widget.rect(), m_valign, m_halign);
|
|
widget.set_parent(this);
|
|
}
|
|
|
|
Result<EventResult> Container::handle_mouse_move(Point position)
|
|
{
|
|
return m_widget->handle_mouse_move(position);
|
|
}
|
|
|
|
Result<EventResult> Container::handle_mouse_leave(Point position)
|
|
{
|
|
return m_widget->handle_mouse_leave(position);
|
|
}
|
|
|
|
Result<EventResult> Container::handle_mouse_down(Point position, int buttons)
|
|
{
|
|
return m_widget->handle_mouse_down(position, buttons);
|
|
}
|
|
|
|
Result<EventResult> Container::handle_mouse_up(Point position, int buttons)
|
|
{
|
|
return m_widget->handle_mouse_up(position, buttons);
|
|
}
|
|
|
|
Result<void> Container::draw(Canvas& canvas)
|
|
{
|
|
auto rect = ui::Rect { m_widget->rect().pos.x - m_rect.pos.x, m_widget->rect().pos.y - m_rect.pos.y,
|
|
m_widget->rect().width, m_widget->rect().height };
|
|
auto subcanvas = canvas.subcanvas(rect);
|
|
return m_widget->draw(subcanvas);
|
|
}
|
|
|
|
}
|