|
@@ -1,4 +1,4 @@
|
|
-// dear imgui, v1.50 WIP
|
|
|
|
|
|
+// dear imgui, v1.52 WIP
|
|
// (headers)
|
|
// (headers)
|
|
|
|
|
|
// See imgui.cpp file for documentation.
|
|
// See imgui.cpp file for documentation.
|
|
@@ -16,7 +16,7 @@
|
|
#include <stddef.h> // ptrdiff_t, NULL
|
|
#include <stddef.h> // ptrdiff_t, NULL
|
|
#include <string.h> // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
|
|
#include <string.h> // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
|
|
|
|
|
|
-#define IMGUI_VERSION "1.50 WIP"
|
|
|
|
|
|
+#define IMGUI_VERSION "1.52 WIP"
|
|
|
|
|
|
// Define attributes of all API symbols declarations, e.g. for DLL under Windows.
|
|
// Define attributes of all API symbols declarations, e.g. for DLL under Windows.
|
|
#ifndef IMGUI_API
|
|
#ifndef IMGUI_API
|
|
@@ -31,9 +31,11 @@
|
|
|
|
|
|
// Some compilers support applying printf-style warnings to user functions.
|
|
// Some compilers support applying printf-style warnings to user functions.
|
|
#if defined(__clang__) || defined(__GNUC__)
|
|
#if defined(__clang__) || defined(__GNUC__)
|
|
-#define IM_PRINTFARGS(FMT) __attribute__((format(printf, FMT, (FMT+1))))
|
|
|
|
|
|
+#define IM_FMTARGS(FMT) __attribute__((format(printf, FMT, FMT+1)))
|
|
|
|
+#define IM_FMTLIST(FMT) __attribute__((format(printf, FMT, 0)))
|
|
#else
|
|
#else
|
|
-#define IM_PRINTFARGS(FMT)
|
|
|
|
|
|
+#define IM_FMTARGS(FMT)
|
|
|
|
+#define IM_FMTLIST(FMT)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#if defined(__clang__)
|
|
#if defined(__clang__)
|
|
@@ -48,7 +50,7 @@ struct ImDrawData; // All draw command lists required to render
|
|
struct ImDrawList; // A single draw command list (generally one per window)
|
|
struct ImDrawList; // A single draw command list (generally one per window)
|
|
struct ImDrawVert; // A single vertex (20 bytes by default, override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
|
|
struct ImDrawVert; // A single vertex (20 bytes by default, override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
|
|
struct ImFont; // Runtime data for a single font within a parent ImFontAtlas
|
|
struct ImFont; // Runtime data for a single font within a parent ImFontAtlas
|
|
-struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF font loader
|
|
|
|
|
|
+struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
|
|
struct ImFontConfig; // Configuration data when adding a font or merging fonts
|
|
struct ImFontConfig; // Configuration data when adding a font or merging fonts
|
|
struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4
|
|
struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4
|
|
struct ImGuiIO; // Main configuration and I/O between your application and ImGui
|
|
struct ImGuiIO; // Main configuration and I/O between your application and ImGui
|
|
@@ -70,15 +72,21 @@ typedef void* ImTextureID; // user data to identify a texture (this is
|
|
typedef int ImGuiCol; // a color identifier for styling // enum ImGuiCol_
|
|
typedef int ImGuiCol; // a color identifier for styling // enum ImGuiCol_
|
|
typedef int ImGuiStyleVar; // a variable identifier for styling // enum ImGuiStyleVar_
|
|
typedef int ImGuiStyleVar; // a variable identifier for styling // enum ImGuiStyleVar_
|
|
typedef int ImGuiKey; // a key identifier (ImGui-side enum) // enum ImGuiKey_
|
|
typedef int ImGuiKey; // a key identifier (ImGui-side enum) // enum ImGuiKey_
|
|
-typedef int ImGuiColorEditMode; // color edit mode for ColorEdit*() // enum ImGuiColorEditMode_
|
|
|
|
|
|
+typedef int ImGuiColorEditFlags; // color edit flags for Color*() // enum ImGuiColorEditFlags_
|
|
typedef int ImGuiMouseCursor; // a mouse cursor identifier // enum ImGuiMouseCursor_
|
|
typedef int ImGuiMouseCursor; // a mouse cursor identifier // enum ImGuiMouseCursor_
|
|
typedef int ImGuiWindowFlags; // window flags for Begin*() // enum ImGuiWindowFlags_
|
|
typedef int ImGuiWindowFlags; // window flags for Begin*() // enum ImGuiWindowFlags_
|
|
-typedef int ImGuiSetCond; // condition flags for Set*() // enum ImGuiSetCond_
|
|
|
|
|
|
+typedef int ImGuiCond; // condition flags for Set*() // enum ImGuiCond_
|
|
|
|
+typedef int ImGuiColumnsFlags; // flags for *Columns*() // enum ImGuiColumnsFlags_
|
|
typedef int ImGuiInputTextFlags; // flags for InputText*() // enum ImGuiInputTextFlags_
|
|
typedef int ImGuiInputTextFlags; // flags for InputText*() // enum ImGuiInputTextFlags_
|
|
typedef int ImGuiSelectableFlags; // flags for Selectable() // enum ImGuiSelectableFlags_
|
|
typedef int ImGuiSelectableFlags; // flags for Selectable() // enum ImGuiSelectableFlags_
|
|
typedef int ImGuiTreeNodeFlags; // flags for TreeNode*(), Collapsing*() // enum ImGuiTreeNodeFlags_
|
|
typedef int ImGuiTreeNodeFlags; // flags for TreeNode*(), Collapsing*() // enum ImGuiTreeNodeFlags_
|
|
typedef int (*ImGuiTextEditCallback)(ImGuiTextEditCallbackData *data);
|
|
typedef int (*ImGuiTextEditCallback)(ImGuiTextEditCallbackData *data);
|
|
typedef void (*ImGuiSizeConstraintCallback)(ImGuiSizeConstraintCallbackData* data);
|
|
typedef void (*ImGuiSizeConstraintCallback)(ImGuiSizeConstraintCallbackData* data);
|
|
|
|
+#ifdef _MSC_VER
|
|
|
|
+typedef unsigned __int64 ImU64; // 64-bit unsigned integer
|
|
|
|
+#else
|
|
|
|
+typedef unsigned long long ImU64; // 64-bit unsigned integer
|
|
|
|
+#endif
|
|
|
|
|
|
// Others helpers at bottom of the file:
|
|
// Others helpers at bottom of the file:
|
|
// class ImVector<> // Lightweight std::vector like class.
|
|
// class ImVector<> // Lightweight std::vector like class.
|
|
@@ -115,10 +123,12 @@ namespace ImGui
|
|
IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until NewFrame()/Render().
|
|
IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until NewFrame()/Render().
|
|
IMGUI_API void Render(); // ends the ImGui frame, finalize rendering data, then call your io.RenderDrawListsFn() function if set.
|
|
IMGUI_API void Render(); // ends the ImGui frame, finalize rendering data, then call your io.RenderDrawListsFn() function if set.
|
|
IMGUI_API void Shutdown();
|
|
IMGUI_API void Shutdown();
|
|
- IMGUI_API void ShowUserGuide(); // help block
|
|
|
|
- IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // style editor block. you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
|
|
|
|
- IMGUI_API void ShowTestWindow(bool* p_open = NULL); // test window demonstrating ImGui features
|
|
|
|
- IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // metrics window for debugging ImGui (browse draw commands, individual vertices, window list, etc.)
|
|
|
|
|
|
+
|
|
|
|
+ // Demo/Debug/Info
|
|
|
|
+ IMGUI_API void ShowTestWindow(bool* p_open = NULL); // create demo/test window. demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
|
|
|
|
+ IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: browse window list, draw commands, individual vertices, basic internal state, etc.
|
|
|
|
+ IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
|
|
|
|
+ IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls).
|
|
|
|
|
|
// Window
|
|
// Window
|
|
IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false).
|
|
IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false).
|
|
@@ -139,24 +149,25 @@ namespace ImGui
|
|
IMGUI_API float GetWindowWidth();
|
|
IMGUI_API float GetWindowWidth();
|
|
IMGUI_API float GetWindowHeight();
|
|
IMGUI_API float GetWindowHeight();
|
|
IMGUI_API bool IsWindowCollapsed();
|
|
IMGUI_API bool IsWindowCollapsed();
|
|
|
|
+ IMGUI_API bool IsWindowAppearing();
|
|
IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows
|
|
IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows
|
|
|
|
|
|
- IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiSetCond cond = 0); // set next window position. call before Begin()
|
|
|
|
- IMGUI_API void SetNextWindowPosCenter(ImGuiSetCond cond = 0); // set next window position to be centered on screen. call before Begin()
|
|
|
|
- IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin()
|
|
|
|
|
|
+ IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // set next window position. call before Begin()
|
|
|
|
+ IMGUI_API void SetNextWindowPosCenter(ImGuiCond cond = 0); // set next window position to be centered on screen. call before Begin()
|
|
|
|
+ IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin()
|
|
IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints.
|
|
IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints.
|
|
IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (enforce the range of scrollbars). set axis to 0.0f to leave it automatic. call before Begin()
|
|
IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (enforce the range of scrollbars). set axis to 0.0f to leave it automatic. call before Begin()
|
|
IMGUI_API void SetNextWindowContentWidth(float width); // set next window content width (enforce the range of horizontal scrollbar). call before Begin()
|
|
IMGUI_API void SetNextWindowContentWidth(float width); // set next window content width (enforce the range of horizontal scrollbar). call before Begin()
|
|
- IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // set next window collapsed state. call before Begin()
|
|
|
|
|
|
+ IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin()
|
|
IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin()
|
|
IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin()
|
|
- IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiSetCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
|
|
|
|
- IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
|
|
|
|
- IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
|
|
|
|
|
|
+ IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
|
|
|
|
+ IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
|
|
|
|
+ IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
|
|
IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus().
|
|
IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus().
|
|
- IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond = 0); // set named window position.
|
|
|
|
- IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiSetCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis.
|
|
|
|
- IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiSetCond cond = 0); // set named window collapsed state
|
|
|
|
- IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus.
|
|
|
|
|
|
+ IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position.
|
|
|
|
+ IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis.
|
|
|
|
+ IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state
|
|
|
|
+ IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus.
|
|
|
|
|
|
IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()]
|
|
IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()]
|
|
IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()]
|
|
IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()]
|
|
@@ -173,16 +184,19 @@ namespace ImGui
|
|
// Parameters stacks (shared)
|
|
// Parameters stacks (shared)
|
|
IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font
|
|
IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font
|
|
IMGUI_API void PopFont();
|
|
IMGUI_API void PopFont();
|
|
|
|
+ IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col);
|
|
IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col);
|
|
IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col);
|
|
IMGUI_API void PopStyleColor(int count = 1);
|
|
IMGUI_API void PopStyleColor(int count = 1);
|
|
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val);
|
|
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val);
|
|
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val);
|
|
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val);
|
|
IMGUI_API void PopStyleVar(int count = 1);
|
|
IMGUI_API void PopStyleVar(int count = 1);
|
|
|
|
+ IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha.
|
|
IMGUI_API ImFont* GetFont(); // get current font
|
|
IMGUI_API ImFont* GetFont(); // get current font
|
|
IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied
|
|
IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied
|
|
IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API
|
|
IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API
|
|
IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier
|
|
IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier
|
|
IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied
|
|
IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied
|
|
|
|
+ IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied
|
|
|
|
|
|
// Parameters stacks (current window)
|
|
// Parameters stacks (current window)
|
|
IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side)
|
|
IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side)
|
|
@@ -190,9 +204,9 @@ namespace ImGui
|
|
IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position
|
|
IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position
|
|
IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space
|
|
IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space
|
|
IMGUI_API void PopTextWrapPos();
|
|
IMGUI_API void PopTextWrapPos();
|
|
- IMGUI_API void PushAllowKeyboardFocus(bool v); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
|
|
|
|
|
|
+ IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
|
|
IMGUI_API void PopAllowKeyboardFocus();
|
|
IMGUI_API void PopAllowKeyboardFocus();
|
|
- IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (uses io.KeyRepeatDelay/io.KeyRepeatRate for now). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame.
|
|
|
|
|
|
+ IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame.
|
|
IMGUI_API void PopButtonRepeat();
|
|
IMGUI_API void PopButtonRepeat();
|
|
|
|
|
|
// Cursor / Layout
|
|
// Cursor / Layout
|
|
@@ -220,44 +234,47 @@ namespace ImGui
|
|
IMGUI_API float GetItemsLineHeightWithSpacing(); // distance (in pixels) between 2 consecutive lines of standard height widgets == GetWindowFontSize() + GetStyle().FramePadding.y*2 + GetStyle().ItemSpacing.y
|
|
IMGUI_API float GetItemsLineHeightWithSpacing(); // distance (in pixels) between 2 consecutive lines of standard height widgets == GetWindowFontSize() + GetStyle().FramePadding.y*2 + GetStyle().ItemSpacing.y
|
|
|
|
|
|
// Columns
|
|
// Columns
|
|
- // You can also use SameLine(pos_x) for simplified columning. The columns API is still work-in-progress and rather lacking.
|
|
|
|
- IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); // setup number of columns. use an identifier to distinguish multiple column sets. close with Columns(1).
|
|
|
|
- IMGUI_API void NextColumn(); // next column
|
|
|
|
|
|
+ // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking.
|
|
|
|
+ IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true);
|
|
|
|
+ IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished
|
|
IMGUI_API int GetColumnIndex(); // get current column index
|
|
IMGUI_API int GetColumnIndex(); // get current column index
|
|
- IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetcolumnsCount() inclusive. column 0 is usually 0.0f and not resizable unless you call this
|
|
|
|
|
|
+ IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column
|
|
|
|
+ IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column
|
|
|
|
+ IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f
|
|
IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column
|
|
IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column
|
|
- IMGUI_API float GetColumnWidth(int column_index = -1); // column width (== GetColumnOffset(GetColumnIndex()+1) - GetColumnOffset(GetColumnOffset())
|
|
|
|
- IMGUI_API int GetColumnsCount(); // number of columns (what was passed to Columns())
|
|
|
|
|
|
+ IMGUI_API int GetColumnsCount();
|
|
|
|
|
|
// ID scopes
|
|
// ID scopes
|
|
- // If you are creating widgets in a loop you most likely want to push a unique identifier so ImGui can differentiate them.
|
|
|
|
|
|
+ // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them.
|
|
// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details.
|
|
// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details.
|
|
- IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the *entire* stack!
|
|
|
|
|
|
+ IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack!
|
|
IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end);
|
|
IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end);
|
|
IMGUI_API void PushID(const void* ptr_id);
|
|
IMGUI_API void PushID(const void* ptr_id);
|
|
IMGUI_API void PushID(int int_id);
|
|
IMGUI_API void PushID(int int_id);
|
|
IMGUI_API void PopID();
|
|
IMGUI_API void PopID();
|
|
- IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). useful if you want to query into ImGuiStorage yourself. otherwise rarely needed
|
|
|
|
|
|
+ IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself
|
|
IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end);
|
|
IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end);
|
|
IMGUI_API ImGuiID GetID(const void* ptr_id);
|
|
IMGUI_API ImGuiID GetID(const void* ptr_id);
|
|
|
|
|
|
- // Widgets
|
|
|
|
- IMGUI_API void Text(const char* fmt, ...) IM_PRINTFARGS(1);
|
|
|
|
- IMGUI_API void TextV(const char* fmt, va_list args);
|
|
|
|
- IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_PRINTFARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
|
|
|
|
- IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args);
|
|
|
|
- IMGUI_API void TextDisabled(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor();
|
|
|
|
- IMGUI_API void TextDisabledV(const char* fmt, va_list args);
|
|
|
|
- IMGUI_API void TextWrapped(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize().
|
|
|
|
- IMGUI_API void TextWrappedV(const char* fmt, va_list args);
|
|
|
|
- IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // doesn't require null terminated string if 'text_end' is specified. no copy done to any bounded stack buffer, recommended for long chunks of text
|
|
|
|
- IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_PRINTFARGS(2); // display text+label aligned the same way as value+label widgets
|
|
|
|
- IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args);
|
|
|
|
- IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
|
|
|
|
- IMGUI_API void BulletText(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for Bullet()+Text()
|
|
|
|
- IMGUI_API void BulletTextV(const char* fmt, va_list args);
|
|
|
|
|
|
+ // Widgets: Text
|
|
|
|
+ IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // doesn't require null terminated string if 'text_end' is specified. no copy done, no limits, recommended for long chunks of text
|
|
|
|
+ IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text
|
|
|
|
+ IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1);
|
|
|
|
+ IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
|
|
|
|
+ IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2);
|
|
|
|
+ IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor();
|
|
|
|
+ IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1);
|
|
|
|
+ IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize().
|
|
|
|
+ IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1);
|
|
|
|
+ IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets
|
|
|
|
+ IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2);
|
|
|
|
+ IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text()
|
|
|
|
+ IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1);
|
|
|
|
+ IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
|
|
|
|
+
|
|
|
|
+ // Widgets: Main
|
|
IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button
|
|
IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button
|
|
- IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0)
|
|
|
|
|
|
+ IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text
|
|
IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size);
|
|
IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size);
|
|
IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0));
|
|
IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0));
|
|
IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding
|
|
IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding
|
|
@@ -266,12 +283,8 @@ namespace ImGui
|
|
IMGUI_API bool RadioButton(const char* label, bool active);
|
|
IMGUI_API bool RadioButton(const char* label, bool active);
|
|
IMGUI_API bool RadioButton(const char* label, int* v, int v_button);
|
|
IMGUI_API bool RadioButton(const char* label, int* v, int v_button);
|
|
IMGUI_API bool Combo(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1);
|
|
IMGUI_API bool Combo(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1);
|
|
- IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items = -1); // separate items with \0, end item-list with \0\0
|
|
|
|
|
|
+ IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items = -1); // separate items with \0, end item-list with \0\0
|
|
IMGUI_API bool Combo(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1);
|
|
IMGUI_API bool Combo(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1);
|
|
- IMGUI_API bool ColorButton(const ImVec4& col, bool small_height = false, bool outline_border = true);
|
|
|
|
- IMGUI_API bool ColorEdit3(const char* label, float col[3]); // Hint: 'float col[3]' function argument is same as 'float* col'. You can pass address of first element out of a contiguous set, e.g. &myvector.x
|
|
|
|
- IMGUI_API bool ColorEdit4(const char* label, float col[4], bool show_alpha = true); // "
|
|
|
|
- IMGUI_API void ColorEditMode(ImGuiColorEditMode mode); // FIXME-OBSOLETE: This is inconsistent with most of the API and will be obsoleted/replaced.
|
|
|
|
IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float));
|
|
IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float));
|
|
IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0));
|
|
IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0));
|
|
IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float));
|
|
IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float));
|
|
@@ -279,7 +292,7 @@ namespace ImGui
|
|
IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL);
|
|
IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL);
|
|
|
|
|
|
// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds)
|
|
// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds)
|
|
- // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, remember than a 'float v[3]' function argument is the same as 'float* v'. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
|
|
|
|
|
|
+ // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
|
|
IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound
|
|
IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound
|
|
IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);
|
|
@@ -304,7 +317,7 @@ namespace ImGui
|
|
IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0);
|
|
IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0);
|
|
|
|
|
|
// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds)
|
|
// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds)
|
|
- IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix. Use power!=1.0 for logarithmic sliders
|
|
|
|
|
|
+ IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders
|
|
IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
|
@@ -316,23 +329,32 @@ namespace ImGui
|
|
IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
|
IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f");
|
|
IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f");
|
|
|
|
|
|
|
|
+ // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.)
|
|
|
|
+ // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x
|
|
|
|
+ IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
|
|
|
|
+ IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0);
|
|
|
|
+ IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
|
|
|
|
+ IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL);
|
|
|
|
+ IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed.
|
|
|
|
+ IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls.
|
|
|
|
+
|
|
// Widgets: Trees
|
|
// Widgets: Trees
|
|
IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop().
|
|
IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop().
|
|
- IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_PRINTFARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
|
|
|
|
- IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_PRINTFARGS(2); // "
|
|
|
|
- IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args); // "
|
|
|
|
- IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args); // "
|
|
|
|
|
|
+ IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
|
|
|
|
+ IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // "
|
|
|
|
+ IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2);
|
|
|
|
+ IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2);
|
|
IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0);
|
|
IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0);
|
|
- IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_PRINTFARGS(3);
|
|
|
|
- IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_PRINTFARGS(3);
|
|
|
|
- IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args);
|
|
|
|
- IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args);
|
|
|
|
|
|
+ IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
|
|
|
|
+ IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
|
|
|
|
+ IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
|
|
|
|
+ IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
|
|
IMGUI_API void TreePush(const char* str_id = NULL); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose
|
|
IMGUI_API void TreePush(const char* str_id = NULL); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose
|
|
IMGUI_API void TreePush(const void* ptr_id = NULL); // "
|
|
IMGUI_API void TreePush(const void* ptr_id = NULL); // "
|
|
IMGUI_API void TreePop(); // ~ Unindent()+PopId()
|
|
IMGUI_API void TreePop(); // ~ Unindent()+PopId()
|
|
IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing()
|
|
IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing()
|
|
IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
|
|
IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
|
|
- IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiSetCond cond = 0); // set next TreeNode/CollapsingHeader open state.
|
|
|
|
|
|
+ IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state.
|
|
IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop().
|
|
IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop().
|
|
IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header
|
|
IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header
|
|
|
|
|
|
@@ -350,13 +372,11 @@ namespace ImGui
|
|
IMGUI_API void Value(const char* prefix, int v);
|
|
IMGUI_API void Value(const char* prefix, int v);
|
|
IMGUI_API void Value(const char* prefix, unsigned int v);
|
|
IMGUI_API void Value(const char* prefix, unsigned int v);
|
|
IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL);
|
|
IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL);
|
|
- IMGUI_API void ValueColor(const char* prefix, const ImVec4& v);
|
|
|
|
- IMGUI_API void ValueColor(const char* prefix, ImU32 v);
|
|
|
|
|
|
|
|
// Tooltips
|
|
// Tooltips
|
|
- IMGUI_API void SetTooltip(const char* fmt, ...) IM_PRINTFARGS(1); // set tooltip under mouse-cursor, typically use with ImGui::IsHovered(). last call wins
|
|
|
|
- IMGUI_API void SetTooltipV(const char* fmt, va_list args);
|
|
|
|
- IMGUI_API void BeginTooltip(); // use to create full-featured tooltip windows that aren't just text
|
|
|
|
|
|
+ IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip().
|
|
|
|
+ IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
|
|
|
|
+ IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents).
|
|
IMGUI_API void EndTooltip();
|
|
IMGUI_API void EndTooltip();
|
|
|
|
|
|
// Menus
|
|
// Menus
|
|
@@ -370,13 +390,14 @@ namespace ImGui
|
|
IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL
|
|
IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL
|
|
|
|
|
|
// Popups
|
|
// Popups
|
|
- IMGUI_API void OpenPopup(const char* str_id); // mark popup as open. popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
|
|
|
|
|
|
+ IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
|
|
IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true!
|
|
IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true!
|
|
IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside)
|
|
IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside)
|
|
IMGUI_API bool BeginPopupContextItem(const char* str_id, int mouse_button = 1); // helper to open and begin popup when clicked on last item. read comments in .cpp!
|
|
IMGUI_API bool BeginPopupContextItem(const char* str_id, int mouse_button = 1); // helper to open and begin popup when clicked on last item. read comments in .cpp!
|
|
- IMGUI_API bool BeginPopupContextWindow(bool also_over_items = true, const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on current window.
|
|
|
|
|
|
+ IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window.
|
|
IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (no window).
|
|
IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (no window).
|
|
IMGUI_API void EndPopup();
|
|
IMGUI_API void EndPopup();
|
|
|
|
+ IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open
|
|
IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup.
|
|
IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup.
|
|
|
|
|
|
// Logging: all text output from interface is redirected to tty/file/clipboard. By default, tree nodes are automatically opened during logging.
|
|
// Logging: all text output from interface is redirected to tty/file/clipboard. By default, tree nodes are automatically opened during logging.
|
|
@@ -385,40 +406,44 @@ namespace ImGui
|
|
IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard
|
|
IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard
|
|
IMGUI_API void LogFinish(); // stop logging (close file, etc.)
|
|
IMGUI_API void LogFinish(); // stop logging (close file, etc.)
|
|
IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard
|
|
IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard
|
|
- IMGUI_API void LogText(const char* fmt, ...) IM_PRINTFARGS(1); // pass text data straight to log (without being displayed)
|
|
|
|
|
|
+ IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed)
|
|
|
|
|
|
// Clipping
|
|
// Clipping
|
|
IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
|
|
IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
|
|
IMGUI_API void PopClipRect();
|
|
IMGUI_API void PopClipRect();
|
|
|
|
|
|
|
|
+ // Styles
|
|
|
|
+ IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL);
|
|
|
|
+
|
|
// Utilities
|
|
// Utilities
|
|
- IMGUI_API bool IsItemHovered(); // was the last item hovered by mouse?
|
|
|
|
- IMGUI_API bool IsItemHoveredRect(); // was the last item hovered by mouse? even if another item is active or window is blocked by popup while we are hovering this
|
|
|
|
- IMGUI_API bool IsItemActive(); // was the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false)
|
|
|
|
- IMGUI_API bool IsItemClicked(int mouse_button = 0); // was the last item clicked? (e.g. button/node just clicked on)
|
|
|
|
- IMGUI_API bool IsItemVisible(); // was the last item visible? (aka not out of sight due to clipping/scrolling.)
|
|
|
|
|
|
+ IMGUI_API bool IsItemHovered(); // is the last item hovered by mouse (and usable)?
|
|
|
|
+ IMGUI_API bool IsItemRectHovered(); // is the last item hovered by mouse? even if another item is active or window is blocked by popup while we are hovering this
|
|
|
|
+ IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false)
|
|
|
|
+ IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on)
|
|
|
|
+ IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.)
|
|
IMGUI_API bool IsAnyItemHovered();
|
|
IMGUI_API bool IsAnyItemHovered();
|
|
IMGUI_API bool IsAnyItemActive();
|
|
IMGUI_API bool IsAnyItemActive();
|
|
IMGUI_API ImVec2 GetItemRectMin(); // get bounding rect of last item in screen space
|
|
IMGUI_API ImVec2 GetItemRectMin(); // get bounding rect of last item in screen space
|
|
IMGUI_API ImVec2 GetItemRectMax(); // "
|
|
IMGUI_API ImVec2 GetItemRectMax(); // "
|
|
IMGUI_API ImVec2 GetItemRectSize(); // "
|
|
IMGUI_API ImVec2 GetItemRectSize(); // "
|
|
IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
|
|
IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
|
|
- IMGUI_API bool IsWindowHovered(); // is current window hovered and hoverable (not blocked by a popup) (differentiate child windows from each others)
|
|
|
|
IMGUI_API bool IsWindowFocused(); // is current window focused
|
|
IMGUI_API bool IsWindowFocused(); // is current window focused
|
|
|
|
+ IMGUI_API bool IsWindowHovered(); // is current window hovered and hoverable (not blocked by a popup) (differentiate child windows from each others)
|
|
|
|
+ IMGUI_API bool IsWindowRectHovered(); // is current window rectangle hovered, disregarding of any consideration of being blocked by a popup. (unlike IsWindowHovered() this will return true even if the window is blocked because of a popup)
|
|
IMGUI_API bool IsRootWindowFocused(); // is current root window focused (root = top-most parent of a child, otherwise self)
|
|
IMGUI_API bool IsRootWindowFocused(); // is current root window focused (root = top-most parent of a child, otherwise self)
|
|
IMGUI_API bool IsRootWindowOrAnyChildFocused(); // is current root window or any of its child (including current window) focused
|
|
IMGUI_API bool IsRootWindowOrAnyChildFocused(); // is current root window or any of its child (including current window) focused
|
|
IMGUI_API bool IsRootWindowOrAnyChildHovered(); // is current root window or any of its child (including current window) hovered and hoverable (not blocked by a popup)
|
|
IMGUI_API bool IsRootWindowOrAnyChildHovered(); // is current root window or any of its child (including current window) hovered and hoverable (not blocked by a popup)
|
|
|
|
+ IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window
|
|
IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
|
|
IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
|
|
IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side.
|
|
IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side.
|
|
- IMGUI_API bool IsPosHoveringAnyWindow(const ImVec2& pos); // is given position hovering any active imgui window
|
|
|
|
IMGUI_API float GetTime();
|
|
IMGUI_API float GetTime();
|
|
IMGUI_API int GetFrameCount();
|
|
IMGUI_API int GetFrameCount();
|
|
- IMGUI_API const char* GetStyleColName(ImGuiCol idx);
|
|
|
|
|
|
+ IMGUI_API const char* GetStyleColorName(ImGuiCol idx);
|
|
IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items
|
|
IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items
|
|
IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
|
|
IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
|
|
IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can.
|
|
IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can.
|
|
|
|
|
|
- IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame
|
|
|
|
|
|
+ IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame
|
|
IMGUI_API void EndChildFrame();
|
|
IMGUI_API void EndChildFrame();
|
|
|
|
|
|
IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in);
|
|
IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in);
|
|
@@ -427,23 +452,23 @@ namespace ImGui
|
|
IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b);
|
|
IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b);
|
|
|
|
|
|
// Inputs
|
|
// Inputs
|
|
- IMGUI_API int GetKeyIndex(ImGuiKey key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key]
|
|
|
|
- IMGUI_API bool IsKeyDown(int key_index); // key_index into the keys_down[] array, imgui doesn't know the semantic of each entry, uses your own indices!
|
|
|
|
- IMGUI_API bool IsKeyPressed(int key_index, bool repeat = true); // uses user's key indices as stored in the keys_down[] array. if repeat=true. uses io.KeyRepeatDelay / KeyRepeatRate
|
|
|
|
- IMGUI_API bool IsKeyReleased(int key_index); // "
|
|
|
|
|
|
+ IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key]
|
|
|
|
+ IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]!
|
|
|
|
+ IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate
|
|
|
|
+ IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down)..
|
|
|
|
+ IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate
|
|
IMGUI_API bool IsMouseDown(int button); // is mouse button held
|
|
IMGUI_API bool IsMouseDown(int button); // is mouse button held
|
|
IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down)
|
|
IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down)
|
|
IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime.
|
|
IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime.
|
|
IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down)
|
|
IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down)
|
|
- IMGUI_API bool IsMouseHoveringWindow(); // is mouse hovering current window ("window" in API names always refer to current window). disregarding of any consideration of being blocked by a popup. (unlike IsWindowHovered() this will return true even if the window is blocked because of a popup)
|
|
|
|
- IMGUI_API bool IsMouseHoveringAnyWindow(); // is mouse hovering any visible window
|
|
|
|
- IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup.
|
|
|
|
IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
|
|
IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
|
|
|
|
+ IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup.
|
|
|
|
+ IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); //
|
|
IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
|
|
IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
|
|
IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into
|
|
IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into
|
|
IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
|
|
IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
|
|
IMGUI_API void ResetMouseDragDelta(int button = 0); //
|
|
IMGUI_API void ResetMouseDragDelta(int button = 0); //
|
|
- IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you
|
|
|
|
|
|
+ IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you
|
|
IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type
|
|
IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type
|
|
IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered.
|
|
IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered.
|
|
IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle).
|
|
IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle).
|
|
@@ -462,14 +487,16 @@ namespace ImGui
|
|
IMGUI_API ImGuiContext* GetCurrentContext();
|
|
IMGUI_API ImGuiContext* GetCurrentContext();
|
|
IMGUI_API void SetCurrentContext(ImGuiContext* ctx);
|
|
IMGUI_API void SetCurrentContext(ImGuiContext* ctx);
|
|
|
|
|
|
- // Obsolete (will be removed)
|
|
|
|
|
|
+ // Obsolete functions (Will be removed! Also see 'API BREAKING CHANGES' section in imgui.cpp)
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
|
|
|
+ static inline bool IsItemHoveredRect() { return IsItemRectHovered(); } // OBSOLETE 1.51+
|
|
|
|
+ static inline bool IsPosHoveringAnyWindow(const ImVec2&) { IM_ASSERT(0); return false; } // OBSOLETE 1.51+. This was partly broken. You probably wanted to use ImGui::GetIO().WantCaptureMouse instead.
|
|
|
|
+ static inline bool IsMouseHoveringAnyWindow() { return IsAnyWindowHovered(); } // OBSOLETE 1.51+
|
|
|
|
+ static inline bool IsMouseHoveringWindow() { return IsWindowRectHovered(); } // OBSOLETE 1.51+
|
|
static inline bool CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1<<5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+
|
|
static inline bool CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1<<5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+
|
|
static inline ImFont* GetWindowFont() { return GetFont(); } // OBSOLETE 1.48+
|
|
static inline ImFont* GetWindowFont() { return GetFont(); } // OBSOLETE 1.48+
|
|
static inline float GetWindowFontSize() { return GetFontSize(); } // OBSOLETE 1.48+
|
|
static inline float GetWindowFontSize() { return GetFontSize(); } // OBSOLETE 1.48+
|
|
static inline void SetScrollPosHere() { SetScrollHere(); } // OBSOLETE 1.42+
|
|
static inline void SetScrollPosHere() { SetScrollHere(); } // OBSOLETE 1.42+
|
|
- static inline bool GetWindowCollapsed() { return ImGui::IsWindowCollapsed(); } // OBSOLETE 1.39+
|
|
|
|
- static inline bool IsRectClipped(const ImVec2& size) { return !IsRectVisible(size); } // OBSOLETE 1.39+
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
} // namespace ImGui
|
|
} // namespace ImGui
|
|
@@ -496,9 +523,7 @@ enum ImGuiWindowFlags_
|
|
ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
|
|
ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
|
|
ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
|
|
ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
|
|
// [Internal]
|
|
// [Internal]
|
|
- ImGuiWindowFlags_ChildWindow = 1 << 20, // Don't use! For internal use by BeginChild()
|
|
|
|
- ImGuiWindowFlags_ChildWindowAutoFitX = 1 << 21, // Don't use! For internal use by BeginChild()
|
|
|
|
- ImGuiWindowFlags_ChildWindowAutoFitY = 1 << 22, // Don't use! For internal use by BeginChild()
|
|
|
|
|
|
+ ImGuiWindowFlags_ChildWindow = 1 << 22, // Don't use! For internal use by BeginChild()
|
|
ImGuiWindowFlags_ComboBox = 1 << 23, // Don't use! For internal use by ComboBox()
|
|
ImGuiWindowFlags_ComboBox = 1 << 23, // Don't use! For internal use by ComboBox()
|
|
ImGuiWindowFlags_Tooltip = 1 << 24, // Don't use! For internal use by BeginTooltip()
|
|
ImGuiWindowFlags_Tooltip = 1 << 24, // Don't use! For internal use by BeginTooltip()
|
|
ImGuiWindowFlags_Popup = 1 << 25, // Don't use! For internal use by BeginPopup()
|
|
ImGuiWindowFlags_Popup = 1 << 25, // Don't use! For internal use by BeginPopup()
|
|
@@ -521,7 +546,7 @@ enum ImGuiInputTextFlags_
|
|
ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer.
|
|
ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer.
|
|
ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character.
|
|
ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character.
|
|
ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field
|
|
ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field
|
|
- ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, allow exiting edition by pressing Enter. Ctrl+Enter to add new line (by default adds new lines with Enter).
|
|
|
|
|
|
+ ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter).
|
|
ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally
|
|
ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally
|
|
ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, // Insert mode
|
|
ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, // Insert mode
|
|
ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode
|
|
ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode
|
|
@@ -596,8 +621,8 @@ enum ImGuiCol_
|
|
ImGuiCol_FrameBgHovered,
|
|
ImGuiCol_FrameBgHovered,
|
|
ImGuiCol_FrameBgActive,
|
|
ImGuiCol_FrameBgActive,
|
|
ImGuiCol_TitleBg,
|
|
ImGuiCol_TitleBg,
|
|
- ImGuiCol_TitleBgCollapsed,
|
|
|
|
ImGuiCol_TitleBgActive,
|
|
ImGuiCol_TitleBgActive,
|
|
|
|
+ ImGuiCol_TitleBgCollapsed,
|
|
ImGuiCol_MenuBarBg,
|
|
ImGuiCol_MenuBarBg,
|
|
ImGuiCol_ScrollbarBg,
|
|
ImGuiCol_ScrollbarBg,
|
|
ImGuiCol_ScrollbarGrab,
|
|
ImGuiCol_ScrollbarGrab,
|
|
@@ -613,9 +638,9 @@ enum ImGuiCol_
|
|
ImGuiCol_Header,
|
|
ImGuiCol_Header,
|
|
ImGuiCol_HeaderHovered,
|
|
ImGuiCol_HeaderHovered,
|
|
ImGuiCol_HeaderActive,
|
|
ImGuiCol_HeaderActive,
|
|
- ImGuiCol_Column,
|
|
|
|
- ImGuiCol_ColumnHovered,
|
|
|
|
- ImGuiCol_ColumnActive,
|
|
|
|
|
|
+ ImGuiCol_Separator,
|
|
|
|
+ ImGuiCol_SeparatorHovered,
|
|
|
|
+ ImGuiCol_SeparatorActive,
|
|
ImGuiCol_ResizeGrip,
|
|
ImGuiCol_ResizeGrip,
|
|
ImGuiCol_ResizeGripHovered,
|
|
ImGuiCol_ResizeGripHovered,
|
|
ImGuiCol_ResizeGripActive,
|
|
ImGuiCol_ResizeGripActive,
|
|
@@ -629,36 +654,62 @@ enum ImGuiCol_
|
|
ImGuiCol_TextSelectedBg,
|
|
ImGuiCol_TextSelectedBg,
|
|
ImGuiCol_ModalWindowDarkening, // darken entire screen when a modal window is active
|
|
ImGuiCol_ModalWindowDarkening, // darken entire screen when a modal window is active
|
|
ImGuiCol_COUNT
|
|
ImGuiCol_COUNT
|
|
|
|
+
|
|
|
|
+ // Obsolete names (will be removed)
|
|
|
|
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
|
|
|
+ , ImGuiCol_Column = ImGuiCol_Separator, ImGuiCol_ColumnHovered = ImGuiCol_SeparatorHovered, ImGuiCol_ColumnActive = ImGuiCol_SeparatorActive
|
|
|
|
+#endif
|
|
};
|
|
};
|
|
|
|
|
|
-// Enumeration for PushStyleVar() / PopStyleVar()
|
|
|
|
-// NB: the enum only refers to fields of ImGuiStyle() which makes sense to be pushed/poped in UI code. Feel free to add others.
|
|
|
|
|
|
+// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure.
|
|
|
|
+// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/poped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly.
|
|
|
|
+// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type.
|
|
enum ImGuiStyleVar_
|
|
enum ImGuiStyleVar_
|
|
{
|
|
{
|
|
- ImGuiStyleVar_Alpha, // float
|
|
|
|
- ImGuiStyleVar_WindowPadding, // ImVec2
|
|
|
|
- ImGuiStyleVar_WindowRounding, // float
|
|
|
|
- ImGuiStyleVar_WindowMinSize, // ImVec2
|
|
|
|
- ImGuiStyleVar_ChildWindowRounding, // float
|
|
|
|
- ImGuiStyleVar_FramePadding, // ImVec2
|
|
|
|
- ImGuiStyleVar_FrameRounding, // float
|
|
|
|
- ImGuiStyleVar_ItemSpacing, // ImVec2
|
|
|
|
- ImGuiStyleVar_ItemInnerSpacing, // ImVec2
|
|
|
|
- ImGuiStyleVar_IndentSpacing, // float
|
|
|
|
- ImGuiStyleVar_GrabMinSize, // float
|
|
|
|
- ImGuiStyleVar_ButtonTextAlign, // flags ImGuiAlign_*
|
|
|
|
|
|
+ // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions)
|
|
|
|
+ ImGuiStyleVar_Alpha, // float Alpha
|
|
|
|
+ ImGuiStyleVar_WindowPadding, // ImVec2 WindowPadding
|
|
|
|
+ ImGuiStyleVar_WindowRounding, // float WindowRounding
|
|
|
|
+ ImGuiStyleVar_WindowMinSize, // ImVec2 WindowMinSize
|
|
|
|
+ ImGuiStyleVar_ChildWindowRounding, // float ChildWindowRounding
|
|
|
|
+ ImGuiStyleVar_FramePadding, // ImVec2 FramePadding
|
|
|
|
+ ImGuiStyleVar_FrameRounding, // float FrameRounding
|
|
|
|
+ ImGuiStyleVar_ItemSpacing, // ImVec2 ItemSpacing
|
|
|
|
+ ImGuiStyleVar_ItemInnerSpacing, // ImVec2 ItemInnerSpacing
|
|
|
|
+ ImGuiStyleVar_IndentSpacing, // float IndentSpacing
|
|
|
|
+ ImGuiStyleVar_GrabMinSize, // float GrabMinSize
|
|
|
|
+ ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign
|
|
ImGuiStyleVar_Count_
|
|
ImGuiStyleVar_Count_
|
|
};
|
|
};
|
|
|
|
|
|
-// Enumeration for ColorEditMode()
|
|
|
|
-// FIXME-OBSOLETE: Will be replaced by future color/picker api
|
|
|
|
-enum ImGuiColorEditMode_
|
|
|
|
|
|
+// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton()
|
|
|
|
+enum ImGuiColorEditFlags_
|
|
{
|
|
{
|
|
- ImGuiColorEditMode_UserSelect = -2,
|
|
|
|
- ImGuiColorEditMode_UserSelectShowButton = -1,
|
|
|
|
- ImGuiColorEditMode_RGB = 0,
|
|
|
|
- ImGuiColorEditMode_HSV = 1,
|
|
|
|
- ImGuiColorEditMode_HEX = 2
|
|
|
|
|
|
+ ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer).
|
|
|
|
+ ImGuiColorEditFlags_NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square.
|
|
|
|
+ ImGuiColorEditFlags_NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview.
|
|
|
|
+ ImGuiColorEditFlags_NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs)
|
|
|
|
+ ImGuiColorEditFlags_NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square).
|
|
|
|
+ ImGuiColorEditFlags_NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview.
|
|
|
|
+ ImGuiColorEditFlags_NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker).
|
|
|
|
+ ImGuiColorEditFlags_NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead.
|
|
|
|
+ // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup.
|
|
|
|
+ ImGuiColorEditFlags_AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker.
|
|
|
|
+ ImGuiColorEditFlags_AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque.
|
|
|
|
+ ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque.
|
|
|
|
+ ImGuiColorEditFlags_HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well).
|
|
|
|
+ ImGuiColorEditFlags_RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX.
|
|
|
|
+ ImGuiColorEditFlags_HSV = 1 << 14, // [Inputs] // "
|
|
|
|
+ ImGuiColorEditFlags_HEX = 1 << 15, // [Inputs] // "
|
|
|
|
+ ImGuiColorEditFlags_Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255.
|
|
|
|
+ ImGuiColorEditFlags_Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers.
|
|
|
|
+ ImGuiColorEditFlags_PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value.
|
|
|
|
+ ImGuiColorEditFlags_PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value.
|
|
|
|
+ // Internals/Masks
|
|
|
|
+ ImGuiColorEditFlags__InputsMask = ImGuiColorEditFlags_RGB|ImGuiColorEditFlags_HSV|ImGuiColorEditFlags_HEX,
|
|
|
|
+ ImGuiColorEditFlags__DataTypeMask = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_Float,
|
|
|
|
+ ImGuiColorEditFlags__PickerMask = ImGuiColorEditFlags_PickerHueWheel|ImGuiColorEditFlags_PickerHueBar,
|
|
|
|
+ ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_RGB|ImGuiColorEditFlags_PickerHueBar // Change application default using SetColorEditOptions()
|
|
};
|
|
};
|
|
|
|
|
|
// Enumeration for GetMouseCursor()
|
|
// Enumeration for GetMouseCursor()
|
|
@@ -676,13 +727,18 @@ enum ImGuiMouseCursor_
|
|
};
|
|
};
|
|
|
|
|
|
// Condition flags for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions
|
|
// Condition flags for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions
|
|
-// All those functions treat 0 as a shortcut to ImGuiSetCond_Always
|
|
|
|
-enum ImGuiSetCond_
|
|
|
|
|
|
+// All those functions treat 0 as a shortcut to ImGuiCond_Always
|
|
|
|
+enum ImGuiCond_
|
|
{
|
|
{
|
|
- ImGuiSetCond_Always = 1 << 0, // Set the variable
|
|
|
|
- ImGuiSetCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed)
|
|
|
|
- ImGuiSetCond_FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file)
|
|
|
|
- ImGuiSetCond_Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time)
|
|
|
|
|
|
+ ImGuiCond_Always = 1 << 0, // Set the variable
|
|
|
|
+ ImGuiCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed)
|
|
|
|
+ ImGuiCond_FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file)
|
|
|
|
+ ImGuiCond_Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time)
|
|
|
|
+
|
|
|
|
+ // Obsolete names (will be removed)
|
|
|
|
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
|
|
|
+ , ImGuiSetCond_Always = ImGuiCond_Always, ImGuiSetCond_Once = ImGuiCond_Once, ImGuiSetCond_FirstUseEver = ImGuiCond_FirstUseEver, ImGuiSetCond_Appearing = ImGuiCond_Appearing
|
|
|
|
+#endif
|
|
};
|
|
};
|
|
|
|
|
|
struct ImGuiStyle
|
|
struct ImGuiStyle
|
|
@@ -733,7 +789,7 @@ struct ImGuiIO
|
|
float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging
|
|
float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging
|
|
int KeyMap[ImGuiKey_COUNT]; // <unset> // Map of indices into the KeysDown[512] entries array
|
|
int KeyMap[ImGuiKey_COUNT]; // <unset> // Map of indices into the KeysDown[512] entries array
|
|
float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
|
|
float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
|
|
- float KeyRepeatRate; // = 0.020f // When holding a key/button, rate at which it repeats, in seconds.
|
|
|
|
|
|
+ float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds.
|
|
void* UserData; // = NULL // Store your own data for retrieval by callbacks.
|
|
void* UserData; // = NULL // Store your own data for retrieval by callbacks.
|
|
|
|
|
|
ImFontAtlas* Fonts; // <auto> // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array.
|
|
ImFontAtlas* Fonts; // <auto> // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array.
|
|
@@ -748,7 +804,7 @@ struct ImGuiIO
|
|
bool OSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl
|
|
bool OSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
//------------------------------------------------------------------
|
|
- // User Functions
|
|
|
|
|
|
+ // Settings (User Functions)
|
|
//------------------------------------------------------------------
|
|
//------------------------------------------------------------------
|
|
|
|
|
|
// Rendering function, will be called in Render().
|
|
// Rendering function, will be called in Render().
|
|
@@ -776,7 +832,7 @@ struct ImGuiIO
|
|
// Input - Fill before calling NewFrame()
|
|
// Input - Fill before calling NewFrame()
|
|
//------------------------------------------------------------------
|
|
//------------------------------------------------------------------
|
|
|
|
|
|
- ImVec2 MousePos; // Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.)
|
|
|
|
|
|
+ ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.)
|
|
bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
|
|
bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
|
|
float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text.
|
|
float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text.
|
|
bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor).
|
|
bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor).
|
|
@@ -799,6 +855,7 @@ struct ImGuiIO
|
|
bool WantCaptureMouse; // Mouse is hovering a window or widget is active (= ImGui will use your mouse input). Use to hide mouse from the rest of your application
|
|
bool WantCaptureMouse; // Mouse is hovering a window or widget is active (= ImGui will use your mouse input). Use to hide mouse from the rest of your application
|
|
bool WantCaptureKeyboard; // Widget is active (= ImGui will use your keyboard input). Use to hide keyboard from the rest of your application
|
|
bool WantCaptureKeyboard; // Widget is active (= ImGui will use your keyboard input). Use to hide keyboard from the rest of your application
|
|
bool WantTextInput; // Some text input widget is active, which will read input characters from the InputCharacters array. Use to activate on screen keyboard if your system needs one
|
|
bool WantTextInput; // Some text input widget is active, which will read input characters from the InputCharacters array. Use to activate on screen keyboard if your system needs one
|
|
|
|
+ bool WantMoveMouse; // [BETA-NAV] MousePos has been altered. back-end should reposition mouse on next frame. used only if 'NavMovesMouse=true'.
|
|
float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames
|
|
float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames
|
|
int MetricsAllocs; // Number of active memory allocations
|
|
int MetricsAllocs; // Number of active memory allocations
|
|
int MetricsRenderVertices; // Vertices output during last call to Render()
|
|
int MetricsRenderVertices; // Vertices output during last call to Render()
|
|
@@ -865,15 +922,16 @@ public:
|
|
inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size-1]; }
|
|
inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size-1]; }
|
|
inline void swap(ImVector<T>& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
|
|
inline void swap(ImVector<T>& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
|
|
|
|
|
|
- inline int _grow_capacity(int new_size) { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > new_size ? new_capacity : new_size; }
|
|
|
|
|
|
+ inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; }
|
|
|
|
|
|
inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
|
|
inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
|
|
|
|
+ inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; }
|
|
inline void reserve(int new_capacity)
|
|
inline void reserve(int new_capacity)
|
|
{
|
|
{
|
|
if (new_capacity <= Capacity) return;
|
|
if (new_capacity <= Capacity) return;
|
|
- T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(value_type));
|
|
|
|
|
|
+ T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T));
|
|
if (Data)
|
|
if (Data)
|
|
- memcpy(new_data, Data, (size_t)Size * sizeof(value_type));
|
|
|
|
|
|
+ memcpy(new_data, Data, (size_t)Size * sizeof(T));
|
|
ImGui::MemFree(Data);
|
|
ImGui::MemFree(Data);
|
|
Data = new_data;
|
|
Data = new_data;
|
|
Capacity = new_capacity;
|
|
Capacity = new_capacity;
|
|
@@ -886,15 +944,11 @@ public:
|
|
inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(Capacity ? Capacity * 2 : 4); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; }
|
|
inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(Capacity ? Capacity * 2 : 4); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; }
|
|
};
|
|
};
|
|
|
|
|
|
-// Helper: execute a block of code at maximum once a frame
|
|
|
|
-// Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame.
|
|
|
|
|
|
+// Helper: execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame.
|
|
// Usage:
|
|
// Usage:
|
|
-// IMGUI_ONCE_UPON_A_FRAME
|
|
|
|
-// {
|
|
|
|
-// // code block will be executed one per frame
|
|
|
|
-// }
|
|
|
|
-// Attention! the macro expands into 2 statement so make sure you don't use it within e.g. an if() statement without curly braces.
|
|
|
|
-#define IMGUI_ONCE_UPON_A_FRAME static ImGuiOnceUponAFrame imgui_oaf##__LINE__; if (imgui_oaf##__LINE__)
|
|
|
|
|
|
+// static ImGuiOnceUponAFrame oaf;
|
|
|
|
+// if (oaf)
|
|
|
|
+// ImGui::Text("This will be called only once per frame");
|
|
struct ImGuiOnceUponAFrame
|
|
struct ImGuiOnceUponAFrame
|
|
{
|
|
{
|
|
ImGuiOnceUponAFrame() { RefFrame = -1; }
|
|
ImGuiOnceUponAFrame() { RefFrame = -1; }
|
|
@@ -902,6 +956,11 @@ struct ImGuiOnceUponAFrame
|
|
operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; }
|
|
operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; }
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+// Helper macro for ImGuiOnceUponAFrame. Attention: The macro expands into 2 statement so make sure you don't use it within e.g. an if() statement without curly braces.
|
|
|
|
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS // Will obsolete
|
|
|
|
+#define IMGUI_ONCE_UPON_A_FRAME static ImGuiOnceUponAFrame imgui_oaf; if (imgui_oaf)
|
|
|
|
+#endif
|
|
|
|
+
|
|
// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
|
|
// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
|
|
struct ImGuiTextFilter
|
|
struct ImGuiTextFilter
|
|
{
|
|
{
|
|
@@ -925,11 +984,11 @@ struct ImGuiTextFilter
|
|
ImVector<TextRange> Filters;
|
|
ImVector<TextRange> Filters;
|
|
int CountGrep;
|
|
int CountGrep;
|
|
|
|
|
|
- ImGuiTextFilter(const char* default_filter = "");
|
|
|
|
- ~ImGuiTextFilter() {}
|
|
|
|
|
|
+ IMGUI_API ImGuiTextFilter(const char* default_filter = "");
|
|
|
|
+ ~ImGuiTextFilter() {}
|
|
void Clear() { InputBuf[0] = 0; Build(); }
|
|
void Clear() { InputBuf[0] = 0; Build(); }
|
|
- bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
|
|
|
|
- bool PassFilter(const char* text, const char* text_end = NULL) const;
|
|
|
|
|
|
+ IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
|
|
|
|
+ IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const;
|
|
bool IsActive() const { return !Filters.empty(); }
|
|
bool IsActive() const { return !Filters.empty(); }
|
|
IMGUI_API void Build();
|
|
IMGUI_API void Build();
|
|
};
|
|
};
|
|
@@ -947,17 +1006,17 @@ struct ImGuiTextBuffer
|
|
bool empty() { return Buf.Size <= 1; }
|
|
bool empty() { return Buf.Size <= 1; }
|
|
void clear() { Buf.clear(); Buf.push_back(0); }
|
|
void clear() { Buf.clear(); Buf.push_back(0); }
|
|
const char* c_str() const { return Buf.Data; }
|
|
const char* c_str() const { return Buf.Data; }
|
|
- IMGUI_API void append(const char* fmt, ...) IM_PRINTFARGS(2);
|
|
|
|
- IMGUI_API void appendv(const char* fmt, va_list args);
|
|
|
|
|
|
+ IMGUI_API void append(const char* fmt, ...) IM_FMTARGS(2);
|
|
|
|
+ IMGUI_API void appendv(const char* fmt, va_list args) IM_FMTLIST(2);
|
|
};
|
|
};
|
|
|
|
|
|
// Helper: Simple Key->value storage
|
|
// Helper: Simple Key->value storage
|
|
// Typically you don't have to worry about this since a storage is held within each Window.
|
|
// Typically you don't have to worry about this since a storage is held within each Window.
|
|
-// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options.
|
|
|
|
-// You can use it as custom user storage for temporary values.
|
|
|
|
-// Declare your own storage if:
|
|
|
|
|
|
+// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options.
|
|
|
|
+// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions)
|
|
|
|
+// You can use it as custom user storage for temporary values. Declare your own storage if, for example:
|
|
// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state).
|
|
// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state).
|
|
-// - You want to store custom debug data easily without adding or editing structures in your code.
|
|
|
|
|
|
+// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient)
|
|
// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types.
|
|
// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types.
|
|
struct ImGuiStorage
|
|
struct ImGuiStorage
|
|
{
|
|
{
|
|
@@ -1020,8 +1079,8 @@ struct ImGuiTextEditCallbackData
|
|
int SelectionEnd; // // Read-write
|
|
int SelectionEnd; // // Read-write
|
|
|
|
|
|
// NB: Helper functions for text manipulation. Calling those function loses selection.
|
|
// NB: Helper functions for text manipulation. Calling those function loses selection.
|
|
- void DeleteChars(int pos, int bytes_count);
|
|
|
|
- void InsertChars(int pos, const char* text, const char* text_end = NULL);
|
|
|
|
|
|
+ IMGUI_API void DeleteChars(int pos, int bytes_count);
|
|
|
|
+ IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL);
|
|
bool HasSelection() const { return SelectionStart != SelectionEnd; }
|
|
bool HasSelection() const { return SelectionStart != SelectionEnd; }
|
|
};
|
|
};
|
|
|
|
|
|
@@ -1030,8 +1089,8 @@ struct ImGuiTextEditCallbackData
|
|
struct ImGuiSizeConstraintCallbackData
|
|
struct ImGuiSizeConstraintCallbackData
|
|
{
|
|
{
|
|
void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints()
|
|
void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints()
|
|
- ImVec2 Pos; // Read-only. Window position, for reference.
|
|
|
|
- ImVec2 CurrentSize; // Read-only. Current window size.
|
|
|
|
|
|
+ ImVec2 Pos; // Read-only. Window position, for reference.
|
|
|
|
+ ImVec2 CurrentSize; // Read-only. Current window size.
|
|
ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing.
|
|
ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing.
|
|
};
|
|
};
|
|
|
|
|
|
@@ -1050,14 +1109,14 @@ struct ImGuiSizeConstraintCallbackData
|
|
#define IM_COL32_A_MASK 0xFF000000
|
|
#define IM_COL32_A_MASK 0xFF000000
|
|
#endif
|
|
#endif
|
|
#define IM_COL32(R,G,B,A) (((ImU32)(A)<<IM_COL32_A_SHIFT) | ((ImU32)(B)<<IM_COL32_B_SHIFT) | ((ImU32)(G)<<IM_COL32_G_SHIFT) | ((ImU32)(R)<<IM_COL32_R_SHIFT))
|
|
#define IM_COL32(R,G,B,A) (((ImU32)(A)<<IM_COL32_A_SHIFT) | ((ImU32)(B)<<IM_COL32_B_SHIFT) | ((ImU32)(G)<<IM_COL32_G_SHIFT) | ((ImU32)(R)<<IM_COL32_R_SHIFT))
|
|
-#define IM_COL32_WHITE IM_COL32(255,255,255,255) // Opaque white
|
|
|
|
|
|
+#define IM_COL32_WHITE IM_COL32(255,255,255,255) // Opaque white = 0xFFFFFFFF
|
|
#define IM_COL32_BLACK IM_COL32(0,0,0,255) // Opaque black
|
|
#define IM_COL32_BLACK IM_COL32(0,0,0,255) // Opaque black
|
|
-#define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0) // Transparent black
|
|
|
|
|
|
+#define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0) // Transparent black = 0x00000000
|
|
|
|
|
|
// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
|
|
// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
|
|
// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
|
|
// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
|
|
-// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class.
|
|
|
|
-// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats.
|
|
|
|
|
|
+// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE.
|
|
|
|
+// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed.
|
|
struct ImColor
|
|
struct ImColor
|
|
{
|
|
{
|
|
ImVec4 Value;
|
|
ImVec4 Value;
|
|
@@ -1070,8 +1129,8 @@ struct ImColor
|
|
inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); }
|
|
inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); }
|
|
inline operator ImVec4() const { return Value; }
|
|
inline operator ImVec4() const { return Value; }
|
|
|
|
|
|
|
|
+ // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers.
|
|
inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; }
|
|
inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; }
|
|
-
|
|
|
|
static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); }
|
|
static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); }
|
|
};
|
|
};
|
|
|
|
|
|
@@ -1145,6 +1204,7 @@ struct ImDrawVert
|
|
// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h
|
|
// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h
|
|
// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine.
|
|
// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine.
|
|
// The type has to be described within the macro (you can either declare the struct or use a typedef)
|
|
// The type has to be described within the macro (you can either declare the struct or use a typedef)
|
|
|
|
+// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM.
|
|
IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
|
|
IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -1161,11 +1221,12 @@ struct ImDrawChannel
|
|
// At the moment, each ImGui window contains its own ImDrawList but they could potentially be merged in the future.
|
|
// At the moment, each ImGui window contains its own ImDrawList but they could potentially be merged in the future.
|
|
// If you want to add custom rendering within a window, you can use ImGui::GetWindowDrawList() to access the current draw list and add your own primitives.
|
|
// If you want to add custom rendering within a window, you can use ImGui::GetWindowDrawList() to access the current draw list and add your own primitives.
|
|
// You can interleave normal ImGui:: calls and adding primitives to the current draw list.
|
|
// You can interleave normal ImGui:: calls and adding primitives to the current draw list.
|
|
-// All positions are in screen coordinates (0,0=top-left, 1 pixel per unit). Primitives are always added to the list and not culled (culling is done at render time and at a higher-level by ImGui:: functions).
|
|
|
|
|
|
+// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well)
|
|
|
|
+// Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions).
|
|
struct ImDrawList
|
|
struct ImDrawList
|
|
{
|
|
{
|
|
// This is what you have to render
|
|
// This is what you have to render
|
|
- ImVector<ImDrawCmd> CmdBuffer; // Commands. Typically 1 command = 1 gpu draw call.
|
|
|
|
|
|
+ ImVector<ImDrawCmd> CmdBuffer; // Commands. Typically 1 command = 1 GPU draw call.
|
|
ImVector<ImDrawIdx> IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those
|
|
ImVector<ImDrawIdx> IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those
|
|
ImVector<ImDrawVert> VtxBuffer; // Vertex buffer.
|
|
ImVector<ImDrawVert> VtxBuffer; // Vertex buffer.
|
|
|
|
|
|
@@ -1188,6 +1249,8 @@ struct ImDrawList
|
|
IMGUI_API void PopClipRect();
|
|
IMGUI_API void PopClipRect();
|
|
IMGUI_API void PushTextureID(const ImTextureID& texture_id);
|
|
IMGUI_API void PushTextureID(const ImTextureID& texture_id);
|
|
IMGUI_API void PopTextureID();
|
|
IMGUI_API void PopTextureID();
|
|
|
|
+ inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); }
|
|
|
|
+ inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); }
|
|
|
|
|
|
// Primitives
|
|
// Primitives
|
|
IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f);
|
|
IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f);
|
|
@@ -1202,7 +1265,8 @@ struct ImDrawList
|
|
IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
|
|
IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
|
|
IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
|
|
IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
|
|
IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL);
|
|
IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL);
|
|
- IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), ImU32 col = 0xFFFFFFFF);
|
|
|
|
|
|
+ IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF);
|
|
|
|
+ IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF);
|
|
IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness, bool anti_aliased);
|
|
IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness, bool anti_aliased);
|
|
IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col, bool anti_aliased);
|
|
IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col, bool anti_aliased);
|
|
IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0);
|
|
IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0);
|
|
@@ -1211,7 +1275,7 @@ struct ImDrawList
|
|
inline void PathClear() { _Path.resize(0); }
|
|
inline void PathClear() { _Path.resize(0); }
|
|
inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); }
|
|
inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); }
|
|
inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); }
|
|
inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); }
|
|
- inline void PathFill(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col, true); PathClear(); }
|
|
|
|
|
|
+ inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col, true); PathClear(); }
|
|
inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness, true); PathClear(); }
|
|
inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness, true); PathClear(); }
|
|
IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10);
|
|
IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10);
|
|
IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
|
|
IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
|
|
@@ -1255,40 +1319,41 @@ struct ImDrawData
|
|
|
|
|
|
// Functions
|
|
// Functions
|
|
ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; }
|
|
ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; }
|
|
- IMGUI_API void DeIndexAllBuffers(); // For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
|
|
|
|
|
|
+ IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
|
|
IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
|
|
IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
|
|
};
|
|
};
|
|
|
|
|
|
struct ImFontConfig
|
|
struct ImFontConfig
|
|
{
|
|
{
|
|
- void* FontData; // // TTF data
|
|
|
|
- int FontDataSize; // // TTF data size
|
|
|
|
- bool FontDataOwnedByAtlas; // true // TTF data ownership taken by the container ImFontAtlas (will delete memory itself). Set to true
|
|
|
|
- int FontNo; // 0 // Index of font within TTF file
|
|
|
|
- float SizePixels; // // Size in pixels for rasterizer
|
|
|
|
|
|
+ void* FontData; // // TTF/OTF data
|
|
|
|
+ int FontDataSize; // // TTF/OTF data size
|
|
|
|
+ bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
|
|
|
|
+ int FontNo; // 0 // Index of font within TTF/OTF file
|
|
|
|
+ float SizePixels; // // Size in pixels for rasterizer.
|
|
int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
|
|
int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
|
|
bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
|
|
bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
|
|
- ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs
|
|
|
|
- const ImWchar* GlyphRanges; // // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE.
|
|
|
|
- bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs).
|
|
|
|
- bool MergeGlyphCenterV; // false // When merging (multiple ImFontInput for one ImFont), vertically center new glyphs instead of aligning their baseline
|
|
|
|
|
|
+ ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
|
|
|
|
+ ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input.
|
|
|
|
+ const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE.
|
|
|
|
+ bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights.
|
|
|
|
+ unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one.
|
|
|
|
+ float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable.
|
|
|
|
|
|
// [Internal]
|
|
// [Internal]
|
|
- char Name[32]; // Name (strictly for debugging)
|
|
|
|
|
|
+ char Name[32]; // Name (strictly to ease debugging)
|
|
ImFont* DstFont;
|
|
ImFont* DstFont;
|
|
|
|
|
|
IMGUI_API ImFontConfig();
|
|
IMGUI_API ImFontConfig();
|
|
};
|
|
};
|
|
|
|
|
|
-// Load and rasterize multiple TTF fonts into a same texture.
|
|
|
|
|
|
+// Load and rasterize multiple TTF/OTF fonts into a same texture.
|
|
// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering.
|
|
// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering.
|
|
// We also add custom graphic data into the texture that serves for ImGui.
|
|
// We also add custom graphic data into the texture that serves for ImGui.
|
|
// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you.
|
|
// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you.
|
|
// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data.
|
|
// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data.
|
|
// 3. Upload the pixels data into a texture within your graphics system.
|
|
// 3. Upload the pixels data into a texture within your graphics system.
|
|
// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture.
|
|
// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture.
|
|
-// 5. Call ClearTexData() to free textures memory on the heap.
|
|
|
|
-// NB: If you use a 'glyph_ranges' array you need to make sure that your array persist up until the ImFont is cleared. We only copy the pointer, not the data.
|
|
|
|
|
|
+// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data.
|
|
struct ImFontAtlas
|
|
struct ImFontAtlas
|
|
{
|
|
{
|
|
IMGUI_API ImFontAtlas();
|
|
IMGUI_API ImFontAtlas();
|
|
@@ -1296,9 +1361,9 @@ struct ImFontAtlas
|
|
IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg);
|
|
IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg);
|
|
IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL);
|
|
IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL);
|
|
IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
|
|
IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
|
|
- IMGUI_API ImFont* AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Transfer ownership of 'ttf_data' to ImFontAtlas, will be deleted after Build()
|
|
|
|
- IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_ttf_data' still owned by caller. Compress with binary_to_compressed_c.cpp
|
|
|
|
- IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_ttf_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 paramaeter
|
|
|
|
|
|
+ IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Transfer ownership of 'ttf_data' to ImFontAtlas, will be deleted after Build()
|
|
|
|
+ IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp
|
|
|
|
+ IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 paramaeter
|
|
IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory.
|
|
IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory.
|
|
IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges)
|
|
IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges)
|
|
IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates)
|
|
IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates)
|
|
@@ -1311,10 +1376,10 @@ struct ImFontAtlas
|
|
// Pitch = Width * BytesPerPixels
|
|
// Pitch = Width * BytesPerPixels
|
|
IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel
|
|
IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel
|
|
IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel
|
|
IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel
|
|
- void SetTexID(void* id) { TexID = id; }
|
|
|
|
|
|
+ void SetTexID(ImTextureID id) { TexID = id; }
|
|
|
|
|
|
// Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list)
|
|
// Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list)
|
|
- // NB: Make sure that your string are UTF-8 and NOT in your local code page. See FAQ for details.
|
|
|
|
|
|
+ // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details.
|
|
IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin
|
|
IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin
|
|
IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters
|
|
IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters
|
|
IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs
|
|
IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs
|
|
@@ -1322,21 +1387,47 @@ struct ImFontAtlas
|
|
IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters
|
|
IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters
|
|
IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters
|
|
IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters
|
|
|
|
|
|
|
|
+ // Helpers to build glyph ranges from text data. Feed all your application strings/characters to it then call BuildRanges().
|
|
|
|
+ struct GlyphRangesBuilder
|
|
|
|
+ {
|
|
|
|
+ ImVector<unsigned char> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
|
|
|
|
+ GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); }
|
|
|
|
+ bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; }
|
|
|
|
+ void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array
|
|
|
|
+ void AddChar(ImWchar c) { SetBit(c); } // Add character
|
|
|
|
+ IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
|
|
|
|
+ IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext
|
|
|
|
+ IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
|
|
|
|
+ };
|
|
|
|
+
|
|
// Members
|
|
// Members
|
|
// (Access texture data via GetTexData*() calls which will setup a default font for you.)
|
|
// (Access texture data via GetTexData*() calls which will setup a default font for you.)
|
|
- void* TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It ia passed back to you during rendering.
|
|
|
|
|
|
+ ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure.
|
|
unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
|
|
unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
|
|
unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
|
|
unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
|
|
int TexWidth; // Texture width calculated during Build().
|
|
int TexWidth; // Texture width calculated during Build().
|
|
int TexHeight; // Texture height calculated during Build().
|
|
int TexHeight; // Texture height calculated during Build().
|
|
int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
|
|
int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
|
|
|
|
+ int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1.
|
|
ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel
|
|
ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel
|
|
ImVector<ImFont*> Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
|
|
ImVector<ImFont*> Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
|
|
|
|
|
|
- // Private
|
|
|
|
|
|
+ // [Private] User rectangle for packing custom texture data into the atlas.
|
|
|
|
+ struct CustomRect
|
|
|
|
+ {
|
|
|
|
+ unsigned int ID; // Input // User ID. <0x10000 for font mapped data (WIP/UNSUPPORTED), >=0x10000 for other texture data
|
|
|
|
+ unsigned short Width, Height; // Input // Desired rectangle dimension
|
|
|
|
+ unsigned short X, Y; // Output // Packed position in Atlas
|
|
|
|
+ CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; }
|
|
|
|
+ bool IsPacked() const { return X != 0xFFFF; }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ // [Private] Members
|
|
|
|
+ ImVector<CustomRect> CustomRects; // Rectangles for packing custom texture data into the atlas.
|
|
ImVector<ImFontConfig> ConfigData; // Internal data
|
|
ImVector<ImFontConfig> ConfigData; // Internal data
|
|
IMGUI_API bool Build(); // Build pixels data. This is automatically for you by the GetTexData*** functions.
|
|
IMGUI_API bool Build(); // Build pixels data. This is automatically for you by the GetTexData*** functions.
|
|
- IMGUI_API void RenderCustomTexData(int pass, void* rects);
|
|
|
|
|
|
+ IMGUI_API int CustomRectRegister(unsigned int id, int width, int height);
|
|
|
|
+ IMGUI_API void CustomRectCalcUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max);
|
|
};
|
|
};
|
|
|
|
|
|
// Font runtime data and rendering
|
|
// Font runtime data and rendering
|
|
@@ -1367,6 +1458,7 @@ struct ImFont
|
|
ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData
|
|
ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData
|
|
ImFontAtlas* ContainerAtlas; // // What we has been loaded into
|
|
ImFontAtlas* ContainerAtlas; // // What we has been loaded into
|
|
float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
|
|
float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
|
|
|
|
+ int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
|
|
|
|
|
|
// Methods
|
|
// Methods
|
|
IMGUI_API ImFont();
|
|
IMGUI_API ImFont();
|