Support ui::edit callback on start text input

This commit is contained in:
Nikita Lisitsa 2022-04-10 15:12:42 +03:00
parent 32bb106467
commit edccbc3ed5
2 changed files with 16 additions and 0 deletions

View file

@ -52,6 +52,8 @@ namespace psemek::ui
using callback_type = std::function<void(std::u32string_view)>; using callback_type = std::function<void(std::u32string_view)>;
virtual void on_text_entered(callback_type callback, bool signal = true); virtual void on_text_entered(callback_type callback, bool signal = true);
virtual void on_start_input(std::function<void()> callback);
bool on_event(mouse_move const & e) override; bool on_event(mouse_move const & e) override;
bool on_event(mouse_click const & e) override; bool on_event(mouse_click const & e) override;
bool on_event(key_press const & e) override; bool on_event(key_press const & e) override;
@ -97,6 +99,7 @@ namespace psemek::ui
validator_type validator_; validator_type validator_;
callback_type on_text_entered_; callback_type on_text_entered_;
std::function<void()> on_start_input_;
struct cached_state struct cached_state
{ {
@ -110,6 +113,7 @@ namespace psemek::ui
void on_state_changed(); void on_state_changed();
void reset_caret(); void reset_caret();
void post_text_entered() const; void post_text_entered() const;
void post_start_input() const;
}; };
} }

View file

@ -88,6 +88,11 @@ namespace psemek::ui
post_text_entered(); post_text_entered();
} }
void edit::on_start_input(std::function<void()> callback)
{
on_start_input_ = std::move(callback);
}
bool edit::on_event(mouse_move const & e) bool edit::on_event(mouse_move const & e)
{ {
auto m = geom::cast<float>(e.position); auto m = geom::cast<float>(e.position);
@ -115,6 +120,7 @@ namespace psemek::ui
old_text_ = text_; old_text_ = text_;
start_text_input(); start_text_input();
reset_caret(); reset_caret();
post_start_input();
} }
if (cached_state_ && mouse_x_) if (cached_state_ && mouse_x_)
@ -426,4 +432,10 @@ namespace psemek::ui
} }
} }
void edit::post_start_input() const
{
if (on_start_input_)
post(on_start_input_);
}
} }