From 9236b92f8680fde7cbdabe17d38eddeb8fa08bfe Mon Sep 17 00:00:00 2001 From: Ingo Rohloff Date: Thu, 10 Oct 2019 11:59:35 +0200 Subject: [PATCH] fix nk_do_edit: Keep scroll position when re-activating edit widget. How to test: Construct two edit widgets. Enter a long text into the first edit widget, so that the widget autoscrolls. Click into second (still empty) edit widget. Click into first edit widget again. => Text jums back, so that first character of text in first edit widget is visible again. This patch keeps the scroll position of the edit widget constant. --- nuklear.h | 4 ++++ package.json | 2 +- src/CHANGELOG | 1 + src/nuklear_edit.c | 3 +++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/nuklear.h b/nuklear.h index a9e4ec8..0a4469f 100644 --- a/nuklear.h +++ b/nuklear.h @@ -26535,7 +26535,10 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, if (!prev_state && edit->active) { const enum nk_text_edit_type type = (flags & NK_EDIT_MULTILINE) ? NK_TEXT_EDIT_MULTI_LINE: NK_TEXT_EDIT_SINGLE_LINE; + /* keep scroll position when re-activating edit widget */ + struct nk_vec2 oldscrollbar = edit->scrollbar; nk_textedit_clear_state(edit, type, filter); + edit->scrollbar = oldscrollbar; if (flags & NK_EDIT_AUTO_SELECT) select_all = nk_true; if (flags & NK_EDIT_GOTO_END_ON_ACTIVATE) { @@ -29094,6 +29097,7 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args) /// - [yy]: Minor version with non-breaking API and library changes /// - [zz]: Bug fix version with no direct changes to API /// +/// - 2020/05/27 (4.02.5) - Fix nk_do_edit: Keep scroll position when re-activating edit widget. /// - 2020/05/09 (4.02.4) - Fix nk_menubar height calculation bug /// - 2020/05/08 (4.02.3) - Fix missing stdarg.h with NK_INCLUDE_STANDARD_VARARGS /// - 2020/04/30 (4.02.2) - Fix nk_edit border drawing bug diff --git a/package.json b/package.json index c966c56..865786a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nuklear", - "version": "4.02.4", + "version": "4.02.5", "repo": "Immediate-Mode-UI/Nuklear", "description": "A small ANSI C gui toolkit", "keywords": ["gl", "ui", "toolkit"], diff --git a/src/CHANGELOG b/src/CHANGELOG index 64826f1..40feac7 100644 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -8,6 +8,7 @@ /// - [yy]: Minor version with non-breaking API and library changes /// - [zz]: Bug fix version with no direct changes to API /// +/// - 2020/05/27 (4.02.5) - Fix nk_do_edit: Keep scroll position when re-activating edit widget. /// - 2020/05/09 (4.02.4) - Fix nk_menubar height calculation bug /// - 2020/05/08 (4.02.3) - Fix missing stdarg.h with NK_INCLUDE_STANDARD_VARARGS /// - 2020/04/30 (4.02.2) - Fix nk_edit border drawing bug diff --git a/src/nuklear_edit.c b/src/nuklear_edit.c index ae22627..07d7516 100644 --- a/src/nuklear_edit.c +++ b/src/nuklear_edit.c @@ -195,7 +195,10 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out, if (!prev_state && edit->active) { const enum nk_text_edit_type type = (flags & NK_EDIT_MULTILINE) ? NK_TEXT_EDIT_MULTI_LINE: NK_TEXT_EDIT_SINGLE_LINE; + /* keep scroll position when re-activating edit widget */ + struct nk_vec2 oldscrollbar = edit->scrollbar; nk_textedit_clear_state(edit, type, filter); + edit->scrollbar = oldscrollbar; if (flags & NK_EDIT_AUTO_SELECT) select_all = nk_true; if (flags & NK_EDIT_GOTO_END_ON_ACTIVATE) {