mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-24 05:19:02 +08:00
Refactor: Internals: Moved various functions in imgui.cpp (#2036)
This commit is contained in:
parent
5afd4b61f2
commit
98f618ed18
248
imgui.cpp
248
imgui.cpp
@ -1072,7 +1072,7 @@ void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars)
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// HELPERS
|
||||
// HELPERS/UTILITIES
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p)
|
||||
@ -1473,109 +1473,6 @@ int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_e
|
||||
return bytes_count;
|
||||
}
|
||||
|
||||
ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
|
||||
{
|
||||
float s = 1.0f/255.0f;
|
||||
return ImVec4(
|
||||
((in >> IM_COL32_R_SHIFT) & 0xFF) * s,
|
||||
((in >> IM_COL32_G_SHIFT) & 0xFF) * s,
|
||||
((in >> IM_COL32_B_SHIFT) & 0xFF) * s,
|
||||
((in >> IM_COL32_A_SHIFT) & 0xFF) * s);
|
||||
}
|
||||
|
||||
ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
|
||||
{
|
||||
ImU32 out;
|
||||
out = ((ImU32)IM_F32_TO_INT8_SAT(in.x)) << IM_COL32_R_SHIFT;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.y)) << IM_COL32_G_SHIFT;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.z)) << IM_COL32_B_SHIFT;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.w)) << IM_COL32_A_SHIFT;
|
||||
return out;
|
||||
}
|
||||
|
||||
ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
|
||||
{
|
||||
ImGuiStyle& style = GImGui->Style;
|
||||
ImVec4 c = style.Colors[idx];
|
||||
c.w *= style.Alpha * alpha_mul;
|
||||
return ColorConvertFloat4ToU32(c);
|
||||
}
|
||||
|
||||
ImU32 ImGui::GetColorU32(const ImVec4& col)
|
||||
{
|
||||
ImGuiStyle& style = GImGui->Style;
|
||||
ImVec4 c = col;
|
||||
c.w *= style.Alpha;
|
||||
return ColorConvertFloat4ToU32(c);
|
||||
}
|
||||
|
||||
const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
|
||||
{
|
||||
ImGuiStyle& style = GImGui->Style;
|
||||
return style.Colors[idx];
|
||||
}
|
||||
|
||||
ImU32 ImGui::GetColorU32(ImU32 col)
|
||||
{
|
||||
float style_alpha = GImGui->Style.Alpha;
|
||||
if (style_alpha >= 1.0f)
|
||||
return col;
|
||||
ImU32 a = (col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT;
|
||||
a = (ImU32)(a * style_alpha); // We don't need to clamp 0..255 because Style.Alpha is in 0..1 range.
|
||||
return (col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT);
|
||||
}
|
||||
|
||||
// Convert rgb floats ([0-1],[0-1],[0-1]) to hsv floats ([0-1],[0-1],[0-1]), from Foley & van Dam p592
|
||||
// Optimized http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv
|
||||
void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v)
|
||||
{
|
||||
float K = 0.f;
|
||||
if (g < b)
|
||||
{
|
||||
ImSwap(g, b);
|
||||
K = -1.f;
|
||||
}
|
||||
if (r < g)
|
||||
{
|
||||
ImSwap(r, g);
|
||||
K = -2.f / 6.f - K;
|
||||
}
|
||||
|
||||
const float chroma = r - (g < b ? g : b);
|
||||
out_h = ImFabs(K + (g - b) / (6.f * chroma + 1e-20f));
|
||||
out_s = chroma / (r + 1e-20f);
|
||||
out_v = r;
|
||||
}
|
||||
|
||||
// Convert hsv floats ([0-1],[0-1],[0-1]) to rgb floats ([0-1],[0-1],[0-1]), from Foley & van Dam p593
|
||||
// also http://en.wikipedia.org/wiki/HSL_and_HSV
|
||||
void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b)
|
||||
{
|
||||
if (s == 0.0f)
|
||||
{
|
||||
// gray
|
||||
out_r = out_g = out_b = v;
|
||||
return;
|
||||
}
|
||||
|
||||
h = ImFmod(h, 1.0f) / (60.0f/360.0f);
|
||||
int i = (int)h;
|
||||
float f = h - (float)i;
|
||||
float p = v * (1.0f - s);
|
||||
float q = v * (1.0f - s * f);
|
||||
float t = v * (1.0f - s * (1.0f - f));
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0: out_r = v; out_g = t; out_b = p; break;
|
||||
case 1: out_r = q; out_g = v; out_b = p; break;
|
||||
case 2: out_r = p; out_g = v; out_b = t; break;
|
||||
case 3: out_r = p; out_g = q; out_b = v; break;
|
||||
case 4: out_r = t; out_g = p; out_b = v; break;
|
||||
case 5: default: out_r = v; out_g = p; out_b = q; break;
|
||||
}
|
||||
}
|
||||
|
||||
FILE* ImFileOpen(const char* filename, const char* mode)
|
||||
{
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
@ -1634,6 +1531,113 @@ void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, size_
|
||||
return file_data;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// COLOR FUNCTIONS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
|
||||
{
|
||||
float s = 1.0f/255.0f;
|
||||
return ImVec4(
|
||||
((in >> IM_COL32_R_SHIFT) & 0xFF) * s,
|
||||
((in >> IM_COL32_G_SHIFT) & 0xFF) * s,
|
||||
((in >> IM_COL32_B_SHIFT) & 0xFF) * s,
|
||||
((in >> IM_COL32_A_SHIFT) & 0xFF) * s);
|
||||
}
|
||||
|
||||
ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
|
||||
{
|
||||
ImU32 out;
|
||||
out = ((ImU32)IM_F32_TO_INT8_SAT(in.x)) << IM_COL32_R_SHIFT;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.y)) << IM_COL32_G_SHIFT;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.z)) << IM_COL32_B_SHIFT;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.w)) << IM_COL32_A_SHIFT;
|
||||
return out;
|
||||
}
|
||||
|
||||
// Convert rgb floats ([0-1],[0-1],[0-1]) to hsv floats ([0-1],[0-1],[0-1]), from Foley & van Dam p592
|
||||
// Optimized http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv
|
||||
void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v)
|
||||
{
|
||||
float K = 0.f;
|
||||
if (g < b)
|
||||
{
|
||||
ImSwap(g, b);
|
||||
K = -1.f;
|
||||
}
|
||||
if (r < g)
|
||||
{
|
||||
ImSwap(r, g);
|
||||
K = -2.f / 6.f - K;
|
||||
}
|
||||
|
||||
const float chroma = r - (g < b ? g : b);
|
||||
out_h = ImFabs(K + (g - b) / (6.f * chroma + 1e-20f));
|
||||
out_s = chroma / (r + 1e-20f);
|
||||
out_v = r;
|
||||
}
|
||||
|
||||
// Convert hsv floats ([0-1],[0-1],[0-1]) to rgb floats ([0-1],[0-1],[0-1]), from Foley & van Dam p593
|
||||
// also http://en.wikipedia.org/wiki/HSL_and_HSV
|
||||
void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b)
|
||||
{
|
||||
if (s == 0.0f)
|
||||
{
|
||||
// gray
|
||||
out_r = out_g = out_b = v;
|
||||
return;
|
||||
}
|
||||
|
||||
h = ImFmod(h, 1.0f) / (60.0f/360.0f);
|
||||
int i = (int)h;
|
||||
float f = h - (float)i;
|
||||
float p = v * (1.0f - s);
|
||||
float q = v * (1.0f - s * f);
|
||||
float t = v * (1.0f - s * (1.0f - f));
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0: out_r = v; out_g = t; out_b = p; break;
|
||||
case 1: out_r = q; out_g = v; out_b = p; break;
|
||||
case 2: out_r = p; out_g = v; out_b = t; break;
|
||||
case 3: out_r = p; out_g = q; out_b = v; break;
|
||||
case 4: out_r = t; out_g = p; out_b = v; break;
|
||||
case 5: default: out_r = v; out_g = p; out_b = q; break;
|
||||
}
|
||||
}
|
||||
|
||||
ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
|
||||
{
|
||||
ImGuiStyle& style = GImGui->Style;
|
||||
ImVec4 c = style.Colors[idx];
|
||||
c.w *= style.Alpha * alpha_mul;
|
||||
return ColorConvertFloat4ToU32(c);
|
||||
}
|
||||
|
||||
ImU32 ImGui::GetColorU32(const ImVec4& col)
|
||||
{
|
||||
ImGuiStyle& style = GImGui->Style;
|
||||
ImVec4 c = col;
|
||||
c.w *= style.Alpha;
|
||||
return ColorConvertFloat4ToU32(c);
|
||||
}
|
||||
|
||||
const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
|
||||
{
|
||||
ImGuiStyle& style = GImGui->Style;
|
||||
return style.Colors[idx];
|
||||
}
|
||||
|
||||
ImU32 ImGui::GetColorU32(ImU32 col)
|
||||
{
|
||||
float style_alpha = GImGui->Style.Alpha;
|
||||
if (style_alpha >= 1.0f)
|
||||
return col;
|
||||
ImU32 a = (col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT;
|
||||
a = (ImU32)(a * style_alpha); // We don't need to clamp 0..255 because Style.Alpha is in 0..1 range.
|
||||
return (col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// ImGuiStorage
|
||||
// Helper: Key->value storage
|
||||
@ -8209,6 +8213,26 @@ void ImGui::NewLine()
|
||||
window->DC.LayoutType = backup_layout_type;
|
||||
}
|
||||
|
||||
void ImGui::Indent(float indent_w)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
window->DC.Indent.x += (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
|
||||
window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
|
||||
}
|
||||
|
||||
void ImGui::Unindent(float indent_w)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
window->DC.Indent.x -= (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
|
||||
window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// COLUMNS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void ImGui::NextColumn()
|
||||
{
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
@ -8527,22 +8551,6 @@ void ImGui::Columns(int columns_count, const char* id, bool border)
|
||||
BeginColumns(id, columns_count, flags);
|
||||
}
|
||||
|
||||
void ImGui::Indent(float indent_w)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
window->DC.Indent.x += (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
|
||||
window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
|
||||
}
|
||||
|
||||
void ImGui::Unindent(float indent_w)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
window->DC.Indent.x -= (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
|
||||
window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// DRAG AND DROP
|
||||
//-----------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user