|
@@ -4200,7 +4200,12 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
|
|
if ((flags & ImGuiColorEditFlags_InputHSV) && (flags & ImGuiColorEditFlags_DisplayRGB))
|
|
if ((flags & ImGuiColorEditFlags_InputHSV) && (flags & ImGuiColorEditFlags_DisplayRGB))
|
|
ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
|
|
ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
|
|
else if ((flags & ImGuiColorEditFlags_InputRGB) && (flags & ImGuiColorEditFlags_DisplayHSV))
|
|
else if ((flags & ImGuiColorEditFlags_InputRGB) && (flags & ImGuiColorEditFlags_DisplayHSV))
|
|
|
|
+ {
|
|
ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
|
|
ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
|
|
|
|
+ // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
|
|
|
|
+ if (f[1] == 0 && memcmp(g.ColorEditLastActiveColor, col, sizeof(float) * 3) == 0)
|
|
|
|
+ f[0] = g.ColorEditLastHue;
|
|
|
|
+ }
|
|
int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) };
|
|
int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) };
|
|
|
|
|
|
bool value_changed = false;
|
|
bool value_changed = false;
|
|
@@ -4327,7 +4332,11 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
|
|
for (int n = 0; n < 4; n++)
|
|
for (int n = 0; n < 4; n++)
|
|
f[n] = i[n] / 255.0f;
|
|
f[n] = i[n] / 255.0f;
|
|
if ((flags & ImGuiColorEditFlags_DisplayHSV) && (flags & ImGuiColorEditFlags_InputRGB))
|
|
if ((flags & ImGuiColorEditFlags_DisplayHSV) && (flags & ImGuiColorEditFlags_InputRGB))
|
|
|
|
+ {
|
|
|
|
+ g.ColorEditLastHue = f[0];
|
|
ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
|
|
ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
|
|
|
|
+ memcpy(g.ColorEditLastActiveColor, f, sizeof(float) * 3);
|
|
|
|
+ }
|
|
if ((flags & ImGuiColorEditFlags_DisplayRGB) && (flags & ImGuiColorEditFlags_InputHSV))
|
|
if ((flags & ImGuiColorEditFlags_DisplayRGB) && (flags & ImGuiColorEditFlags_InputHSV))
|
|
ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
|
|
ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
|
|
|
|
|
|
@@ -4504,7 +4513,12 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
|
|
float H = col[0], S = col[1], V = col[2];
|
|
float H = col[0], S = col[1], V = col[2];
|
|
float R = col[0], G = col[1], B = col[2];
|
|
float R = col[0], G = col[1], B = col[2];
|
|
if (flags & ImGuiColorEditFlags_InputRGB)
|
|
if (flags & ImGuiColorEditFlags_InputRGB)
|
|
|
|
+ {
|
|
ColorConvertRGBtoHSV(R, G, B, H, S, V);
|
|
ColorConvertRGBtoHSV(R, G, B, H, S, V);
|
|
|
|
+ // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
|
|
|
|
+ if (S == 0 && memcmp(g.ColorEditLastActiveColor, col, sizeof(float) * 3) == 0)
|
|
|
|
+ H = g.ColorEditLastHue;
|
|
|
|
+ }
|
|
else if (flags & ImGuiColorEditFlags_InputHSV)
|
|
else if (flags & ImGuiColorEditFlags_InputHSV)
|
|
ColorConvertHSVtoRGB(H, S, V, R, G, B);
|
|
ColorConvertHSVtoRGB(H, S, V, R, G, B);
|
|
|
|
|
|
@@ -4628,6 +4642,8 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
|
|
if (flags & ImGuiColorEditFlags_InputRGB)
|
|
if (flags & ImGuiColorEditFlags_InputRGB)
|
|
{
|
|
{
|
|
ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]);
|
|
ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]);
|
|
|
|
+ g.ColorEditLastHue = H;
|
|
|
|
+ memcpy(g.ColorEditLastActiveColor, col, sizeof(float) * 3);
|
|
}
|
|
}
|
|
else if (flags & ImGuiColorEditFlags_InputHSV)
|
|
else if (flags & ImGuiColorEditFlags_InputHSV)
|
|
{
|
|
{
|
|
@@ -4680,7 +4696,9 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
|
|
R = col[0];
|
|
R = col[0];
|
|
G = col[1];
|
|
G = col[1];
|
|
B = col[2];
|
|
B = col[2];
|
|
|
|
+ float preserve_hue = H;
|
|
ColorConvertRGBtoHSV(R, G, B, H, S, V);
|
|
ColorConvertRGBtoHSV(R, G, B, H, S, V);
|
|
|
|
+ H = preserve_hue; // Avoids picker losing hue value for 1 frame glitch.
|
|
}
|
|
}
|
|
else if (flags & ImGuiColorEditFlags_InputHSV)
|
|
else if (flags & ImGuiColorEditFlags_InputHSV)
|
|
{
|
|
{
|