40 lines
1.0 KiB
C++
40 lines
1.0 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);
|
||
|
}
|
||
|
|
||
|
Result<EventResult> Container::handle_mousemove(Point position)
|
||
|
{
|
||
|
return m_widget->handle_mousemove(position);
|
||
|
}
|
||
|
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
}
|