mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Internal: Removed GetNextItemWidth(), relying on ItemAdd or NextItemData.ClearFlags() to clear the width data. Amend 5078fa20 and undo some of its effects of imgui_widgets.cpp
				
					
				
			This commit is contained in:
		
							
								
								
									
										34
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -5803,14 +5803,17 @@ void ImGui::SetNextItemWidth(float item_width) | |||||||
|  |  | ||||||
| void ImGui::PushItemWidth(float item_width) | void ImGui::PushItemWidth(float item_width) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiContext& g = *GImGui; | ||||||
|  |     ImGuiWindow* window = g.CurrentWindow; | ||||||
|     window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width); |     window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width); | ||||||
|     window->DC.ItemWidthStack.push_back(window->DC.ItemWidth); |     window->DC.ItemWidthStack.push_back(window->DC.ItemWidth); | ||||||
|  |     g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth; | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui::PushMultiItemsWidths(int components, float w_full) | void ImGui::PushMultiItemsWidths(int components, float w_full) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiContext& g = *GImGui; | ||||||
|  |     ImGuiWindow* window = g.CurrentWindow; | ||||||
|     const ImGuiStyle& style = GImGui->Style; |     const ImGuiStyle& style = GImGui->Style; | ||||||
|     const float w_item_one  = ImMax(1.0f, (float)(int)((w_full - (style.ItemInnerSpacing.x) * (components-1)) / (float)components)); |     const float w_item_one  = ImMax(1.0f, (float)(int)((w_full - (style.ItemInnerSpacing.x) * (components-1)) / (float)components)); | ||||||
|     const float w_item_last = ImMax(1.0f, (float)(int)(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components-1))); |     const float w_item_last = ImMax(1.0f, (float)(int)(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components-1))); | ||||||
| @@ -5818,6 +5821,7 @@ void ImGui::PushMultiItemsWidths(int components, float w_full) | |||||||
|     for (int i = 0; i < components-1; i++) |     for (int i = 0; i < components-1; i++) | ||||||
|         window->DC.ItemWidthStack.push_back(w_item_one); |         window->DC.ItemWidthStack.push_back(w_item_one); | ||||||
|     window->DC.ItemWidth = window->DC.ItemWidthStack.back(); |     window->DC.ItemWidth = window->DC.ItemWidthStack.back(); | ||||||
|  |     g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth; | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui::PopItemWidth() | void ImGui::PopItemWidth() | ||||||
| @@ -5827,22 +5831,17 @@ void ImGui::PopItemWidth() | |||||||
|     window->DC.ItemWidth = window->DC.ItemWidthStack.empty() ? window->ItemWidthDefault : window->DC.ItemWidthStack.back(); |     window->DC.ItemWidth = window->DC.ItemWidthStack.empty() ? window->ItemWidthDefault : window->DC.ItemWidthStack.back(); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Calculate default item width given value passed to PushItemWidth() or SetNextItemWidth(), | // Calculate default item width given value passed to PushItemWidth() or SetNextItemWidth(). | ||||||
| // Then _consume_ the SetNextItemWidth() data. | // The SetNextItemWidth() data is generally cleared/consumed by ItemAdd() or NextItemData.ClearFlags() | ||||||
| float ImGui::GetNextItemWidth() | float ImGui::CalcItemWidth() | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     ImGuiWindow* window = g.CurrentWindow; |     ImGuiWindow* window = g.CurrentWindow; | ||||||
|     float w; |     float w; | ||||||
|     if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth) |     if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth) | ||||||
|     { |  | ||||||
|         w = g.NextItemData.Width; |         w = g.NextItemData.Width; | ||||||
|         g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth; |  | ||||||
|     } |  | ||||||
|     else |     else | ||||||
|     { |  | ||||||
|         w = window->DC.ItemWidth; |         w = window->DC.ItemWidth; | ||||||
|     } |  | ||||||
|     if (w < 0.0f) |     if (w < 0.0f) | ||||||
|     { |     { | ||||||
|         float region_max_x = GetWorkRectMax().x; |         float region_max_x = GetWorkRectMax().x; | ||||||
| @@ -5852,21 +5851,10 @@ float ImGui::GetNextItemWidth() | |||||||
|     return w; |     return w; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Calculate item width *without* popping/consuming NextItemWidth if it was set. | // [Internal] Calculate full item size given user provided 'size' parameter and default width/height. Default width is often == CalcItemWidth(). | ||||||
| // (rarely used, which is why we avoid calling this from GetNextItemWidth() and instead do a backup/restore here) |  | ||||||
| float ImGui::CalcItemWidth() |  | ||||||
| { |  | ||||||
|     ImGuiContext& g = *GImGui; |  | ||||||
|     ImGuiNextItemDataFlags backup_flags = g.NextItemData.Flags; |  | ||||||
|     float w = GetNextItemWidth(); |  | ||||||
|     g.NextItemData.Flags = backup_flags; |  | ||||||
|     return w; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // [Internal] Calculate full item size given user provided 'size' parameter and default width/height. Default width is often == GetNextItemWidth(). |  | ||||||
| // Those two functions CalcItemWidth vs CalcItemSize are awkwardly named because they are not fully symmetrical. | // Those two functions CalcItemWidth vs CalcItemSize are awkwardly named because they are not fully symmetrical. | ||||||
| // Note that only CalcItemWidth() is publicly exposed. | // Note that only CalcItemWidth() is publicly exposed. | ||||||
| // The 4.0f here may be changed to match GetNextItemWidth() and/or BeginChild() (right now we have a mismatch which is harmless but undesirable) | // The 4.0f here may be changed to match CalcItemWidth() and/or BeginChild() (right now we have a mismatch which is harmless but undesirable) | ||||||
| ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h) | ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GImGui->CurrentWindow; |     ImGuiWindow* window = GImGui->CurrentWindow; | ||||||
|   | |||||||
| @@ -1475,7 +1475,6 @@ namespace ImGui | |||||||
|     IMGUI_API bool          IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged); |     IMGUI_API bool          IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged); | ||||||
|     IMGUI_API bool          FocusableItemRegister(ImGuiWindow* window, ImGuiID id);   // Return true if focus is requested |     IMGUI_API bool          FocusableItemRegister(ImGuiWindow* window, ImGuiID id);   // Return true if focus is requested | ||||||
|     IMGUI_API void          FocusableItemUnregister(ImGuiWindow* window); |     IMGUI_API void          FocusableItemUnregister(ImGuiWindow* window); | ||||||
|     IMGUI_API float         GetNextItemWidth(); |  | ||||||
|     IMGUI_API ImVec2        CalcItemSize(ImVec2 size, float default_w, float default_h); |     IMGUI_API ImVec2        CalcItemSize(ImVec2 size, float default_w, float default_h); | ||||||
|     IMGUI_API float         CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x); |     IMGUI_API float         CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x); | ||||||
|     IMGUI_API void          PushMultiItemsWidths(int components, float width_full); |     IMGUI_API void          PushMultiItemsWidths(int components, float width_full); | ||||||
|   | |||||||
| @@ -320,7 +320,7 @@ void ImGui::LabelTextV(const char* label, const char* fmt, va_list args) | |||||||
|  |  | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     const ImGuiStyle& style = g.Style; |     const ImGuiStyle& style = g.Style; | ||||||
|     const float w = GetNextItemWidth(); |     const float w = CalcItemWidth(); | ||||||
|  |  | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     const ImRect value_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2)); |     const ImRect value_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2)); | ||||||
| @@ -1091,7 +1091,7 @@ void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* over | |||||||
|     const ImGuiStyle& style = g.Style; |     const ImGuiStyle& style = g.Style; | ||||||
|  |  | ||||||
|     ImVec2 pos = window->DC.CursorPos; |     ImVec2 pos = window->DC.CursorPos; | ||||||
|     ImVec2 size = CalcItemSize(size_arg, GetNextItemWidth(), g.FontSize + style.FramePadding.y*2.0f); |     ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f); | ||||||
|     ImRect bb(pos, pos + size); |     ImRect bb(pos, pos + size); | ||||||
|     ItemSize(size, style.FramePadding.y); |     ItemSize(size, style.FramePadding.y); | ||||||
|     if (!ItemAdd(bb, 0)) |     if (!ItemAdd(bb, 0)) | ||||||
| @@ -1364,7 +1364,7 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF | |||||||
|  |  | ||||||
|     const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight(); |     const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight(); | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     const float expected_w = GetNextItemWidth(); |     const float expected_w = CalcItemWidth(); | ||||||
|     const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : expected_w; |     const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : expected_w; | ||||||
|     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); |     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); | ||||||
|     const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); |     const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); | ||||||
| @@ -1991,8 +1991,7 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* v, floa | |||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     const ImGuiStyle& style = g.Style; |     const ImGuiStyle& style = g.Style; | ||||||
|     const ImGuiID id = window->GetID(label); |     const ImGuiID id = window->GetID(label); | ||||||
|     const float w = GetNextItemWidth(); |     const float w = CalcItemWidth(); | ||||||
|  |  | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); |     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); | ||||||
|     const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); |     const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); | ||||||
| @@ -2064,7 +2063,7 @@ bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* v, int | |||||||
|     bool value_changed = false; |     bool value_changed = false; | ||||||
|     BeginGroup(); |     BeginGroup(); | ||||||
|     PushID(label); |     PushID(label); | ||||||
|     PushMultiItemsWidths(components, GetNextItemWidth()); |     PushMultiItemsWidths(components, CalcItemWidth()); | ||||||
|     size_t type_size = GDataTypeInfo[data_type].Size; |     size_t type_size = GDataTypeInfo[data_type].Size; | ||||||
|     for (int i = 0; i < components; i++) |     for (int i = 0; i < components; i++) | ||||||
|     { |     { | ||||||
| @@ -2111,7 +2110,7 @@ bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_cu | |||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     PushID(label); |     PushID(label); | ||||||
|     BeginGroup(); |     BeginGroup(); | ||||||
|     PushMultiItemsWidths(2, GetNextItemWidth()); |     PushMultiItemsWidths(2, CalcItemWidth()); | ||||||
|  |  | ||||||
|     bool value_changed = DragFloat("##min", v_current_min, v_speed, (v_min >= v_max) ? -FLT_MAX : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format, power); |     bool value_changed = DragFloat("##min", v_current_min, v_speed, (v_min >= v_max) ? -FLT_MAX : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format, power); | ||||||
|     PopItemWidth(); |     PopItemWidth(); | ||||||
| @@ -2156,7 +2155,7 @@ bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_ | |||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     PushID(label); |     PushID(label); | ||||||
|     BeginGroup(); |     BeginGroup(); | ||||||
|     PushMultiItemsWidths(2, GetNextItemWidth()); |     PushMultiItemsWidths(2, CalcItemWidth()); | ||||||
|  |  | ||||||
|     bool value_changed = DragInt("##min", v_current_min, v_speed, (v_min >= v_max) ? INT_MIN : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format); |     bool value_changed = DragInt("##min", v_current_min, v_speed, (v_min >= v_max) ? INT_MIN : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format); | ||||||
|     PopItemWidth(); |     PopItemWidth(); | ||||||
| @@ -2434,7 +2433,7 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* v, co | |||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     const ImGuiStyle& style = g.Style; |     const ImGuiStyle& style = g.Style; | ||||||
|     const ImGuiID id = window->GetID(label); |     const ImGuiID id = window->GetID(label); | ||||||
|     const float w = GetNextItemWidth(); |     const float w = CalcItemWidth(); | ||||||
|  |  | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); |     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); | ||||||
| @@ -2512,7 +2511,7 @@ bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, i | |||||||
|     bool value_changed = false; |     bool value_changed = false; | ||||||
|     BeginGroup(); |     BeginGroup(); | ||||||
|     PushID(label); |     PushID(label); | ||||||
|     PushMultiItemsWidths(components, GetNextItemWidth()); |     PushMultiItemsWidths(components, CalcItemWidth()); | ||||||
|     size_t type_size = GDataTypeInfo[data_type].Size; |     size_t type_size = GDataTypeInfo[data_type].Size; | ||||||
|     for (int i = 0; i < components; i++) |     for (int i = 0; i < components; i++) | ||||||
|     { |     { | ||||||
| @@ -2800,7 +2799,7 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_p | |||||||
|  |  | ||||||
|         BeginGroup(); // The only purpose of the group here is to allow the caller to query item data e.g. IsItemActive() |         BeginGroup(); // The only purpose of the group here is to allow the caller to query item data e.g. IsItemActive() | ||||||
|         PushID(label); |         PushID(label); | ||||||
|         SetNextItemWidth(ImMax(1.0f, GetNextItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2)); |         SetNextItemWidth(ImMax(1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2)); | ||||||
|         if (InputText("", buf, IM_ARRAYSIZE(buf), flags)) // PushId(label) + "" gives us the expected ID from outside point of view |         if (InputText("", buf, IM_ARRAYSIZE(buf), flags)) // PushId(label) + "" gives us the expected ID from outside point of view | ||||||
|             value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, data_ptr, format); |             value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, data_ptr, format); | ||||||
|  |  | ||||||
| @@ -2848,7 +2847,7 @@ bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* v, in | |||||||
|     bool value_changed = false; |     bool value_changed = false; | ||||||
|     BeginGroup(); |     BeginGroup(); | ||||||
|     PushID(label); |     PushID(label); | ||||||
|     PushMultiItemsWidths(components, GetNextItemWidth()); |     PushMultiItemsWidths(components, CalcItemWidth()); | ||||||
|     size_t type_size = GDataTypeInfo[data_type].Size; |     size_t type_size = GDataTypeInfo[data_type].Size; | ||||||
|     for (int i = 0; i < components; i++) |     for (int i = 0; i < components; i++) | ||||||
|     { |     { | ||||||
| @@ -3298,7 +3297,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|         BeginGroup(); |         BeginGroup(); | ||||||
|     const ImGuiID id = window->GetID(label); |     const ImGuiID id = window->GetID(label); | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     ImVec2 size = CalcItemSize(size_arg, GetNextItemWidth(), (is_multiline ? GetTextLineHeight() * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line |     ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? GetTextLineHeight() * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line | ||||||
|     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size); |     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size); | ||||||
|     const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? (style.ItemInnerSpacing.x + label_size.x) : 0.0f, 0.0f)); |     const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? (style.ItemInnerSpacing.x + label_size.x) : 0.0f, 0.0f)); | ||||||
|  |  | ||||||
| @@ -4056,8 +4055,9 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag | |||||||
|     const ImGuiStyle& style = g.Style; |     const ImGuiStyle& style = g.Style; | ||||||
|     const float square_sz = GetFrameHeight(); |     const float square_sz = GetFrameHeight(); | ||||||
|     const float w_extra = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x); |     const float w_extra = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x); | ||||||
|     const float w_items_all = GetNextItemWidth() - w_extra; |     const float w_items_all = CalcItemWidth() - w_extra; | ||||||
|     const char* label_display_end = FindRenderedTextEnd(label); |     const char* label_display_end = FindRenderedTextEnd(label); | ||||||
|  |     g.NextItemData.ClearFlags(); | ||||||
|  |  | ||||||
|     BeginGroup(); |     BeginGroup(); | ||||||
|     PushID(label); |     PushID(label); | ||||||
| @@ -4337,6 +4337,9 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|     ImGuiStyle& style = g.Style; |     ImGuiStyle& style = g.Style; | ||||||
|     ImGuiIO& io = g.IO; |     ImGuiIO& io = g.IO; | ||||||
|  |  | ||||||
|  |     const float width = CalcItemWidth(); | ||||||
|  |     g.NextItemData.ClearFlags(); | ||||||
|  |  | ||||||
|     PushID(label); |     PushID(label); | ||||||
|     BeginGroup(); |     BeginGroup(); | ||||||
|  |  | ||||||
| @@ -4363,7 +4366,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|     ImVec2 picker_pos = window->DC.CursorPos; |     ImVec2 picker_pos = window->DC.CursorPos; | ||||||
|     float square_sz = GetFrameHeight(); |     float square_sz = GetFrameHeight(); | ||||||
|     float bars_width = square_sz; // Arbitrary smallish width of Hue/Alpha picking bars |     float bars_width = square_sz; // Arbitrary smallish width of Hue/Alpha picking bars | ||||||
|     float sv_picker_size = ImMax(bars_width * 1, GetNextItemWidth() - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box |     float sv_picker_size = ImMax(bars_width * 1, width - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box | ||||||
|     float bar0_pos_x = picker_pos.x + sv_picker_size + style.ItemInnerSpacing.x; |     float bar0_pos_x = picker_pos.x + sv_picker_size + style.ItemInnerSpacing.x; | ||||||
|     float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x; |     float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x; | ||||||
|     float bars_triangles_half_sz = (float)(int)(bars_width * 0.20f); |     float bars_triangles_half_sz = (float)(int)(bars_width * 0.20f); | ||||||
| @@ -5255,6 +5258,7 @@ float ImGui::GetTreeNodeToLabelSpacing() | |||||||
|     return g.FontSize + (g.Style.FramePadding.x * 2.0f); |     return g.FontSize + (g.Style.FramePadding.x * 2.0f); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Set next TreeNode/CollapsingHeader open state. | ||||||
| void ImGui::SetNextItemOpen(bool is_open, ImGuiCond cond) | void ImGui::SetNextItemOpen(bool is_open, ImGuiCond cond) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
| @@ -5452,20 +5456,22 @@ bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags | |||||||
| // Tip: To have a list filling the entire window width, PushItemWidth(-1) and pass an non-visible label e.g. "##empty" | // Tip: To have a list filling the entire window width, PushItemWidth(-1) and pass an non-visible label e.g. "##empty" | ||||||
| bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) | bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) | ||||||
| { | { | ||||||
|  |     ImGuiContext& g = *GImGui; | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiWindow* window = GetCurrentWindow(); | ||||||
|     if (window->SkipItems) |     if (window->SkipItems) | ||||||
|         return false; |         return false; | ||||||
|  |  | ||||||
|     const ImGuiStyle& style = GetStyle(); |     const ImGuiStyle& style = g.Style; | ||||||
|     const ImGuiID id = GetID(label); |     const ImGuiID id = GetID(label); | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|  |  | ||||||
|     // Size default to hold ~7 items. Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar. |     // Size default to hold ~7 items. Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar. | ||||||
|     ImVec2 size = CalcItemSize(size_arg, GetNextItemWidth(), GetTextLineHeightWithSpacing() * 7.4f + style.ItemSpacing.y); |     ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), GetTextLineHeightWithSpacing() * 7.4f + style.ItemSpacing.y); | ||||||
|     ImVec2 frame_size = ImVec2(size.x, ImMax(size.y, label_size.y)); |     ImVec2 frame_size = ImVec2(size.x, ImMax(size.y, label_size.y)); | ||||||
|     ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size); |     ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size); | ||||||
|     ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); |     ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); | ||||||
|     window->DC.LastItemRect = bb; // Forward storage for ListBoxFooter.. dodgy. |     window->DC.LastItemRect = bb; // Forward storage for ListBoxFooter.. dodgy. | ||||||
|  |     g.NextItemData.ClearFlags(); | ||||||
|  |  | ||||||
|     if (!IsRectVisible(bb.Min, bb.Max)) |     if (!IsRectVisible(bb.Min, bb.Max)) | ||||||
|     { |     { | ||||||
| @@ -5578,7 +5584,7 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge | |||||||
|  |  | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     if (frame_size.x == 0.0f) |     if (frame_size.x == 0.0f) | ||||||
|         frame_size.x = GetNextItemWidth(); |         frame_size.x = CalcItemWidth(); | ||||||
|     if (frame_size.y == 0.0f) |     if (frame_size.y == 0.0f) | ||||||
|         frame_size.y = label_size.y + (style.FramePadding.y * 2); |         frame_size.y = label_size.y + (style.FramePadding.y * 2); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user