libui/InputField: Fix a few bugs and add a clear() method
This commit is contained in:
parent
140910763e
commit
15dc71e8e1
@ -23,6 +23,8 @@ namespace ui
|
|||||||
|
|
||||||
Result<void> draw(ui::Canvas& canvas) override;
|
Result<void> draw(ui::Canvas& canvas) override;
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
|
||||||
StringView data();
|
StringView data();
|
||||||
|
|
||||||
void on_submit(os::Function<StringView>&& action)
|
void on_submit(os::Function<StringView>&& action)
|
||||||
|
@ -17,6 +17,8 @@ namespace ui
|
|||||||
{
|
{
|
||||||
InputField::InputField(SharedPtr<ui::Font> font) : ui::TextInput(), m_font(font)
|
InputField::InputField(SharedPtr<ui::Font> font) : ui::TextInput(), m_font(font)
|
||||||
{
|
{
|
||||||
|
u8 zero = 0;
|
||||||
|
m_data.append_data(&zero, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<ui::EventResult> InputField::handle_key_event(const ui::KeyEventRequest& request)
|
Result<ui::EventResult> InputField::handle_key_event(const ui::KeyEventRequest& request)
|
||||||
@ -35,7 +37,7 @@ namespace ui
|
|||||||
|
|
||||||
if (request.code == moon::K_RightArrow)
|
if (request.code == moon::K_RightArrow)
|
||||||
{
|
{
|
||||||
if (m_cursor < m_data.size()) m_cursor++;
|
if (m_cursor < (m_data.size() - 1)) m_cursor++;
|
||||||
else
|
else
|
||||||
return ui::EventResult::DidNotHandle;
|
return ui::EventResult::DidNotHandle;
|
||||||
update_cursor();
|
update_cursor();
|
||||||
@ -67,9 +69,7 @@ namespace ui
|
|||||||
|
|
||||||
if (iscntrl(request.letter)) return ui::EventResult::DidNotHandle;
|
if (iscntrl(request.letter)) return ui::EventResult::DidNotHandle;
|
||||||
|
|
||||||
if (m_cursor == m_data.size()) TRY(m_data.append_data((const u8*)&request.letter, 1));
|
TRY(insert_character(request.letter));
|
||||||
else
|
|
||||||
TRY(insert_character(request.letter));
|
|
||||||
|
|
||||||
m_cursor++;
|
m_cursor++;
|
||||||
|
|
||||||
@ -78,6 +78,14 @@ namespace ui
|
|||||||
return ui::EventResult::DidHandle;
|
return ui::EventResult::DidHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InputField::clear()
|
||||||
|
{
|
||||||
|
m_data.try_resize(0);
|
||||||
|
u8 zero = 0;
|
||||||
|
m_data.append_data(&zero, 1);
|
||||||
|
m_cursor = 0;
|
||||||
|
}
|
||||||
|
|
||||||
Result<void> InputField::draw(ui::Canvas& canvas)
|
Result<void> InputField::draw(ui::Canvas& canvas)
|
||||||
{
|
{
|
||||||
int visible_characters = canvas.width / m_font->width();
|
int visible_characters = canvas.width / m_font->width();
|
||||||
@ -107,6 +115,7 @@ namespace ui
|
|||||||
|
|
||||||
StringView InputField::data()
|
StringView InputField::data()
|
||||||
{
|
{
|
||||||
|
if (!m_data.size()) return StringView {};
|
||||||
return StringView { (const char*)m_data.data(), m_data.size() };
|
return StringView { (const char*)m_data.data(), m_data.size() };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user