IME window follow the input cursor.
Abstruct set_ime_position to OS class. Update ime position for LineEdit and TextEdit.
This commit is contained in:
@@ -660,6 +660,11 @@ void LineEdit::_notification(int p_what) {
|
||||
Point2(x_ofs, y_ofs), Size2(1, caret_height)),
|
||||
cursor_color);
|
||||
}
|
||||
|
||||
if (has_focus()) {
|
||||
|
||||
OS::get_singleton()->set_ime_position(get_global_position() + Point2(x_ofs, y_ofs + caret_height));
|
||||
}
|
||||
} break;
|
||||
case NOTIFICATION_FOCUS_ENTER: {
|
||||
|
||||
@@ -667,12 +672,17 @@ void LineEdit::_notification(int p_what) {
|
||||
draw_caret = true;
|
||||
}
|
||||
|
||||
Point2 cursor_pos = Point2(get_cursor_pos(), 1) * get_minimum_size().height;
|
||||
OS::get_singleton()->set_ime_position(get_global_position() + cursor_pos);
|
||||
|
||||
if (OS::get_singleton()->has_virtual_keyboard())
|
||||
OS::get_singleton()->show_virtual_keyboard(text, get_global_rect());
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_FOCUS_EXIT: {
|
||||
|
||||
OS::get_singleton()->set_ime_position(Point2());
|
||||
|
||||
if (OS::get_singleton()->has_virtual_keyboard())
|
||||
OS::get_singleton()->hide_virtual_keyboard();
|
||||
|
||||
|
||||
@@ -1191,12 +1191,19 @@ void TextEdit::_notification(int p_what) {
|
||||
}
|
||||
}
|
||||
|
||||
if (has_focus()) {
|
||||
OS::get_singleton()->set_ime_position(get_global_position() + cursor_pos + Point2(0, get_row_height()));
|
||||
}
|
||||
} break;
|
||||
case NOTIFICATION_FOCUS_ENTER: {
|
||||
|
||||
if (!caret_blink_enabled) {
|
||||
draw_caret = true;
|
||||
}
|
||||
|
||||
Point2 cursor_pos = Point2(cursor_get_column(), cursor_get_line()) * get_row_height();
|
||||
OS::get_singleton()->set_ime_position(get_global_position() + cursor_pos);
|
||||
|
||||
if (OS::get_singleton()->has_virtual_keyboard())
|
||||
OS::get_singleton()->show_virtual_keyboard(get_text(), get_global_rect());
|
||||
if (raised_from_completion) {
|
||||
@@ -1206,6 +1213,8 @@ void TextEdit::_notification(int p_what) {
|
||||
} break;
|
||||
case NOTIFICATION_FOCUS_EXIT: {
|
||||
|
||||
OS::get_singleton()->set_ime_position(Point2());
|
||||
|
||||
if (OS::get_singleton()->has_virtual_keyboard())
|
||||
OS::get_singleton()->hide_virtual_keyboard();
|
||||
if (raised_from_completion) {
|
||||
|
||||
Reference in New Issue
Block a user