@@ -166,6 +166,9 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out,
166166 char cursor_follow = 0 ;
167167 struct nk_rect old_clip ;
168168 struct nk_rect clip ;
169+ /*Variables for text keyboard(kb) support*/
170+ nk_bool kb_text_want = nk_false ;
171+ struct nk_rect kb_text_cursor = nk_rect (0.0f , 0.0f , 0.0f , 0.0f );
169172
170173 NK_ASSERT (state );
171174 NK_ASSERT (out );
@@ -251,13 +254,17 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out,
251254 cursor_follow = nk_true ;
252255 }
253256 }
254- if (old_mode != edit -> mode ) {
257+ /* If mode changes and text keys are pressed in the same frame,
258+ * mode change takes priority (may transition to VIEW mode) */
259+ if (old_mode != edit -> mode )
255260 in -> keyboard .text_len = 0 ;
256- }}
261+ else if (edit -> mode == NK_TEXT_EDIT_MODE_INSERT || edit -> mode == NK_TEXT_EDIT_MODE_REPLACE )
262+ kb_text_want = nk_input_want_text_keyboard (in );
263+ }
257264
258265 /* text input */
259266 edit -> filter = filter ;
260- if (in -> keyboard .text_len ) {
267+ if (kb_text_want && in -> keyboard .text_len ) {
261268 nk_textedit_text (edit , in -> keyboard .text , in -> keyboard .text_len );
262269 cursor_follow = nk_true ;
263270 in -> keyboard .text_len = 0 ;
@@ -618,6 +625,7 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out,
618625 cursor .x = area .x + cursor_pos .x - edit -> scrollbar .x ;
619626 cursor .y = area .y + cursor_pos .y + row_height /2.0f - cursor .h /2.0f ;
620627 cursor .y -= edit -> scrollbar .y ;
628+ kb_text_cursor = cursor ;
621629 nk_fill_rect (out , cursor , 0 , cursor_color );
622630 } else {
623631 /* draw cursor inside text */
@@ -637,6 +645,7 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out,
637645 txt .padding = nk_vec2 (0 ,0 );
638646 txt .background = cursor_color ;;
639647 txt .text = cursor_text_color ;
648+ kb_text_cursor = label ;
640649 nk_fill_rect (out , label , 0 , cursor_color );
641650 nk_widget_text (out , label , cursor_ptr , glyph_len , & txt , NK_TEXT_LEFT , font );
642651 }
@@ -673,6 +682,11 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out,
673682 background_color , text_color , nk_false );
674683 }
675684 nk_push_scissor (out , old_clip );}
685+ if (kb_text_want ) {
686+ NK_ASSERT (in );
687+ in -> keyboard .text_cursor = kb_text_cursor ;
688+ in -> keyboard .text_area = clip ;
689+ }
676690 return ret ;
677691}
678692NK_API void
0 commit comments