Explorar o código

InputText(): Added io.DoubleClickSelectsWord option for OS X compatible behavior (#473)

ocornut %!s(int64=9) %!d(string=hai) anos
pai
achega
aa7a29cdbf
Modificáronse 2 ficheiros con 9 adicións e 1 borrados
  1. 8 1
      imgui.cpp
  2. 1 0
      imgui.h

+ 8 - 1
imgui.cpp

@@ -792,6 +792,7 @@ ImGuiIO::ImGuiIO()
 #ifdef __APPLE__
     WordMovementUsesAltKey = true;      // Text editing cursor movement using Alt instead of Ctrl
     ShortcutsUseSuperKey = true;        // Shortcuts using Cmd/Super instead of Ctrl
+    DoubleClickSelectsWord = true;      // Double click selects by word instead of selecting whole text
 #endif
 }
 
@@ -7414,11 +7415,17 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
         const float mouse_x = (g.IO.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + edit_state.ScrollX;
         const float mouse_y = (is_multiline ? (g.IO.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f));
 
-        if (select_all || (hovered && io.MouseDoubleClicked[0]))
+        if (select_all || (hovered && !io.DoubleClickSelectsWord && io.MouseDoubleClicked[0]))
         {
             edit_state.SelectAll();
             edit_state.SelectedAllMouseLock = true;
         }
+        else if (hovered && io.DoubleClickSelectsWord && io.MouseDoubleClicked[0])
+        {
+            // Select a word only, OS X style (by simulating keystrokes)
+            edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT);
+            edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT);
+        }
         else if (io.MouseClicked[0] && !edit_state.SelectedAllMouseLock)
         {
             stb_textedit_click(&edit_state, &edit_state.StbState, mouse_x, mouse_y);

+ 1 - 0
imgui.h

@@ -711,6 +711,7 @@ struct ImGuiIO
 	// Advanced/subtle behaviors
     bool          WordMovementUsesAltKey;   // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl
     bool          ShortcutsUseSuperKey;     // = defined(__APPLE__) // OS X style: Shortcuts using Cmd/Super instead of Ctrl
+    bool          DoubleClickSelectsWord;   // = defined(__APPLE__) // OS X style: Double click selects by word instead of selecting whole text
 
     //------------------------------------------------------------------
     // User Functions