Support cancelling editing text in ui::edit

This commit is contained in:
Nikita Lisitsa 2022-04-08 14:57:33 +03:00
parent e445b42724
commit 26631cd564
2 changed files with 31 additions and 1 deletions

View file

@ -77,6 +77,7 @@ namespace psemek::ui
private: private:
std::u32string text_; std::u32string text_;
std::u32string old_text_;
font_type font_; font_type font_;
halignment halign_ = halignment::left; halignment halign_ = halignment::left;
valignment valign_ = valignment::top; valignment valign_ = valignment::top;

View file

@ -109,6 +109,7 @@ namespace psemek::ui
if (!editing_) if (!editing_)
{ {
editing_ = true; editing_ = true;
old_text_ = text_;
start_text_input(); start_text_input();
reset_caret(); reset_caret();
} }
@ -126,6 +127,21 @@ namespace psemek::ui
} }
} }
if (e.button == mouse_button::right && e.down)
{
if (editing_)
{
editing_ = false;
text_ = old_text_;
cached_state_.reset();
stop_text_input();
reset_caret();
caret_ = std::min(caret_, text_.size());
post_text_entered();
return true;
}
}
return false; return false;
} }
@ -157,7 +173,7 @@ namespace psemek::ui
{ {
caret_ = text_.size(); caret_ = text_.size();
} }
else if (e.key == SDLK_RETURN || e.key == SDLK_ESCAPE) else if (e.key == SDLK_RETURN)
{ {
if (editing_) if (editing_)
{ {
@ -167,6 +183,19 @@ namespace psemek::ui
post_text_entered(); post_text_entered();
} }
} }
else if (e.key == SDLK_ESCAPE)
{
if (editing_)
{
editing_ = false;
text_ = old_text_;
cached_state_.reset();
stop_text_input();
reset_caret();
caret_ = std::min(caret_, text_.size());
post_text_entered();
}
}
else if (e.key == SDLK_BACKSPACE) else if (e.key == SDLK_BACKSPACE)
{ {
if (caret_ > 0) if (caret_ > 0)