|
@@ -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,6 +1473,68 @@ int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_e
|
|
return bytes_count;
|
|
return bytes_count;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+FILE* ImFileOpen(const char* filename, const char* mode)
|
|
|
|
+{
|
|
|
|
+#if defined(_WIN32) && !defined(__CYGWIN__)
|
|
|
|
+ // We need a fopen() wrapper because MSVC/Windows fopen doesn't handle UTF-8 filenames. Converting both strings from UTF-8 to wchar format (using a single allocation, because we can)
|
|
|
|
+ const int filename_wsize = ImTextCountCharsFromUtf8(filename, NULL) + 1;
|
|
|
|
+ const int mode_wsize = ImTextCountCharsFromUtf8(mode, NULL) + 1;
|
|
|
|
+ ImVector<ImWchar> buf;
|
|
|
|
+ buf.resize(filename_wsize + mode_wsize);
|
|
|
|
+ ImTextStrFromUtf8(&buf[0], filename_wsize, filename, NULL);
|
|
|
|
+ ImTextStrFromUtf8(&buf[filename_wsize], mode_wsize, mode, NULL);
|
|
|
|
+ return _wfopen((wchar_t*)&buf[0], (wchar_t*)&buf[filename_wsize]);
|
|
|
|
+#else
|
|
|
|
+ return fopen(filename, mode);
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// Load file content into memory
|
|
|
|
+// Memory allocated with ImGui::MemAlloc(), must be freed by user using ImGui::MemFree()
|
|
|
|
+void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, size_t* out_file_size, int padding_bytes)
|
|
|
|
+{
|
|
|
|
+ IM_ASSERT(filename && file_open_mode);
|
|
|
|
+ if (out_file_size)
|
|
|
|
+ *out_file_size = 0;
|
|
|
|
+
|
|
|
|
+ FILE* f;
|
|
|
|
+ if ((f = ImFileOpen(filename, file_open_mode)) == NULL)
|
|
|
|
+ return NULL;
|
|
|
|
+
|
|
|
|
+ long file_size_signed;
|
|
|
|
+ if (fseek(f, 0, SEEK_END) || (file_size_signed = ftell(f)) == -1 || fseek(f, 0, SEEK_SET))
|
|
|
|
+ {
|
|
|
|
+ fclose(f);
|
|
|
|
+ return NULL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ size_t file_size = (size_t)file_size_signed;
|
|
|
|
+ void* file_data = ImGui::MemAlloc(file_size + padding_bytes);
|
|
|
|
+ if (file_data == NULL)
|
|
|
|
+ {
|
|
|
|
+ fclose(f);
|
|
|
|
+ return NULL;
|
|
|
|
+ }
|
|
|
|
+ if (fread(file_data, 1, file_size, f) != file_size)
|
|
|
|
+ {
|
|
|
|
+ fclose(f);
|
|
|
|
+ ImGui::MemFree(file_data);
|
|
|
|
+ return NULL;
|
|
|
|
+ }
|
|
|
|
+ if (padding_bytes > 0)
|
|
|
|
+ memset((void*)(((char*)file_data) + file_size), 0, (size_t)padding_bytes);
|
|
|
|
+
|
|
|
|
+ fclose(f);
|
|
|
|
+ if (out_file_size)
|
|
|
|
+ *out_file_size = file_size;
|
|
|
|
+
|
|
|
|
+ return file_data;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
|
+// COLOR FUNCTIONS
|
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
|
+
|
|
ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
|
|
ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
|
|
{
|
|
{
|
|
float s = 1.0f/255.0f;
|
|
float s = 1.0f/255.0f;
|
|
@@ -1493,38 +1555,6 @@ ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
|
|
return out;
|
|
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
|
|
// 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
|
|
// 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)
|
|
void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v)
|
|
@@ -1576,62 +1606,36 @@ void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float&
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-FILE* ImFileOpen(const char* filename, const char* mode)
|
|
|
|
|
|
+ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
|
|
{
|
|
{
|
|
-#if defined(_WIN32) && !defined(__CYGWIN__)
|
|
|
|
- // We need a fopen() wrapper because MSVC/Windows fopen doesn't handle UTF-8 filenames. Converting both strings from UTF-8 to wchar format (using a single allocation, because we can)
|
|
|
|
- const int filename_wsize = ImTextCountCharsFromUtf8(filename, NULL) + 1;
|
|
|
|
- const int mode_wsize = ImTextCountCharsFromUtf8(mode, NULL) + 1;
|
|
|
|
- ImVector<ImWchar> buf;
|
|
|
|
- buf.resize(filename_wsize + mode_wsize);
|
|
|
|
- ImTextStrFromUtf8(&buf[0], filename_wsize, filename, NULL);
|
|
|
|
- ImTextStrFromUtf8(&buf[filename_wsize], mode_wsize, mode, NULL);
|
|
|
|
- return _wfopen((wchar_t*)&buf[0], (wchar_t*)&buf[filename_wsize]);
|
|
|
|
-#else
|
|
|
|
- return fopen(filename, mode);
|
|
|
|
-#endif
|
|
|
|
|
|
+ ImGuiStyle& style = GImGui->Style;
|
|
|
|
+ ImVec4 c = style.Colors[idx];
|
|
|
|
+ c.w *= style.Alpha * alpha_mul;
|
|
|
|
+ return ColorConvertFloat4ToU32(c);
|
|
}
|
|
}
|
|
|
|
|
|
-// Load file content into memory
|
|
|
|
-// Memory allocated with ImGui::MemAlloc(), must be freed by user using ImGui::MemFree()
|
|
|
|
-void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, size_t* out_file_size, int padding_bytes)
|
|
|
|
|
|
+ImU32 ImGui::GetColorU32(const ImVec4& col)
|
|
{
|
|
{
|
|
- IM_ASSERT(filename && file_open_mode);
|
|
|
|
- if (out_file_size)
|
|
|
|
- *out_file_size = 0;
|
|
|
|
-
|
|
|
|
- FILE* f;
|
|
|
|
- if ((f = ImFileOpen(filename, file_open_mode)) == NULL)
|
|
|
|
- return NULL;
|
|
|
|
-
|
|
|
|
- long file_size_signed;
|
|
|
|
- if (fseek(f, 0, SEEK_END) || (file_size_signed = ftell(f)) == -1 || fseek(f, 0, SEEK_SET))
|
|
|
|
- {
|
|
|
|
- fclose(f);
|
|
|
|
- return NULL;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- size_t file_size = (size_t)file_size_signed;
|
|
|
|
- void* file_data = ImGui::MemAlloc(file_size + padding_bytes);
|
|
|
|
- if (file_data == NULL)
|
|
|
|
- {
|
|
|
|
- fclose(f);
|
|
|
|
- return NULL;
|
|
|
|
- }
|
|
|
|
- if (fread(file_data, 1, file_size, f) != file_size)
|
|
|
|
- {
|
|
|
|
- fclose(f);
|
|
|
|
- ImGui::MemFree(file_data);
|
|
|
|
- return NULL;
|
|
|
|
- }
|
|
|
|
- if (padding_bytes > 0)
|
|
|
|
- memset((void*)(((char*)file_data) + file_size), 0, (size_t)padding_bytes);
|
|
|
|
|
|
+ ImGuiStyle& style = GImGui->Style;
|
|
|
|
+ ImVec4 c = col;
|
|
|
|
+ c.w *= style.Alpha;
|
|
|
|
+ return ColorConvertFloat4ToU32(c);
|
|
|
|
+}
|
|
|
|
|
|
- fclose(f);
|
|
|
|
- if (out_file_size)
|
|
|
|
- *out_file_size = file_size;
|
|
|
|
|
|
+const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
|
|
|
|
+{
|
|
|
|
+ ImGuiStyle& style = GImGui->Style;
|
|
|
|
+ return style.Colors[idx];
|
|
|
|
+}
|
|
|
|
|
|
- return file_data;
|
|
|
|
|
|
+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);
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
@@ -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
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|