|
@@ -4137,8 +4137,9 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
|
|
ImGuiContext& g = *GImGui;
|
|
ImGuiContext& g = *GImGui;
|
|
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_items_all = CalcItemWidth() - w_extra;
|
|
|
|
|
|
+ const float w_full = CalcItemWidth();
|
|
|
|
+ const float w_button = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x);
|
|
|
|
+ const float w_inputs = w_full - w_button;
|
|
const char* label_display_end = FindRenderedTextEnd(label);
|
|
const char* label_display_end = FindRenderedTextEnd(label);
|
|
g.NextItemData.ClearFlags();
|
|
g.NextItemData.ClearFlags();
|
|
|
|
|
|
@@ -4182,11 +4183,15 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
|
|
bool value_changed = false;
|
|
bool value_changed = false;
|
|
bool value_changed_as_float = false;
|
|
bool value_changed_as_float = false;
|
|
|
|
|
|
|
|
+ const ImVec2 pos = window->DC.CursorPos;
|
|
|
|
+ const float inputs_offset_x = (style.ColorButtonPosition == ImGuiDir_Left) ? w_button : 0.0f;
|
|
|
|
+ window->DC.CursorPos.x = pos.x + inputs_offset_x;
|
|
|
|
+
|
|
if ((flags & (ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
|
|
if ((flags & (ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
|
|
{
|
|
{
|
|
// RGB/HSV 0..255 Sliders
|
|
// RGB/HSV 0..255 Sliders
|
|
- const float w_item_one = ImMax(1.0f, (float)(int)((w_items_all - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
|
|
|
|
- const float w_item_last = ImMax(1.0f, (float)(int)(w_items_all - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
|
|
|
|
|
|
+ const float w_item_one = ImMax(1.0f, (float)(int)((w_inputs - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
|
|
|
|
+ const float w_item_last = ImMax(1.0f, (float)(int)(w_inputs - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
|
|
|
|
|
|
const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x);
|
|
const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x);
|
|
static const char* ids[4] = { "##X", "##Y", "##Z", "##W" };
|
|
static const char* ids[4] = { "##X", "##Y", "##Z", "##W" };
|
|
@@ -4230,7 +4235,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
|
|
ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255), ImClamp(i[3],0,255));
|
|
ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255), ImClamp(i[3],0,255));
|
|
else
|
|
else
|
|
ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255));
|
|
ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255));
|
|
- SetNextItemWidth(w_items_all);
|
|
|
|
|
|
+ SetNextItemWidth(w_inputs);
|
|
if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
|
|
if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
|
|
{
|
|
{
|
|
value_changed = true;
|
|
value_changed = true;
|
|
@@ -4250,8 +4255,8 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
|
|
ImGuiWindow* picker_active_window = NULL;
|
|
ImGuiWindow* picker_active_window = NULL;
|
|
if (!(flags & ImGuiColorEditFlags_NoSmallPreview))
|
|
if (!(flags & ImGuiColorEditFlags_NoSmallPreview))
|
|
{
|
|
{
|
|
- if (!(flags & ImGuiColorEditFlags_NoInputs))
|
|
|
|
- SameLine(0, style.ItemInnerSpacing.x);
|
|
|
|
|
|
+ const float button_offset_x = ((flags & ImGuiColorEditFlags_NoInputs) || (style.ColorButtonPosition == ImGuiDir_Left)) ? 0.0f : w_inputs + style.ItemInnerSpacing.x;
|
|
|
|
+ window->DC.CursorPos = ImVec2(pos.x + button_offset_x, pos.y);
|
|
|
|
|
|
const ImVec4 col_v4(col[0], col[1], col[2], alpha ? col[3] : 1.0f);
|
|
const ImVec4 col_v4(col[0], col[1], col[2], alpha ? col[3] : 1.0f);
|
|
if (ColorButton("##ColorButton", col_v4, flags))
|
|
if (ColorButton("##ColorButton", col_v4, flags))
|
|
@@ -4285,7 +4290,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
|
|
|
|
|
|
if (label != label_display_end && !(flags & ImGuiColorEditFlags_NoLabel))
|
|
if (label != label_display_end && !(flags & ImGuiColorEditFlags_NoLabel))
|
|
{
|
|
{
|
|
- SameLine(0, style.ItemInnerSpacing.x);
|
|
|
|
|
|
+ window->DC.CursorPos = ImVec2(pos.x + w_full + style.ItemInnerSpacing.x, pos.y + style.FramePadding.y);
|
|
TextEx(label, label_display_end);
|
|
TextEx(label, label_display_end);
|
|
}
|
|
}
|
|
|
|
|