53 lines
1.2 KiB
C++
53 lines
1.2 KiB
C++
/**
|
|
* @file TextInput.cpp
|
|
* @author apio (cloudapio.eu)
|
|
* @brief Base class for text inputs.
|
|
*
|
|
* @copyright Copyright (c) 2024, the Luna authors.
|
|
*
|
|
*/
|
|
|
|
#include <ui/App.h>
|
|
#include <ui/TextInput.h>
|
|
|
|
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<void> 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<void> 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();
|
|
}
|
|
}
|