/** * @file TextInput.cpp * @author apio (cloudapio.eu) * @brief Base class for text inputs. * * @copyright Copyright (c) 2024, the Luna authors. * */ #include #include namespace ui { TextInput::TextInput(Window* window, Widget* parent) : Widget(window, parent) { m_cursor_timer = os::Timer::create_repeating(500, [this]() { this->tick_cursor(); }).release_value(); } void TextInput::update_cursor() { m_cursor_timer->restart(); m_cursor_activated = true; } Result TextInput::delete_current_character() { usize size = m_data.size() - m_cursor; u8* slice = TRY(m_data.slice(m_cursor, size)); memmove(slice, slice + 1, size - 1); TRY(m_data.try_resize(m_data.size() - 1)); return {}; } Result TextInput::insert_character(char c) { usize size = m_data.size() - m_cursor; u8* slice = TRY(m_data.slice(m_cursor, size + 1)); memmove(slice + 1, slice, size); *slice = (u8)c; return {}; } void TextInput::tick_cursor() { m_cursor_activated = !m_cursor_activated; window()->draw(); } }