mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-25 21:17:01 +00:00
InputText: fixed minor one-frame selection glitch when reverting with Escape + disable cursor rendering on revert frame. (#3008)
Amendbdbb2b21
,83efdcec
This commit is contained in:
parent
4b522e145c
commit
60ab8a94a7
@ -93,6 +93,7 @@ Other Changes:
|
|||||||
by converting them to half-width (U+0021..U+007E).
|
by converting them to half-width (U+0021..U+007E).
|
||||||
- InputText: added support for shift+click style selection. (#5619) [@procedural]
|
- InputText: added support for shift+click style selection. (#5619) [@procedural]
|
||||||
- InputText: clarified that callbacks cannot modify buffer when using the ReadOnly flag.
|
- InputText: clarified that callbacks cannot modify buffer when using the ReadOnly flag.
|
||||||
|
- InputText: fixed minor one-frame selection glitch when reverting with Escape.
|
||||||
- IsItemHovered: Added ImGuiHoveredFlags_DelayNormal and ImGuiHoveredFlags_DelayShort flags,
|
- IsItemHovered: Added ImGuiHoveredFlags_DelayNormal and ImGuiHoveredFlags_DelayShort flags,
|
||||||
allowing to introduce a shared delay for tooltip idioms. The delays are respectively
|
allowing to introduce a shared delay for tooltip idioms. The delays are respectively
|
||||||
io.HoverDelayNormal (default to 0.30f) and io.HoverDelayFast (default to 0.10f). (#1485)
|
io.HoverDelayNormal (default to 0.30f) and io.HoverDelayFast (default to 0.10f). (#1485)
|
||||||
|
@ -3745,11 +3745,12 @@ static void stb_textedit_replace(ImGuiInputTextState* str, STB_TexteditState* st
|
|||||||
{
|
{
|
||||||
stb_text_makeundo_replace(str, state, 0, str->CurLenW, text_len);
|
stb_text_makeundo_replace(str, state, 0, str->CurLenW, text_len);
|
||||||
ImStb::STB_TEXTEDIT_DELETECHARS(str, 0, str->CurLenW);
|
ImStb::STB_TEXTEDIT_DELETECHARS(str, 0, str->CurLenW);
|
||||||
|
state->cursor = state->select_start = state->select_end = 0;
|
||||||
if (text_len <= 0)
|
if (text_len <= 0)
|
||||||
return;
|
return;
|
||||||
if (ImStb::STB_TEXTEDIT_INSERTCHARS(str, 0, text, text_len))
|
if (ImStb::STB_TEXTEDIT_INSERTCHARS(str, 0, text, text_len))
|
||||||
{
|
{
|
||||||
state->cursor = text_len;
|
state->cursor = state->select_start = state->select_end = text_len;
|
||||||
state->has_preferred_x = 0;
|
state->has_preferred_x = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -4152,7 +4153,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
|||||||
clear_active_id = true;
|
clear_active_id = true;
|
||||||
|
|
||||||
// Lock the decision of whether we are going to take the path displaying the cursor or selection
|
// Lock the decision of whether we are going to take the path displaying the cursor or selection
|
||||||
const bool render_cursor = (g.ActiveId == id) || (state && user_scroll_active);
|
bool render_cursor = (g.ActiveId == id) || (state && user_scroll_active);
|
||||||
bool render_selection = state && (state->HasSelection() || select_all) && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
|
bool render_selection = state && (state->HasSelection() || select_all) && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
|
||||||
bool value_changed = false;
|
bool value_changed = false;
|
||||||
bool validated = false;
|
bool validated = false;
|
||||||
@ -4372,6 +4373,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
|||||||
else if (is_cancel)
|
else if (is_cancel)
|
||||||
{
|
{
|
||||||
clear_active_id = cancel_edit = true;
|
clear_active_id = cancel_edit = true;
|
||||||
|
render_cursor = render_selection = false;
|
||||||
}
|
}
|
||||||
else if (is_undo || is_redo)
|
else if (is_undo || is_redo)
|
||||||
{
|
{
|
||||||
@ -4442,10 +4444,10 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
|||||||
if (g.ActiveId == id)
|
if (g.ActiveId == id)
|
||||||
{
|
{
|
||||||
IM_ASSERT(state != NULL);
|
IM_ASSERT(state != NULL);
|
||||||
if (cancel_edit)
|
if (cancel_edit && !is_readonly)
|
||||||
{
|
{
|
||||||
// Restore initial value. Only return true if restoring to the initial value changes the current buffer contents.
|
// Restore initial value. Only return true if restoring to the initial value changes the current buffer contents.
|
||||||
if (!is_readonly && strcmp(buf, state->InitialTextA.Data) != 0)
|
if (strcmp(buf, state->InitialTextA.Data) != 0)
|
||||||
{
|
{
|
||||||
// Push records into the undo stack so we can CTRL+Z the revert operation itself
|
// Push records into the undo stack so we can CTRL+Z the revert operation itself
|
||||||
apply_new_text = state->InitialTextA.Data;
|
apply_new_text = state->InitialTextA.Data;
|
||||||
|
Loading…
Reference in New Issue
Block a user