mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Added io.OptNoCursorBlink option to disable cursor blinking. (#1427). Renamed io.OSXBehaviors to io.OptMacOSXBehaviors. Should affect users as the compile-time default is usually enough. (#473, #650)
This commit is contained in:
		
							
								
								
									
										27
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -774,7 +774,15 @@ ImGuiIO::ImGuiIO() | ||||
|     DisplayFramebufferScale = ImVec2(1.0f, 1.0f); | ||||
|     DisplayVisibleMin = DisplayVisibleMax = ImVec2(0.0f, 0.0f); | ||||
|  | ||||
|     // User functions | ||||
|     // Advanced/subtle behaviors | ||||
| #ifdef __APPLE__ | ||||
|     OptMacOSXBehaviors = true;  // Set Mac OS X style defaults based on __APPLE__ compile time flag | ||||
| #else | ||||
|     OptMacOSXBehaviors = false; | ||||
| #endif | ||||
|     OptNoCursorBlink = false; | ||||
|                                  | ||||
|     // Settings (User Functions) | ||||
|     RenderDrawListsFn = NULL; | ||||
|     MemAllocFn = malloc; | ||||
|     MemFreeFn = free; | ||||
| @@ -790,11 +798,6 @@ ImGuiIO::ImGuiIO() | ||||
|     MouseDragThreshold = 6.0f; | ||||
|     for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f; | ||||
|     for (int i = 0; i < IM_ARRAYSIZE(KeysDownDuration); i++) KeysDownDuration[i] = KeysDownDurationPrev[i] = -1.0f; | ||||
|  | ||||
|     // Set OS X style defaults based on __APPLE__ compile time flag | ||||
| #ifdef __APPLE__ | ||||
|     OSXBehaviors = true; | ||||
| #endif | ||||
| } | ||||
|  | ||||
| // Pass in translated ASCII characters for text input. | ||||
| @@ -8099,7 +8102,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 | ||||
|         const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + edit_state.ScrollX; | ||||
|         const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f)); | ||||
|  | ||||
|         const bool osx_double_click_selects_words = io.OSXBehaviors;      // OS X style: Double click selects by word instead of selecting whole text | ||||
|         const bool osx_double_click_selects_words = io.OptMacOSXBehaviors;      // OS X style: Double click selects by word instead of selecting whole text | ||||
|         if (select_all || (hovered && !osx_double_click_selects_words && io.MouseDoubleClicked[0])) | ||||
|         { | ||||
|             edit_state.SelectAll(); | ||||
| @@ -8151,9 +8154,9 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 | ||||
|     { | ||||
|         // Handle key-presses | ||||
|         const int k_mask = (io.KeyShift ? STB_TEXTEDIT_K_SHIFT : 0); | ||||
|         const bool is_shortcut_key_only = (io.OSXBehaviors ? (io.KeySuper && !io.KeyCtrl) : (io.KeyCtrl && !io.KeySuper)) && !io.KeyAlt && !io.KeyShift; // OS X style: Shortcuts using Cmd/Super instead of Ctrl | ||||
|         const bool is_wordmove_key_down = io.OSXBehaviors ? io.KeyAlt : io.KeyCtrl;                     // OS X style: Text editing cursor movement using Alt instead of Ctrl | ||||
|         const bool is_startend_key_down = io.OSXBehaviors && io.KeySuper && !io.KeyCtrl && !io.KeyAlt;  // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End | ||||
|         const bool is_shortcut_key_only = (io.OptMacOSXBehaviors ? (io.KeySuper && !io.KeyCtrl) : (io.KeyCtrl && !io.KeySuper)) && !io.KeyAlt && !io.KeyShift; // OS X style: Shortcuts using Cmd/Super instead of Ctrl | ||||
|         const bool is_wordmove_key_down = io.OptMacOSXBehaviors ? io.KeyAlt : io.KeyCtrl;                     // OS X style: Text editing cursor movement using Alt instead of Ctrl | ||||
|         const bool is_startend_key_down = io.OptMacOSXBehaviors && io.KeySuper && !io.KeyCtrl && !io.KeyAlt;  // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End | ||||
|  | ||||
|         if (IsKeyPressedMap(ImGuiKey_LeftArrow))                        { edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); } | ||||
|         else if (IsKeyPressedMap(ImGuiKey_RightArrow))                  { edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); } | ||||
| @@ -8167,7 +8170,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 | ||||
|             if (!edit_state.HasSelection()) | ||||
|             { | ||||
|                 if (is_wordmove_key_down) edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT); | ||||
|                 else if (io.OSXBehaviors && io.KeySuper && !io.KeyAlt && !io.KeyCtrl) edit_state.OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT); | ||||
|                 else if (io.OptMacOSXBehaviors && io.KeySuper && !io.KeyAlt && !io.KeyCtrl) edit_state.OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT); | ||||
|             } | ||||
|             edit_state.OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); | ||||
|         } | ||||
| @@ -8491,7 +8494,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 | ||||
|         draw_window->DrawList->AddText(g.Font, g.FontSize, render_pos - render_scroll, GetColorU32(ImGuiCol_Text), buf_display, buf_display + edit_state.CurLenA, 0.0f, is_multiline ? NULL : &clip_rect); | ||||
|  | ||||
|         // Draw blinking cursor | ||||
|         bool cursor_is_visible = (g.InputTextState.CursorAnim <= 0.0f) || fmodf(g.InputTextState.CursorAnim, 1.20f) <= 0.80f; | ||||
|         bool cursor_is_visible = (g.IO.OptNoCursorBlink) || (g.InputTextState.CursorAnim <= 0.0f) || fmodf(g.InputTextState.CursorAnim, 1.20f) <= 0.80f; | ||||
|         ImVec2 cursor_screen_pos = render_pos + cursor_offset - render_scroll; | ||||
|         ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y-g.FontSize+0.5f, cursor_screen_pos.x+1.0f, cursor_screen_pos.y-1.5f); | ||||
|         if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user