mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Drag, Slider: rework slightly or CTRL+Click or SetKeyboardFocusHere() will show 1 change of active id in the log (rather than a set,clear,set sequence)
This commit is contained in:
		| @@ -2332,26 +2332,20 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, | ||||
|     else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.) | ||||
|         format = PatchFormatStringFloatToInt(format); | ||||
|  | ||||
|     // Tabbing or CTRL-clicking on Drag turns it into an InputText | ||||
|     const bool hovered = ItemHoverable(frame_bb, id); | ||||
|     bool temp_input_is_active = temp_input_allowed && TempInputIsActive(id); | ||||
|     if (!temp_input_is_active) | ||||
|     { | ||||
|         // Tabbing or CTRL-clicking on Drag turns it into an InputText | ||||
|         const bool input_requested_by_tabbing = temp_input_allowed && (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing) != 0; | ||||
|         const bool clicked = (hovered && g.IO.MouseClicked[0]); | ||||
|         const bool double_clicked = (hovered && g.IO.MouseClickedCount[0] == 2); | ||||
|         if (input_requested_by_tabbing || clicked || double_clicked || g.NavActivateId == id || g.NavActivateInputId == id) | ||||
|         { | ||||
|             SetActiveID(id, window); | ||||
|             SetFocusID(id, window); | ||||
|             FocusWindow(window); | ||||
|             g.ActiveIdUsingNavDirMask = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right); | ||||
|             if (temp_input_allowed) | ||||
|                 if (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavActivateInputId == id) | ||||
|                     temp_input_is_active = true; | ||||
|         } | ||||
|         const bool make_active = (input_requested_by_tabbing || clicked || double_clicked || g.NavActivateId == id || g.NavActivateInputId == id); | ||||
|         if (make_active && temp_input_allowed) | ||||
|             if (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavActivateInputId == id) | ||||
|                 temp_input_is_active = true; | ||||
|  | ||||
|         // Experimental: simple click (without moving) turns Drag into an InputText | ||||
|         // (Optional) simple click (without moving) turns Drag into an InputText | ||||
|         if (g.IO.ConfigDragClickToInputText && temp_input_allowed && !temp_input_is_active) | ||||
|             if (g.ActiveId == id && hovered && g.IO.MouseReleased[0] && !IsMouseDragPastThreshold(0, g.IO.MouseDragThreshold * DRAG_MOUSE_THRESHOLD_FACTOR)) | ||||
|             { | ||||
| @@ -2359,6 +2353,14 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, | ||||
|                 g.NavActivateFlags = ImGuiActivateFlags_PreferInput; | ||||
|                 temp_input_is_active = true; | ||||
|             } | ||||
|  | ||||
|         if (make_active && !temp_input_is_active) | ||||
|         { | ||||
|             SetActiveID(id, window); | ||||
|             SetFocusID(id, window); | ||||
|             FocusWindow(window); | ||||
|             g.ActiveIdUsingNavDirMask = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (temp_input_is_active) | ||||
| @@ -2950,21 +2952,24 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_dat | ||||
|     else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.) | ||||
|         format = PatchFormatStringFloatToInt(format); | ||||
|  | ||||
|     // Tabbing or CTRL-clicking on Slider turns it into an input box | ||||
|     const bool hovered = ItemHoverable(frame_bb, id); | ||||
|     bool temp_input_is_active = temp_input_allowed && TempInputIsActive(id); | ||||
|     if (!temp_input_is_active) | ||||
|     { | ||||
|         // Tabbing or CTRL-clicking on Slider turns it into an input box | ||||
|         const bool input_requested_by_tabbing = temp_input_allowed && (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing) != 0; | ||||
|         const bool clicked = (hovered && g.IO.MouseClicked[0]); | ||||
|         if (input_requested_by_tabbing || clicked || g.NavActivateId == id || g.NavActivateInputId == id) | ||||
|         const bool make_active = (input_requested_by_tabbing || clicked || g.NavActivateId == id || g.NavActivateInputId == id); | ||||
|         if (make_active && temp_input_allowed) | ||||
|             if (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || g.NavActivateInputId == id) | ||||
|                 temp_input_is_active = true; | ||||
|  | ||||
|         if (make_active && !temp_input_is_active) | ||||
|         { | ||||
|             SetActiveID(id, window); | ||||
|             SetFocusID(id, window); | ||||
|             FocusWindow(window); | ||||
|             g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right); | ||||
|             if (temp_input_allowed && (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || g.NavActivateInputId == id)) | ||||
|                 temp_input_is_active = true; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user