فهرست منبع

InputText: update mouse drag on mouse move only & key input reposition selection bounds (better fix for #429)

ocornut 9 سال پیش
والد
کامیت
6c7f8efe1e
2فایلهای تغییر یافته به همراه3 افزوده شده و 2 حذف شده
  1. 1 2
      imgui.cpp
  2. 2 0
      stb_textedit.h

+ 1 - 2
imgui.cpp

@@ -7046,7 +7046,6 @@ void ImGuiTextEditState::OnKeyPressed(int key)
 {
     stb_textedit_key(this, &StbState, key);
     CursorFollow = true;
-    SelectedAllMouseLock = true;
     CursorAnimReset();
 }
 
@@ -7310,7 +7309,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
             stb_textedit_click(&edit_state, &edit_state.StbState, mouse_x, mouse_y);
             edit_state.CursorAnimReset();
         }
-        else if (io.MouseDown[0] && !edit_state.SelectedAllMouseLock)
+        else if (io.MouseDown[0] && !edit_state.SelectedAllMouseLock && (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f))
         {
             stb_textedit_drag(&edit_state, &edit_state.StbState, mouse_x, mouse_y);
             edit_state.CursorAnimReset();

+ 2 - 0
stb_textedit.h

@@ -437,6 +437,8 @@ static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *stat
 static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
 {
    int p = stb_text_locate_coord(str, x, y);
+   if (state->select_start == state->select_end)
+      state->select_start = state->cursor;
    state->cursor = state->select_end = p;
 }