void edit_box::on_event(const event& mEvent) { frame::on_event(mEvent); if (!pManager_->is_input_enabled()) return; if (mEvent.get_name() == "TEXT_ENTERED" && bFocus_) { char32_t c = mEvent.get<char32_t>(0); if (add_char_(c)) { event mKeyEvent; mKeyEvent.add(utils::unicode_to_UTF8(utils::ustring(1, c))); on("Char", &mKeyEvent); } return; } if (mEvent.get_name() == "MOUSE_PRESSED" && bMouseInFrame_) { set_focus(true); unlight_text(); move_carret_at_(iMousePosX_, iMousePosY_); return; } if (mEvent.get_name() == "KEY_PRESSED" && bFocus_) { uint uiChar = mEvent[0].get<uint>(); if (uiChar == key::K_RETURN || uiChar == key::K_NUMPADENTER) on("EnterPressed"); else if (uiChar == key::K_END) { uint uiPreviousCarretPos = iterCarretPos_ - sUnicodeText_.begin(); iterCarretPos_ = sUnicodeText_.end(); update_carret_position_(); if (pManager_->get_input_manager()->shift_is_pressed()) { if (bSelectedText_) highlight_text(uiSelectionStartPos_, iterCarretPos_ - sUnicodeText_.begin()); else highlight_text(uiPreviousCarretPos, iterCarretPos_ - sUnicodeText_.begin()); } else unlight_text(); return; } else if (uiChar == key::K_HOME) { uint uiPreviousCarretPos = iterCarretPos_ - sUnicodeText_.begin(); iterCarretPos_ = sUnicodeText_.begin(); update_carret_position_(); if (pManager_->get_input_manager()->shift_is_pressed()) { if (bSelectedText_) highlight_text(uiSelectionStartPos_, iterCarretPos_ - sUnicodeText_.begin()); else highlight_text(uiPreviousCarretPos, iterCarretPos_ - sUnicodeText_.begin()); } else unlight_text(); return; } else if (uiChar == key::K_TAB) on("TabPressed"); else if (uiChar == key::K_SPACE) on("SpacePressed"); uiLastKeyPressed_ = uiChar; process_key_(uiChar); } else if (mEvent.get_name() == "KEY_RELEASED") { uint uiChar = mEvent[0].get<uint>(); if (uiChar == key::K_ESCAPE) { on("EscapePressed"); return; } if (uiChar == uiLastKeyPressed_) { uiLastKeyPressed_ = 0u; mKeyRepeatTimer_.stop(); } } }