Support cancelling editing text in ui::edit
This commit is contained in:
parent
e445b42724
commit
26631cd564
2 changed files with 31 additions and 1 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue