/** * @file Label.cpp * @author apio (cloudapio.eu) * @brief A simple one-line text widget. * * @copyright Copyright (c) 2023, the Luna authors. * */ #include #include namespace ui { Label::Label(StringView text, VerticalAlignment valign, HorizontalAlignment halign, SharedPtr font) : m_text(text), m_valign(valign), m_halign(halign), m_font(font) { } Result Label::draw(Canvas& canvas) { ui::Rect contained; contained.pos = { 0, 0 }; contained.width = static_cast(m_text.length() * m_font->width()); contained.height = m_font->height(); auto subcanvas = canvas.subcanvas(ui::align({ 0, 0, m_rect.width, m_rect.height }, contained, m_valign, m_halign)); Utf8StringDecoder decoder(m_text.chars()); wchar_t buf[4096]; TRY(decoder.decode(buf, sizeof(buf))); m_font->render(buf, ui::BLACK, subcanvas); return {}; } }