mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Drags, Sliders: Logarithmic: Split back flags into drag/slider flags. Moved to an obsolete section. (#3361, #1823, #1316, #642)
This commit is contained in:
		
							
								
								
									
										113
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -157,6 +157,7 @@ typedef int ImGuiButtonFlags;       // -> enum ImGuiButtonFlags_     // Flags: f | |||||||
| typedef int ImGuiColorEditFlags;    // -> enum ImGuiColorEditFlags_  // Flags: for ColorEdit4(), ColorPicker4() etc. | typedef int ImGuiColorEditFlags;    // -> enum ImGuiColorEditFlags_  // Flags: for ColorEdit4(), ColorPicker4() etc. | ||||||
| typedef int ImGuiConfigFlags;       // -> enum ImGuiConfigFlags_     // Flags: for io.ConfigFlags | typedef int ImGuiConfigFlags;       // -> enum ImGuiConfigFlags_     // Flags: for io.ConfigFlags | ||||||
| typedef int ImGuiComboFlags;        // -> enum ImGuiComboFlags_      // Flags: for BeginCombo() | typedef int ImGuiComboFlags;        // -> enum ImGuiComboFlags_      // Flags: for BeginCombo() | ||||||
|  | typedef int ImGuiDragFlags;         // -> enum ImGuiDragFlags_       // Flags: for DragFloat(), DragInt() etc. | ||||||
| typedef int ImGuiDragDropFlags;     // -> enum ImGuiDragDropFlags_   // Flags: for BeginDragDropSource(), AcceptDragDropPayload() | typedef int ImGuiDragDropFlags;     // -> enum ImGuiDragDropFlags_   // Flags: for BeginDragDropSource(), AcceptDragDropPayload() | ||||||
| typedef int ImGuiFocusedFlags;      // -> enum ImGuiFocusedFlags_    // Flags: for IsWindowFocused() | typedef int ImGuiFocusedFlags;      // -> enum ImGuiFocusedFlags_    // Flags: for IsWindowFocused() | ||||||
| typedef int ImGuiHoveredFlags;      // -> enum ImGuiHoveredFlags_    // Flags: for IsItemHovered(), IsWindowHovered() etc. | typedef int ImGuiHoveredFlags;      // -> enum ImGuiHoveredFlags_    // Flags: for IsItemHovered(), IsWindowHovered() etc. | ||||||
| @@ -164,11 +165,11 @@ typedef int ImGuiInputTextFlags;    // -> enum ImGuiInputTextFlags_  // Flags: f | |||||||
| typedef int ImGuiKeyModFlags;       // -> enum ImGuiKeyModFlags_     // Flags: for io.KeyMods (Ctrl/Shift/Alt/Super) | typedef int ImGuiKeyModFlags;       // -> enum ImGuiKeyModFlags_     // Flags: for io.KeyMods (Ctrl/Shift/Alt/Super) | ||||||
| typedef int ImGuiPopupFlags;        // -> enum ImGuiPopupFlags_      // Flags: for OpenPopup*(), BeginPopupContext*(), IsPopupOpen() | typedef int ImGuiPopupFlags;        // -> enum ImGuiPopupFlags_      // Flags: for OpenPopup*(), BeginPopupContext*(), IsPopupOpen() | ||||||
| typedef int ImGuiSelectableFlags;   // -> enum ImGuiSelectableFlags_ // Flags: for Selectable() | typedef int ImGuiSelectableFlags;   // -> enum ImGuiSelectableFlags_ // Flags: for Selectable() | ||||||
|  | typedef int ImGuiSliderFlags;       // -> enum ImGuiSliderFlags_     // Flags: for SliderFloat(), SliderInt() etc. | ||||||
| typedef int ImGuiTabBarFlags;       // -> enum ImGuiTabBarFlags_     // Flags: for BeginTabBar() | typedef int ImGuiTabBarFlags;       // -> enum ImGuiTabBarFlags_     // Flags: for BeginTabBar() | ||||||
| typedef int ImGuiTabItemFlags;      // -> enum ImGuiTabItemFlags_    // Flags: for BeginTabItem() | typedef int ImGuiTabItemFlags;      // -> enum ImGuiTabItemFlags_    // Flags: for BeginTabItem() | ||||||
| typedef int ImGuiTreeNodeFlags;     // -> enum ImGuiTreeNodeFlags_   // Flags: for TreeNode(), TreeNodeEx(), CollapsingHeader() | typedef int ImGuiTreeNodeFlags;     // -> enum ImGuiTreeNodeFlags_   // Flags: for TreeNode(), TreeNodeEx(), CollapsingHeader() | ||||||
| typedef int ImGuiWindowFlags;       // -> enum ImGuiWindowFlags_     // Flags: for Begin(), BeginChild() | typedef int ImGuiWindowFlags;       // -> enum ImGuiWindowFlags_     // Flags: for Begin(), BeginChild() | ||||||
| typedef int ImGuiDragSliderFlags;   // -> enum ImGuiDragSliderFlags_ // Flags: for SliderFloat()/DragFloat()/etc |  | ||||||
|  |  | ||||||
| // Other types | // Other types | ||||||
| #ifndef ImTextureID                 // ImTextureID [configurable type: override in imconfig.h with '#define ImTextureID xxx'] | #ifndef ImTextureID                 // ImTextureID [configurable type: override in imconfig.h with '#define ImTextureID xxx'] | ||||||
| @@ -466,57 +467,36 @@ namespace ImGui | |||||||
|     // - Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision). |     // - Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision). | ||||||
|     // - Use v_min < v_max to clamp edits to given limits. Note that CTRL+Click manual input can override those limits. |     // - Use v_min < v_max to clamp edits to given limits. Note that CTRL+Click manual input can override those limits. | ||||||
|     // - Use v_max = FLT_MAX / INT_MAX etc to avoid clamping to a maximum, same with v_min = -FLT_MAX / INT_MIN to avoid clamping to a minimum. |     // - Use v_max = FLT_MAX / INT_MAX etc to avoid clamping to a maximum, same with v_min = -FLT_MAX / INT_MIN to avoid clamping to a minimum. | ||||||
|     IMGUI_API bool          DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiDragSliderFlags flags = 0);     // If v_min >= v_max we have no bound |     IMGUI_API bool          DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiDragFlags flags = 0);     // If v_min >= v_max we have no bound | ||||||
|     IMGUI_API bool          DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", const char* format_max = NULL, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", const char* format_max = NULL, ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiDragSliderFlags flags = 0);  // If v_min >= v_max we have no bound |     IMGUI_API bool          DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiDragFlags flags = 0);  // If v_min >= v_max we have no bound | ||||||
|     IMGUI_API bool          DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", const char* format_max = NULL, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", const char* format_max = NULL, ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiDragFlags flags = 0); | ||||||
|  |  | ||||||
|     // [Obsolete] |  | ||||||
|     // Old drag functions that take a power term instead of flags |  | ||||||
|     IMGUI_API bool          DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power);     // If v_min >= v_max we have no bound |  | ||||||
|     IMGUI_API bool          DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, float power); |  | ||||||
|     IMGUI_API bool          DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power); |  | ||||||
|  |  | ||||||
|     // Widgets: Sliders |     // Widgets: Sliders | ||||||
|     // - CTRL+Click on any slider to turn them into an input box. Manually input values aren't clamped and can go off-bounds. |     // - CTRL+Click on any slider to turn them into an input box. Manually input values aren't clamped and can go off-bounds. | ||||||
|     // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc. |     // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc. | ||||||
|     IMGUI_API bool          SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiDragSliderFlags flags = 0);     // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display. |     IMGUI_API bool          SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0);     // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display. | ||||||
|     IMGUI_API bool          SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format = "%.3f", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f, const char* format = "%.0f deg", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f, const char* format = "%.0f deg", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format = "%d", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format = "%d", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format = "%d", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format = NULL, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format = "%d", ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0); | ||||||
|  |  | ||||||
|     // [Obsolete] |  | ||||||
|     // Old slider functions that take a power term instead of flags |  | ||||||
|     IMGUI_API bool          SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power);     // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for power curve sliders |  | ||||||
|     IMGUI_API bool          SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, float power); |  | ||||||
|     IMGUI_API bool          VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power); |  | ||||||
|  |  | ||||||
|     // Widgets: Input with Keyboard |     // Widgets: Input with Keyboard | ||||||
|     // - If you want to use InputText() with std::string or any custom dynamic string type, see misc/cpp/imgui_stdlib.h and comments in imgui_demo.cpp. |     // - If you want to use InputText() with std::string or any custom dynamic string type, see misc/cpp/imgui_stdlib.h and comments in imgui_demo.cpp. | ||||||
| @@ -1304,12 +1284,22 @@ enum ImGuiColorEditFlags_ | |||||||
| #endif | #endif | ||||||
| }; | }; | ||||||
|  |  | ||||||
| // Flags for configuring drag/slider widgets | // Flags for DragFloat(), DragInt() etc. | ||||||
| enum ImGuiDragSliderFlags_ | enum ImGuiDragFlags_ | ||||||
| { | { | ||||||
|     ImGuiDragSliderFlags__AnythingBelowThisMightBeAPowerTerm = 8,       // We treat anything < this as being potentially a (float) power term from the previous API that has got miscast to this enum, and trigger an assert |     ImGuiDragFlags_None                     = 0, | ||||||
|     ImGuiDragSliderFlags_Vertical           = 1 << 3,                   // Should this widget be orientated vertically? |     ImGuiDragFlags__AnythingBelowThisMightBeAPowerTerm = 8,     // We treat anything < this as being potentially a (float) power term from the previous API that has got miscast to this enum, and trigger an assert | ||||||
|     ImGuiDragSliderFlags_Logarithmic        = 1 << 4                    // Should this widget be logarithmic? (linear otherwise) |     ImGuiDragFlags_Vertical                 = 1 << 3,           // Should this widget be orientated vertically? | ||||||
|  |     ImGuiDragFlags_Logarithmic              = 1 << 4            // Should this widget be logarithmic? (linear otherwise) | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | // Flags for SliderFloat(), SliderInt() etc. | ||||||
|  | enum ImGuiSliderFlags_ | ||||||
|  | { | ||||||
|  |     ImGuiSliderFlags_None                   = 0, | ||||||
|  |     ImGuiSliderFlags__AnythingBelowThisMightBeAPowerTerm = 8,   // We treat anything < this as being potentially a (float) power term from the previous API that has got miscast to this enum, and trigger an assert | ||||||
|  |     ImGuiSliderFlags_Vertical               = 1 << 3,           // Should this widget be orientated vertically? | ||||||
|  |     ImGuiSliderFlags_Logarithmic            = 1 << 4            // Should this widget be logarithmic? (linear otherwise) | ||||||
| }; | }; | ||||||
|  |  | ||||||
| // Identify a mouse button. | // Identify a mouse button. | ||||||
| @@ -1715,6 +1705,23 @@ struct ImGuiPayload | |||||||
| #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||||
| namespace ImGui | namespace ImGui | ||||||
| { | { | ||||||
|  |     // OBSOLETED in 1.78 (from July 2020) | ||||||
|  |     // Old drag/sliders functions that took a 'float power = 1.0' argument instead of flags | ||||||
|  |     IMGUI_API bool      DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, float power); | ||||||
|  |     IMGUI_API bool      DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, float power); | ||||||
|  |     IMGUI_API bool      VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power); | ||||||
|     // OBSOLETED in 1.77 (from June 2020) |     // OBSOLETED in 1.77 (from June 2020) | ||||||
|     static inline bool  OpenPopupOnItemClick(const char* str_id = NULL, ImGuiMouseButton mb = 1)          { return OpenPopupContextItem(str_id, mb); } // Passing a mouse button to ImGuiPopupFlags is legal |     static inline bool  OpenPopupOnItemClick(const char* str_id = NULL, ImGuiMouseButton mb = 1)          { return OpenPopupContextItem(str_id, mb); } // Passing a mouse button to ImGuiPopupFlags is legal | ||||||
|     static inline bool  BeginPopupContextWindow(const char* str_id, ImGuiMouseButton mb, bool over_items) { return BeginPopupContextWindow(str_id, mb | (over_items ? 0 : ImGuiPopupFlags_NoOpenOverItems)); } |     static inline bool  BeginPopupContextWindow(const char* str_id, ImGuiMouseButton mb, bool over_items) { return BeginPopupContextWindow(str_id, mb | (over_items ? 0 : ImGuiPopupFlags_NoOpenOverItems)); } | ||||||
|   | |||||||
| @@ -1967,27 +1967,27 @@ namespace ImGui | |||||||
|  |  | ||||||
|     // Widgets low-level behaviors |     // Widgets low-level behaviors | ||||||
|     IMGUI_API bool          ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0); |     IMGUI_API bool          ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0); | ||||||
|     IMGUI_API bool          DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragSliderFlags flags); |     IMGUI_API bool          DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags); | ||||||
|     IMGUI_API bool          SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragSliderFlags flags, ImRect* out_grab_bb); |     IMGUI_API bool          SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb); | ||||||
|     IMGUI_API bool          SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f); |     IMGUI_API bool          SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f); | ||||||
|     IMGUI_API bool          TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL); |     IMGUI_API bool          TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL); | ||||||
|     IMGUI_API bool          TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0);                     // Consume previous SetNextItemOpen() data, if any. May return true when logging |     IMGUI_API bool          TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0);                     // Consume previous SetNextItemOpen() data, if any. May return true when logging | ||||||
|     IMGUI_API void          TreePushOverrideID(ImGuiID id); |     IMGUI_API void          TreePushOverrideID(ImGuiID id); | ||||||
|     // Internal implementations for some of the exposed functions (use the non-internal versions instead) |     // Internal implementations for some of the exposed functions (use the non-internal versions instead) | ||||||
|     IMGUI_API bool          DragScalarInternal(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragScalarInternal(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragScalarNInternal(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragScalarNInternal(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          DragFloatRange2Internal(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format = NULL, const char* format_max = NULL, float power = 1.0f, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          DragFloatRange2Internal(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format = NULL, const char* format_max = NULL, float power = 1.0f, ImGuiDragFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderScalarInternal(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderScalarInternal(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          SliderScalarNInternal(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min = NULL, const void* v_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          SliderScalarNInternal(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min = NULL, const void* v_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiSliderFlags flags = 0); | ||||||
|     IMGUI_API bool          VSliderScalarInternal(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiDragSliderFlags flags = 0); |     IMGUI_API bool          VSliderScalarInternal(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f, ImGuiSliderFlags flags = 0); | ||||||
|  |  | ||||||
|     // Template functions are instantiated in imgui_widgets.cpp for a finite number of types. |     // Template functions are instantiated in imgui_widgets.cpp for a finite number of types. | ||||||
|     // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036). |     // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036). | ||||||
|     // e.g. " extern template IMGUI_API float RoundScalarWithFormatT<float, float>(const char* format, ImGuiDataType data_type, float v); " |     // e.g. " extern template IMGUI_API float RoundScalarWithFormatT<float, float>(const char* format, ImGuiDataType data_type, float v); " | ||||||
|     template<typename T, typename SIGNED_T, typename FLOAT_T>   IMGUI_API bool  DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, float power, ImGuiDragSliderFlags flags); |     template<typename T, typename SIGNED_T, typename FLOAT_T>   IMGUI_API bool  DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, float power, ImGuiDragFlags flags); | ||||||
|     template<typename T, typename SIGNED_T, typename FLOAT_T>   IMGUI_API bool  SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, float power, ImGuiDragSliderFlags flags, ImRect* out_grab_bb); |     template<typename T, typename SIGNED_T, typename FLOAT_T>   IMGUI_API bool  SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb); | ||||||
|     template<typename T, typename FLOAT_T>                      IMGUI_API float SliderCalcRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, float power, float linear_zero_pos, float logarithmic_zero_epsilon, ImGuiDragSliderFlags flags); |     template<typename T, typename FLOAT_T>                      IMGUI_API float SliderCalcRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, float power, float linear_zero_pos, float logarithmic_zero_epsilon, ImGuiSliderFlags flags); | ||||||
|     template<typename T, typename FLOAT_T>                      IMGUI_API T     SliderCalcValueFromRatioT(ImGuiDataType data_type, float t, T v_min, T v_max, float power, float linear_zero_pos, float logarithmic_zero_epsilon, ImGuiDragSliderFlags flags); |     template<typename T, typename FLOAT_T>                      IMGUI_API T     SliderCalcValueFromRatioT(ImGuiDataType data_type, float t, T v_min, T v_max, float power, float linear_zero_pos, float logarithmic_zero_epsilon, ImGuiSliderFlags flags); | ||||||
|     template<typename T, typename SIGNED_T>                     IMGUI_API T     RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v); |     template<typename T, typename SIGNED_T>                     IMGUI_API T     RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v); | ||||||
|  |  | ||||||
|     // Data type helpers |     // Data type helpers | ||||||
|   | |||||||
| @@ -1997,13 +1997,13 @@ TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, | |||||||
|  |  | ||||||
| // This is called by DragBehavior() when the widget is active (held by mouse or being manipulated with Nav controls) | // This is called by DragBehavior() when the widget is active (held by mouse or being manipulated with Nav controls) | ||||||
| template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE> | template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE> | ||||||
| bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiDragSliderFlags flags) | bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     const ImGuiAxis axis = (flags & ImGuiDragSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X; |     const ImGuiAxis axis = (flags & ImGuiDragFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X; | ||||||
|     const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); |     const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); | ||||||
|     const bool is_clamped = (v_min < v_max); |     const bool is_clamped = (v_min < v_max); | ||||||
|     const bool is_logarithmic = (flags & ImGuiDragSliderFlags_Logarithmic) && is_decimal; |     const bool is_logarithmic = (flags & ImGuiDragFlags_Logarithmic) && is_decimal; | ||||||
|     const bool is_power = (power != 1.0f && !is_logarithmic && is_decimal && is_clamped && (v_max - v_min < FLT_MAX)); |     const bool is_power = (power != 1.0f && !is_logarithmic && is_decimal && is_clamped && (v_max - v_min < FLT_MAX)); | ||||||
|     const bool is_locked = (v_min > v_max); |     const bool is_locked = (v_min > v_max); | ||||||
|     if (is_locked) |     if (is_locked) | ||||||
| @@ -2130,9 +2130,9 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const | |||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragSliderFlags flags) | bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     IM_ASSERT(((flags == 0) || (flags >= ImGuiDragSliderFlags__AnythingBelowThisMightBeAPowerTerm)) && "Invalid ImGuiDragSliderFlags flags - has a power term been mistakenly cast to flags?"); |     IM_ASSERT(((flags == 0) || (flags >= ImGuiDragFlags__AnythingBelowThisMightBeAPowerTerm)) && "Invalid ImGuiDragFlags flags - has a power term been mistakenly cast to flags?"); | ||||||
|  |  | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     if (g.ActiveId == id) |     if (g.ActiveId == id) | ||||||
| @@ -2166,7 +2166,7 @@ bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v | |||||||
| } | } | ||||||
|  |  | ||||||
| // Internal implementation - see below for entry points | // Internal implementation - see below for entry points | ||||||
| bool ImGui::DragScalarInternal(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragSliderFlags flags) | bool ImGui::DragScalarInternal(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiWindow* window = GetCurrentWindow(); | ||||||
|     if (window->SkipItems) |     if (window->SkipItems) | ||||||
| @@ -2241,21 +2241,15 @@ bool ImGui::DragScalarInternal(const char* label, ImGuiDataType data_type, void* | |||||||
|     return value_changed; |     return value_changed; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter |  | ||||||
| bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return DragScalarInternal(label, data_type, p_data, v_speed, p_min, p_max, format, power, (ImGuiDragSliderFlags)0); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a Drag widget, p_min and p_max are optional. | // Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a Drag widget, p_min and p_max are optional. | ||||||
| // Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly. | // Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly. | ||||||
| bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     return DragScalarInternal(label, data_type, p_data, v_speed, p_min, p_max, format, 1.0f, flags); |     return DragScalarInternal(label, data_type, p_data, v_speed, p_min, p_max, format, 1.0f, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Internal implementation - see below for entry points | // Internal implementation - see below for entry points | ||||||
| bool ImGui::DragScalarNInternal(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragSliderFlags flags) | bool ImGui::DragScalarNInternal(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiWindow* window = GetCurrentWindow(); | ||||||
|     if (window->SkipItems) |     if (window->SkipItems) | ||||||
| @@ -2290,63 +2284,33 @@ bool ImGui::DragScalarNInternal(const char* label, ImGuiDataType data_type, void | |||||||
|     return value_changed; |     return value_changed; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiDragFlags flags) | ||||||
| bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return DragScalarNInternal(label, data_type, p_data, components, v_speed, p_min, p_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return DragScalarNInternal(label, data_type, p_data, components, v_speed, p_min, p_max, format, 1.0f, flags); |     return DragScalarNInternal(label, data_type, p_data, components, v_speed, p_min, p_max, format, 1.0f, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, ImGuiDragFlags flags) | ||||||
| bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, flags); |     return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, ImGuiDragFlags flags) | ||||||
| bool ImGui::DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, flags); |     return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, ImGuiDragFlags flags) | ||||||
| bool ImGui::DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, flags); |     return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, ImGuiDragFlags flags) | ||||||
| bool ImGui::DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, flags); |     return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Internal implementation | // Internal implementation | ||||||
| bool ImGui::DragFloatRange2Internal(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, float power, ImGuiDragSliderFlags flags) | bool ImGui::DragFloatRange2Internal(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, float power, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiWindow* window = GetCurrentWindow(); | ||||||
|     if (window->SkipItems) |     if (window->SkipItems) | ||||||
| @@ -2377,39 +2341,33 @@ bool ImGui::DragFloatRange2Internal(const char* label, float* v_current_min, flo | |||||||
|     return value_changed; |     return value_changed; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, ImGuiDragFlags flags) | ||||||
| bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, float power) |  | ||||||
| { |  | ||||||
|     return DragFloatRange2Internal(label, v_current_min, v_current_max, v_speed, v_min, v_max, format, format_max, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return DragFloatRange2Internal(label, v_current_min, v_current_max, v_speed, v_min, v_max, format, format_max, 1.0f, flags); |     return DragFloatRange2Internal(label, v_current_min, v_current_max, v_speed, v_min, v_max, format, format_max, 1.0f, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // NB: v_speed is float to allow adjusting the drag speed with more precision | // NB: v_speed is float to allow adjusting the drag speed with more precision | ||||||
| bool ImGui::DragInt(const char* label, int* v, float v_speed, int v_min, int v_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::DragInt(const char* label, int* v, float v_speed, int v_min, int v_max, const char* format, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     return DragScalar(label, ImGuiDataType_S32, v, v_speed, &v_min, &v_max, format, flags); |     return DragScalar(label, ImGuiDataType_S32, v, v_speed, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::DragInt2(const char* label, int v[2], float v_speed, int v_min, int v_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::DragInt2(const char* label, int v[2], float v_speed, int v_min, int v_max, const char* format, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     return DragScalarN(label, ImGuiDataType_S32, v, 2, v_speed, &v_min, &v_max, format, flags); |     return DragScalarN(label, ImGuiDataType_S32, v, 2, v_speed, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::DragInt3(const char* label, int v[3], float v_speed, int v_min, int v_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::DragInt3(const char* label, int v[3], float v_speed, int v_min, int v_max, const char* format, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     return DragScalarN(label, ImGuiDataType_S32, v, 3, v_speed, &v_min, &v_max, format, flags); |     return DragScalarN(label, ImGuiDataType_S32, v, 3, v_speed, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::DragInt4(const char* label, int v[4], float v_speed, int v_min, int v_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::DragInt4(const char* label, int v[4], float v_speed, int v_min, int v_max, const char* format, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     return DragScalarN(label, ImGuiDataType_S32, v, 4, v_speed, &v_min, &v_max, format, flags); |     return DragScalarN(label, ImGuiDataType_S32, v, 4, v_speed, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed, int v_min, int v_max, const char* format, const char* format_max, ImGuiDragSliderFlags flags) | bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed, int v_min, int v_max, const char* format, const char* format_max, ImGuiDragFlags flags) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiWindow* window = GetCurrentWindow(); | ||||||
|     if (window->SkipItems) |     if (window->SkipItems) | ||||||
| @@ -2441,6 +2399,46 @@ bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_ | |||||||
|     return value_changed; |     return value_changed; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||||
|  |  | ||||||
|  | // Obsolete versions with power parameter | ||||||
|  | bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return DragScalarInternal(label, data_type, p_data, v_speed, p_min, p_max, format, power, ImGuiDragFlags_None); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return DragScalarNInternal(label, data_type, p_data, components, v_speed, p_min, p_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, float power) | ||||||
|  | { | ||||||
|  |     return DragFloatRange2Internal(label, v_current_min, v_current_max, v_speed, v_min, v_max, format, format_max, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||||
|  |  | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
| // [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc. | // [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc. | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
| @@ -2464,12 +2462,12 @@ bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_ | |||||||
|  |  | ||||||
| // Convert a value v in the output space of a slider into a parametric position on the slider itself (the logical opposite of SliderCalcValueFromRatioT) | // Convert a value v in the output space of a slider into a parametric position on the slider itself (the logical opposite of SliderCalcValueFromRatioT) | ||||||
| template<typename TYPE, typename FLOATTYPE> | template<typename TYPE, typename FLOATTYPE> | ||||||
| float ImGui::SliderCalcRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_min, TYPE v_max, float power, float linear_zero_pos, float logarithmic_zero_epsilon, ImGuiDragSliderFlags flags) | float ImGui::SliderCalcRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_min, TYPE v_max, float power, float linear_zero_pos, float logarithmic_zero_epsilon, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     if (v_min == v_max) |     if (v_min == v_max) | ||||||
|         return 0.0f; |         return 0.0f; | ||||||
|  |  | ||||||
|     const bool is_logarithmic = (flags & ImGuiDragSliderFlags_Logarithmic) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double); |     const bool is_logarithmic = (flags & ImGuiSliderFlags_Logarithmic) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double); | ||||||
|     const bool is_power = (power != 1.0f) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) && (!is_logarithmic); |     const bool is_power = (power != 1.0f) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) && (!is_logarithmic); | ||||||
|     const TYPE v_clamped = (v_min < v_max) ? ImClamp(v, v_min, v_max) : ImClamp(v, v_max, v_min); |     const TYPE v_clamped = (v_min < v_max) ? ImClamp(v, v_min, v_max) : ImClamp(v, v_max, v_min); | ||||||
|     if (is_logarithmic) |     if (is_logarithmic) | ||||||
| @@ -2532,13 +2530,13 @@ float ImGui::SliderCalcRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_m | |||||||
|  |  | ||||||
| // Convert a parametric position on a slider into a value v in the output space (the logical opposite of SliderCalcRatioFromValueT) | // Convert a parametric position on a slider into a value v in the output space (the logical opposite of SliderCalcRatioFromValueT) | ||||||
| template<typename TYPE, typename FLOATTYPE> | template<typename TYPE, typename FLOATTYPE> | ||||||
| TYPE ImGui::SliderCalcValueFromRatioT(ImGuiDataType data_type, float t, TYPE v_min, TYPE v_max, float power, float linear_zero_pos, float logarithmic_zero_epsilon, ImGuiDragSliderFlags flags) | TYPE ImGui::SliderCalcValueFromRatioT(ImGuiDataType data_type, float t, TYPE v_min, TYPE v_max, float power, float linear_zero_pos, float logarithmic_zero_epsilon, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     if (v_min == v_max) |     if (v_min == v_max) | ||||||
|         return (TYPE)0.0f; |         return (TYPE)0.0f; | ||||||
|  |  | ||||||
|     const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); |     const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); | ||||||
|     const bool is_logarithmic = (flags & ImGuiDragSliderFlags_Logarithmic) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double); |     const bool is_logarithmic = (flags & ImGuiSliderFlags_Logarithmic) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double); | ||||||
|     const bool is_power = (power != 1.0f) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) && (!is_logarithmic); |     const bool is_power = (power != 1.0f) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) && (!is_logarithmic); | ||||||
|  |  | ||||||
|     TYPE result; |     TYPE result; | ||||||
| @@ -2630,14 +2628,14 @@ TYPE ImGui::SliderCalcValueFromRatioT(ImGuiDataType data_type, float t, TYPE v_m | |||||||
|  |  | ||||||
| // FIXME: Move some of the code into SliderBehavior(). Current responsibility is larger than what the equivalent DragBehaviorT<> does, we also do some rendering, etc. | // FIXME: Move some of the code into SliderBehavior(). Current responsibility is larger than what the equivalent DragBehaviorT<> does, we also do some rendering, etc. | ||||||
| template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE> | template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE> | ||||||
| bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, TYPE* v, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiDragSliderFlags flags, ImRect* out_grab_bb) | bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, TYPE* v, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     const ImGuiStyle& style = g.Style; |     const ImGuiStyle& style = g.Style; | ||||||
|  |  | ||||||
|     const ImGuiAxis axis = (flags & ImGuiDragSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X; |     const ImGuiAxis axis = (flags & ImGuiSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X; | ||||||
|     const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); |     const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); | ||||||
|     const bool is_logarithmic = (flags & ImGuiDragSliderFlags_Logarithmic) && is_decimal; |     const bool is_logarithmic = (flags & ImGuiSliderFlags_Logarithmic) && is_decimal; | ||||||
|     const bool is_power = (power != 1.0f) && is_decimal && (!is_logarithmic); |     const bool is_power = (power != 1.0f) && is_decimal && (!is_logarithmic); | ||||||
|  |  | ||||||
|     const float grab_padding = 2.0f; |     const float grab_padding = 2.0f; | ||||||
| @@ -2769,9 +2767,9 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ | |||||||
| // For 32-bit and larger types, slider bounds are limited to half the natural type range. | // For 32-bit and larger types, slider bounds are limited to half the natural type range. | ||||||
| // So e.g. an integer Slider between INT_MAX-10 and INT_MAX will fail, but an integer Slider between INT_MAX/2-10 and INT_MAX/2 will be ok. | // So e.g. an integer Slider between INT_MAX-10 and INT_MAX will fail, but an integer Slider between INT_MAX/2-10 and INT_MAX/2 will be ok. | ||||||
| // It would be possible to lift that limitation with some work but it doesn't seem to be worth it for sliders. | // It would be possible to lift that limitation with some work but it doesn't seem to be worth it for sliders. | ||||||
| bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragSliderFlags flags, ImRect* out_grab_bb) | bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb) | ||||||
| { | { | ||||||
|     IM_ASSERT(((flags == 0) || (flags >= ImGuiDragSliderFlags__AnythingBelowThisMightBeAPowerTerm)) && "Invalid ImGuiDragSliderFlags flags - has a power term been mistakenly cast to flags?"); |     IM_ASSERT(((flags == 0) || (flags >= ImGuiSliderFlags__AnythingBelowThisMightBeAPowerTerm)) && "Invalid ImGuiSliderFlags flags - has a power term been mistakenly cast to flags?"); | ||||||
|  |  | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     if (g.CurrentWindow->DC.ItemFlags & ImGuiItemFlags_ReadOnly) |     if (g.CurrentWindow->DC.ItemFlags & ImGuiItemFlags_ReadOnly) | ||||||
| @@ -2808,7 +2806,7 @@ bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type | |||||||
| } | } | ||||||
|  |  | ||||||
| // Internal implementation | // Internal implementation | ||||||
| bool ImGui::SliderScalarInternal(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragSliderFlags flags) | bool ImGui::SliderScalarInternal(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiWindow* window = GetCurrentWindow(); | ||||||
|     if (window->SkipItems) |     if (window->SkipItems) | ||||||
| @@ -2887,18 +2885,12 @@ bool ImGui::SliderScalarInternal(const char* label, ImGuiDataType data_type, voi | |||||||
|  |  | ||||||
| // Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a slider, they are all required. | // Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a slider, they are all required. | ||||||
| // Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly. | // Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly. | ||||||
| bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     return SliderScalarInternal(label, data_type, p_data, p_min, p_max, format, 1.0f, flags); |     return SliderScalarInternal(label, data_type, p_data, p_min, p_max, format, 1.0f, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::SliderScalarNInternal(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, float power, ImGuiSliderFlags flags) | ||||||
| bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return SliderScalarInternal(label, data_type, p_data, p_min, p_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::SliderScalarNInternal(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, float power, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiWindow* window = GetCurrentWindow(); | ||||||
|     if (window->SkipItems) |     if (window->SkipItems) | ||||||
| @@ -2934,62 +2926,32 @@ bool ImGui::SliderScalarNInternal(const char* label, ImGuiDataType data_type, vo | |||||||
| } | } | ||||||
|  |  | ||||||
| // Add multiple sliders on 1 line for compact edition of multiple components | // Add multiple sliders on 1 line for compact edition of multiple components | ||||||
| bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     return SliderScalarNInternal(label, data_type, v, components, v_min, v_max, format, 1.0f, flags); |     return SliderScalarNInternal(label, data_type, v, components, v_min, v_max, format, 1.0f, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, ImGuiSliderFlags flags) | ||||||
| bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return SliderScalarNInternal(label, data_type, v, components, v_min, v_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, flags); |     return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, ImGuiSliderFlags flags) | ||||||
| bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, flags); |     return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, ImGuiSliderFlags flags) | ||||||
| bool ImGui::SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, flags); |     return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, ImGuiSliderFlags flags) | ||||||
| bool ImGui::SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, flags); |     return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, float v_degrees_max, const char* format, ImGuiSliderFlags flags) | ||||||
| bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power) |  | ||||||
| { |  | ||||||
|     return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, power); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, float v_degrees_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { | { | ||||||
|     if (format == NULL) |     if (format == NULL) | ||||||
|         format = "%.0f deg"; |         format = "%.0f deg"; | ||||||
| @@ -2999,28 +2961,28 @@ bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, fl | |||||||
|     return value_changed; |     return value_changed; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const char* format, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     return SliderScalar(label, ImGuiDataType_S32, v, &v_min, &v_max, format, flags); |     return SliderScalar(label, ImGuiDataType_S32, v, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     return SliderScalarN(label, ImGuiDataType_S32, v, 2, &v_min, &v_max, format, flags); |     return SliderScalarN(label, ImGuiDataType_S32, v, 2, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     return SliderScalarN(label, ImGuiDataType_S32, v, 3, &v_min, &v_max, format, flags); |     return SliderScalarN(label, ImGuiDataType_S32, v, 3, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     return SliderScalarN(label, ImGuiDataType_S32, v, 4, &v_min, &v_max, format, flags); |     return SliderScalarN(label, ImGuiDataType_S32, v, 4, &v_min, &v_max, format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Internal implementation | // Internal implementation | ||||||
| bool ImGui::VSliderScalarInternal(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragSliderFlags flags) | bool ImGui::VSliderScalarInternal(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiWindow* window = GetCurrentWindow(); | ||||||
|     if (window->SkipItems) |     if (window->SkipItems) | ||||||
| @@ -3060,7 +3022,7 @@ bool ImGui::VSliderScalarInternal(const char* label, const ImVec2& size, ImGuiDa | |||||||
|  |  | ||||||
|     // Slider behavior |     // Slider behavior | ||||||
|     ImRect grab_bb; |     ImRect grab_bb; | ||||||
|     const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, power, flags | ImGuiDragSliderFlags_Vertical, &grab_bb); |     const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, power, flags | ImGuiSliderFlags_Vertical, &grab_bb); | ||||||
|     if (value_changed) |     if (value_changed) | ||||||
|         MarkItemEdited(id); |         MarkItemEdited(id); | ||||||
|  |  | ||||||
| @@ -3079,32 +3041,65 @@ bool ImGui::VSliderScalarInternal(const char* label, const ImVec2& size, ImGuiDa | |||||||
|     return value_changed; |     return value_changed; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, ImGuiDragSliderFlags flags) | bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags) | ||||||
| { | { | ||||||
|     return VSliderScalarInternal(label, size, data_type, p_data, p_min, p_max, format, 1.0f, flags); |     return VSliderScalarInternal(label, size, data_type, p_data, p_min, p_max, format, 1.0f, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Obsolete version with power parameter | bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, ImGuiSliderFlags flags) | ||||||
|  | { | ||||||
|  |     return VSliderScalar(label, size, ImGuiDataType_Float, v, &v_min, &v_max, format, flags); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format, ImGuiSliderFlags flags) | ||||||
|  | { | ||||||
|  |     return VSliderScalar(label, size, ImGuiDataType_S32, v, &v_min, &v_max, format, flags); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||||
|  |  | ||||||
|  | // Obsolete versions with power parameter | ||||||
|  | bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return SliderScalarInternal(label, data_type, p_data, p_min, p_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return SliderScalarNInternal(label, data_type, v, components, v_min, v_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power) | ||||||
|  | { | ||||||
|  |     return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, power); | ||||||
|  | } | ||||||
|  |  | ||||||
| bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power) | bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power) | ||||||
| { | { | ||||||
|     return VSliderScalarInternal(label, size, data_type, p_data, p_min, p_max, format, power); |     return VSliderScalarInternal(label, size, data_type, p_data, p_min, p_max, format, power); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, ImGuiDragSliderFlags flags) |  | ||||||
| { |  | ||||||
|     return VSliderScalar(label, size, ImGuiDataType_Float, v, &v_min, &v_max, format, flags); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Obsolete version with power parameter |  | ||||||
| bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, float power) | bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, float power) | ||||||
| { | { | ||||||
|     return VSliderScalar(label, size, ImGuiDataType_Float, v, &v_min, &v_max, format, power); |     return VSliderScalar(label, size, ImGuiDataType_Float, v, &v_min, &v_max, format, power); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format, ImGuiDragSliderFlags flags) | #endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||||
| { |  | ||||||
|     return VSliderScalar(label, size, ImGuiDataType_S32, v, &v_min, &v_max, format, flags); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
| // [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc. | // [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user