mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 01:17:00 +00: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)
|
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;
|
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)
|
FILE* ImFileOpen(const char* filename, const char* mode)
|
||||||
{
|
{
|
||||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
@ -1634,6 +1531,113 @@ void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, size_
|
|||||||
return file_data;
|
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
|
// ImGuiStorage
|
||||||
// Helper: Key->value storage
|
// Helper: Key->value storage
|
||||||
@ -8209,6 +8213,26 @@ void ImGui::NewLine()
|
|||||||
window->DC.LayoutType = backup_layout_type;
|
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()
|
void ImGui::NextColumn()
|
||||||
{
|
{
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
@ -8527,22 +8551,6 @@ void ImGui::Columns(int columns_count, const char* id, bool border)
|
|||||||
BeginColumns(id, columns_count, flags);
|
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
|
// DRAG AND DROP
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user