/** * @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 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 Container::handle_mouse_move(Point position) { return m_widget->handle_mouse_move(position); } Result Container::handle_mouse_leave(Point position) { return m_widget->handle_mouse_leave(position); } Result Container::handle_mouse_down(Point position, int buttons) { return m_widget->handle_mouse_down(position, buttons); } Result Container::handle_mouse_up(Point position, int buttons) { return m_widget->handle_mouse_up(position, buttons); } Result 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); } }