diff --git a/libs/ui/include/psemek/ui/edit.hpp b/libs/ui/include/psemek/ui/edit.hpp index a75c05b2..304e3417 100644 --- a/libs/ui/include/psemek/ui/edit.hpp +++ b/libs/ui/include/psemek/ui/edit.hpp @@ -77,6 +77,7 @@ namespace psemek::ui private: std::u32string text_; + std::u32string old_text_; font_type font_; halignment halign_ = halignment::left; valignment valign_ = valignment::top; diff --git a/libs/ui/source/edit.cpp b/libs/ui/source/edit.cpp index e50da67e..76b25e7c 100644 --- a/libs/ui/source/edit.cpp +++ b/libs/ui/source/edit.cpp @@ -109,6 +109,7 @@ namespace psemek::ui if (!editing_) { editing_ = true; + old_text_ = text_; start_text_input(); 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; } @@ -157,7 +173,7 @@ namespace psemek::ui { caret_ = text_.size(); } - else if (e.key == SDLK_RETURN || e.key == SDLK_ESCAPE) + else if (e.key == SDLK_RETURN) { if (editing_) { @@ -167,6 +183,19 @@ namespace psemek::ui 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) { if (caret_ > 0)