Compare commits

..

15 Commits
v1.14 ... v1.15

Author SHA1 Message Date
ee3355fe8e Version number 2014-11-07 17:43:00 +09:00
1e30400f80 Added PushStyleVar(),PopStyleVar() helpers.
BeginChild() allows to specify negative sizes to specify "use remaining minus xx".
Added a simple example console into the demo window.
2014-11-07 17:22:38 +09:00
3a64c77826 Renamed IsHovered() to IsItemHovered() 2014-11-07 15:49:14 +09:00
e19f0d370a Added dummy IMGUI_API definition in front of entry-points for silly DLL action 2014-11-07 15:40:58 +09:00
6c192f3221 Added GetContentRegionMax() supporting columns. Some bug fixes with using columns. 2014-11-07 15:17:04 +09:00
78645a7dba Added word-wrapping API TextWrapped(), PushTextWrapPos(), PopTextWrapPos()
Added word-wrapping sample in the test window.
Added IsItemFocused() to tell if last widget is being focused for keyboard input.
2014-11-07 14:45:56 +09:00
74363c5a43 Fixed column using a "funny scale factor" (non power of two) #67 2014-10-26 21:33:34 +00:00
0b10cf4bd7 Fixed some typos in comments 2014-10-26 21:31:34 +00:00
3d84858755 Made with the NoResize flag can still use auto-fitting. Added SetWindowSize(). 2014-10-26 20:07:15 +00:00
fad5e45d2c Minor tweaks 2014-10-26 19:56:57 +00:00
05a3a9b962 Merge pull request #66 from JarrettBillingsley/master
Added callback versions of PlotLines/PlotHistogram
2014-10-26 20:53:40 +01:00
85eee4a4c5 Added overloads of ImGui::PlotLines and ImGui::PlotHistogram which take a value getter function instead of raw value data, and changed the implementation of the original overloads to use this new implementation. 2014-10-26 12:25:00 -07:00
4c4798546e Merge pull request #1 from ocornut/master
GCC warning fix
2014-10-26 12:22:27 -07:00
f768579377 GCC warning fix 2014-10-26 18:57:19 +00:00
e6eafd6fa8 Fixed warnings for GCC -Wpedantic 2014-10-26 15:08:28 +00:00
3 changed files with 902 additions and 380 deletions

View File

@ -39,6 +39,6 @@ namespace ImGui
{ {
void Value(const char* prefix, const MyVec2& v, const char* float_format = NULL); void Value(const char* prefix, const MyVec2& v, const char* float_format = NULL);
void Value(const char* prefix, const MyVec4& v, const char* float_format = NULL); void Value(const char* prefix, const MyVec4& v, const char* float_format = NULL);
}; }
*/ */

886
imgui.cpp

File diff suppressed because it is too large Load Diff

390
imgui.h
View File

@ -1,4 +1,4 @@
// ImGui library v1.14 // ImGui library v1.15
// See .cpp file for commentary. // See .cpp file for commentary.
// See ImGui::ShowTestWindow() for sample code. // See ImGui::ShowTestWindow() for sample code.
// Read 'Programmer guide' in .cpp for notes on how to setup ImGui in your codebase. // Read 'Programmer guide' in .cpp for notes on how to setup ImGui in your codebase.
@ -25,10 +25,15 @@ struct ImGuiWindow;
#define IM_ASSERT(_EXPR) assert(_EXPR) #define IM_ASSERT(_EXPR) assert(_EXPR)
#endif #endif
#ifndef IMGUI_API
#define IMGUI_API
#endif
typedef unsigned int ImU32; typedef unsigned int ImU32;
typedef unsigned short ImWchar; typedef unsigned short ImWchar;
typedef ImU32 ImGuiID; typedef ImU32 ImGuiID;
typedef int ImGuiCol; // enum ImGuiCol_ typedef int ImGuiCol; // enum ImGuiCol_
typedef int ImGuiStyleVar; // enum ImGuiStyleVar_
typedef int ImGuiKey; // enum ImGuiKey_ typedef int ImGuiKey; // enum ImGuiKey_
typedef int ImGuiColorEditMode; // enum ImGuiColorEditMode_ typedef int ImGuiColorEditMode; // enum ImGuiColorEditMode_
typedef int ImGuiWindowFlags; // enum ImGuiWindowFlags_ typedef int ImGuiWindowFlags; // enum ImGuiWindowFlags_
@ -60,10 +65,10 @@ struct ImVec4
namespace ImGui namespace ImGui
{ {
// Proxy functions to access the MemAllocFn/MemFreeFn/MemReallocFn pointers in ImGui::GetIO(). The only reason they exist here is to allow ImVector<> to compile inline. // Proxy functions to access the MemAllocFn/MemFreeFn/MemReallocFn pointers in ImGui::GetIO(). The only reason they exist here is to allow ImVector<> to compile inline.
void* MemAlloc(size_t sz); IMGUI_API void* MemAlloc(size_t sz);
void MemFree(void* ptr); IMGUI_API void MemFree(void* ptr);
void* MemRealloc(void* ptr, size_t sz); IMGUI_API void* MemRealloc(void* ptr, size_t sz);
}; }
// std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). // std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug).
// Use '#define ImVector std::vector' if you want to use the STL type or your own type. // Use '#define ImVector std::vector' if you want to use the STL type or your own type.
@ -129,157 +134,170 @@ public:
namespace ImGui namespace ImGui
{ {
// Main // Main
ImGuiIO& GetIO(); IMGUI_API ImGuiIO& GetIO();
ImGuiStyle& GetStyle(); IMGUI_API ImGuiStyle& GetStyle();
void NewFrame(); IMGUI_API void NewFrame();
void Render(); IMGUI_API void Render();
void Shutdown(); IMGUI_API void Shutdown();
void ShowUserGuide(); IMGUI_API void ShowUserGuide();
void ShowStyleEditor(ImGuiStyle* ref = NULL); IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL);
void ShowTestWindow(bool* open = NULL); IMGUI_API void ShowTestWindow(bool* open = NULL);
// Window // Window
bool Begin(const char* name = "Debug", bool* open = NULL, ImVec2 size = ImVec2(0,0), float fill_alpha = -1.0f, ImGuiWindowFlags flags = 0); // return false when window is collapsed, so you can early out in your code. IMGUI_API bool Begin(const char* name = "Debug", bool* open = NULL, ImVec2 size = ImVec2(0,0), float fill_alpha = -1.0f, ImGuiWindowFlags flags = 0); // return false when window is collapsed, so you can early out in your code.
void End(); IMGUI_API void End();
void BeginChild(const char* str_id, ImVec2 size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); IMGUI_API void BeginChild(const char* str_id, ImVec2 size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). on each axis.
void EndChild(); IMGUI_API void EndChild();
bool GetWindowIsFocused(); IMGUI_API bool GetWindowIsFocused();
ImVec2 GetWindowSize(); IMGUI_API ImVec2 GetWindowSize();
float GetWindowWidth(); IMGUI_API float GetWindowWidth();
ImVec2 GetWindowPos(); // you should rarely need/care about the window position, but it can be useful if you want to use your own drawing. IMGUI_API void SetWindowSize(const ImVec2& size); // set to ImVec2(0,0) to force an auto-fit
void SetWindowPos(const ImVec2& pos); // set current window pos. IMGUI_API ImVec2 GetWindowPos(); // you should rarely need/care about the window position, but it can be useful if you want to use your own drawing.
ImVec2 GetWindowContentRegionMin(); IMGUI_API void SetWindowPos(const ImVec2& pos); // set current window pos.
ImVec2 GetWindowContentRegionMax(); IMGUI_API ImVec2 GetContentRegionMax(); // window or current column boundaries
ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives. IMGUI_API ImVec2 GetWindowContentRegionMin(); // window boundaries
ImFont GetWindowFont(); IMGUI_API ImVec2 GetWindowContentRegionMax();
float GetWindowFontSize(); IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives.
void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontBaseScale if you want to scale all windows together. IMGUI_API ImFont GetWindowFont();
void SetScrollPosHere(); // adjust scrolling position to center into the current cursor position. IMGUI_API float GetWindowFontSize();
void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use 'offset' to access sub components of a multiple component widget. IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontBaseScale if you want to scale all windows together.
void SetTreeStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it). IMGUI_API void SetScrollPosHere(); // adjust scrolling position to center into the current cursor position.
ImGuiStorage* GetTreeStateStorage(); IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use 'offset' to access sub components of a multiple component widget.
void PushItemWidth(float item_width); IMGUI_API void SetTreeStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it).
void PopItemWidth(); IMGUI_API ImGuiStorage* GetTreeStateStorage();
float GetItemWidth();
void PushAllowKeyboardFocus(bool v); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets. IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case. default to ~2/3 of windows width.
void PopAllowKeyboardFocus(); IMGUI_API void PopItemWidth();
void PushStyleColor(ImGuiCol idx, const ImVec4& col); IMGUI_API float GetItemWidth();
void PopStyleColor(); 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 PopAllowKeyboardFocus();
IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col);
IMGUI_API void PopStyleColor();
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val);
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val);
IMGUI_API void PopStyleVar();
IMGUI_API void PushTextWrapPos(float wrap_pos_x); // 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();
// Tooltip // Tooltip
void SetTooltip(const char* fmt, ...); // set tooltip under mouse-cursor, typically use with ImGui::IsHovered(). last call wins. IMGUI_API void SetTooltip(const char* fmt, ...); // set tooltip under mouse-cursor, typically use with ImGui::IsHovered(). last call wins.
void SetTooltipV(const char* fmt, va_list args); IMGUI_API void SetTooltipV(const char* fmt, va_list args);
void BeginTooltip(); // use to create full-featured tooltip windows that aren't just text. IMGUI_API void BeginTooltip(); // use to create full-featured tooltip windows that aren't just text.
void EndTooltip(); IMGUI_API void EndTooltip();
// Layout // Layout
void Separator(); // horizontal line IMGUI_API void Separator(); // horizontal line
void SameLine(int column_x = 0, int spacing_w = -1); // call between widgets to layout them horizontally IMGUI_API void SameLine(int column_x = 0, int spacing_w = -1); // call between widgets to layout them horizontally
void Spacing(); IMGUI_API void Spacing();
void Columns(int count = 1, const char* id = NULL, bool border=true); // setup number of columns IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border=true); // setup number of columns
void NextColumn(); // next column IMGUI_API void NextColumn(); // next column
float GetColumnOffset(int column_index = -1); IMGUI_API float GetColumnOffset(int column_index = -1);
void SetColumnOffset(int column_index, float offset); IMGUI_API void SetColumnOffset(int column_index, float offset);
float GetColumnWidth(int column_index = -1); IMGUI_API float GetColumnWidth(int column_index = -1);
ImVec2 GetCursorPos(); // cursor position is relative to window position IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position
void SetCursorPos(const ImVec2& pos); // " IMGUI_API void SetCursorPos(const ImVec2& pos); // "
void SetCursorPosX(float x); // " IMGUI_API void SetCursorPosX(float x); // "
void SetCursorPosY(float y); // " IMGUI_API void SetCursorPosY(float y); // "
ImVec2 GetCursorScreenPos(); // cursor position in screen space IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in screen space
void AlignFirstTextHeightToWidgets(); // call once if the first item on the line is a Text() item and you want to vertically lower it to match subsequent (bigger) widgets. IMGUI_API void AlignFirstTextHeightToWidgets(); // call once if the first item on the line is a Text() item and you want to vertically lower it to match subsequent (bigger) widgets.
float GetTextLineSpacing(); IMGUI_API float GetTextLineSpacing();
float GetTextLineHeight(); IMGUI_API float GetTextLineHeight();
// ID scopes // ID scopes
void PushID(const char* str_id); IMGUI_API void PushID(const char* str_id);
void PushID(const void* ptr_id); IMGUI_API void PushID(const void* ptr_id);
void PushID(const int int_id); IMGUI_API void PushID(const int int_id);
void PopID(); IMGUI_API void PopID();
// Widgets // Widgets
void Text(const char* fmt, ...); IMGUI_API void Text(const char* fmt, ...);
void TextV(const char* fmt, va_list args); IMGUI_API void TextV(const char* fmt, va_list args);
void TextColored(const ImVec4& col, const char* fmt, ...); // shortcut to doing PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
void TextColoredV(const ImVec4& col, const char* fmt, va_list args); IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args);
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, better for long chunks of text. IMGUI_API void TextWrapped(const char* fmt, ...); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();
void LabelText(const char* label, const char* fmt, ...); IMGUI_API void TextWrappedV(const char* fmt, va_list args);
void LabelTextV(const char* label, 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.
void BulletText(const char* fmt, ...); IMGUI_API void LabelText(const char* label, const char* fmt, ...); // display text+label aligned the same way as value+label widgets
void BulletTextV(const char* fmt, va_list args); IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args);
bool Button(const char* label, ImVec2 size = ImVec2(0,0), bool repeat_when_held = false); IMGUI_API void BulletText(const char* fmt, ...);
bool SmallButton(const char* label); IMGUI_API void BulletTextV(const char* fmt, va_list args);
bool CollapsingHeader(const char* label, const char* str_id = NULL, const bool display_frame = true, const bool default_open = false); IMGUI_API bool Button(const char* label, ImVec2 size = ImVec2(0,0), bool repeat_when_held = false);
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 SmallButton(const char* label);
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 CollapsingHeader(const char* label, const char* str_id = NULL, const bool display_frame = true, const bool default_open = false);
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 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.
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 SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
bool SliderAngle(const char* label, float* v, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); // *v in radians 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);
bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.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);
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), size_t stride = sizeof(float)); IMGUI_API bool SliderAngle(const char* label, float* v, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); // *v in radians
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), size_t stride = sizeof(float)); IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f");
bool Checkbox(const char* label, bool* v); 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), size_t stride = sizeof(float));
bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); 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));
bool RadioButton(const char* label, bool active); 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), size_t stride = sizeof(float));
bool RadioButton(const char* label, int* v, int v_button); IMGUI_API void PlotHistogram(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));
bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0); IMGUI_API bool Checkbox(const char* label, bool* v);
bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value);
bool InputFloat2(const char* label, float v[2], int decimal_precision = -1); IMGUI_API bool RadioButton(const char* label, bool active);
bool InputFloat3(const char* label, float v[3], int decimal_precision = -1); IMGUI_API bool RadioButton(const char* label, int* v, int v_button);
bool InputFloat4(const char* label, float v[4], int decimal_precision = -1); IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0);
bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0);
bool Combo(const char* label, int* current_item, const char** items, int items_count, int popup_height_items = 7); IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1);
bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_height_items = 7); // Separate items with \0, end item-list with \0\0 IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1);
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 popup_height_items = 7); IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1);
bool ColorButton(const ImVec4& col, bool small_height = false, bool outline_border = true); IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0);
bool ColorEdit3(const char* label, float col[3]); IMGUI_API bool Combo(const char* label, int* current_item, const char** items, int items_count, int popup_height_items = 7);
bool ColorEdit4(const char* label, float col[4], bool show_alpha = true); IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_height_items = 7); // separate items with \0, end item-list with \0\0
void ColorEditMode(ImGuiColorEditMode mode); 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 popup_height_items = 7);
bool TreeNode(const char* str_label_id); // if returning 'true' the node is open and the user is responsible for calling TreePop IMGUI_API bool ColorButton(const ImVec4& col, bool small_height = false, bool outline_border = true);
bool TreeNode(const char* str_id, const char* fmt, ...); // " IMGUI_API bool ColorEdit3(const char* label, float col[3]);
bool TreeNode(const void* ptr_id, const char* fmt, ...); // " IMGUI_API bool ColorEdit4(const char* label, float col[4], bool show_alpha = true);
bool TreeNodeV(const char* str_id, const char* fmt, va_list args); // " IMGUI_API void ColorEditMode(ImGuiColorEditMode mode);
bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args); // " IMGUI_API bool TreeNode(const char* str_label_id); // if returning 'true' the node is open and the user is responsible for calling TreePop
void TreePush(const char* str_id = NULL); // already called by TreeNode(), but you can call Push/Pop yourself for layouting purpose IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...); // "
void TreePush(const void* ptr_id = NULL); // " IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...); // "
void TreePop(); IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args); // "
void OpenNextNode(bool open); // force open/close the next TreeNode or CollapsingHeader IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args); // "
IMGUI_API void TreePush(const char* str_id = NULL); // already called by TreeNode(), but you can call Push/Pop yourself for layouting purpose
IMGUI_API void TreePush(const void* ptr_id = NULL); // "
IMGUI_API void TreePop();
IMGUI_API void OpenNextNode(bool open); // force open/close the next TreeNode or CollapsingHeader
// Value helper output "name: value" // Value helper output "name: value"
// Freely declare your own in the ImGui namespace. // Freely declare your own in the ImGui namespace.
void Value(const char* prefix, bool b); IMGUI_API void Value(const char* prefix, bool b);
void Value(const char* prefix, int v); IMGUI_API void Value(const char* prefix, int v);
void Value(const char* prefix, unsigned int v); IMGUI_API void Value(const char* prefix, unsigned int v);
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);
void Color(const char* prefix, const ImVec4& v); IMGUI_API void Color(const char* prefix, const ImVec4& v);
void Color(const char* prefix, unsigned int v); IMGUI_API void Color(const char* prefix, unsigned int v);
// Logging // Logging
void LogButtons(); IMGUI_API void LogButtons();
void LogToTTY(int max_depth = -1); IMGUI_API void LogToTTY(int max_depth = -1);
void LogToFile(int max_depth = -1, const char* filename = NULL); IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL);
void LogToClipboard(int max_depth = -1); IMGUI_API void LogToClipboard(int max_depth = -1);
// Utilities // Utilities
void SetNewWindowDefaultPos(const ImVec2& pos); // set position of window that do IMGUI_API void SetNewWindowDefaultPos(const ImVec2& pos); // set position of window that do
bool IsHovered(); // was the last item active area hovered by mouse? IMGUI_API bool IsItemHovered(); // was the last item active area hovered by mouse?
ImVec2 GetItemBoxMin(); // get bounding box of last item IMGUI_API bool IsItemFocused(); // was the last item focused for keyboard input?
ImVec2 GetItemBoxMax(); // get bounding box of last item IMGUI_API ImVec2 GetItemBoxMin(); // get bounding box of last item
bool IsClipped(const ImVec2& item_size); // to perform coarse clipping on user's side (as an optimisation) IMGUI_API ImVec2 GetItemBoxMax(); // get bounding box of last item
bool IsKeyPressed(int key_index, bool repeat = true); // key_index into the keys_down[512] array, imgui doesn't know the semantic of each entry IMGUI_API bool IsClipped(const ImVec2& item_size); // to perform coarse clipping on user's side (as an optimization)
bool IsMouseClicked(int button, bool repeat = false); IMGUI_API bool IsKeyPressed(int key_index, bool repeat = true); // key_index into the keys_down[512] array, imgui doesn't know the semantic of each entry
bool IsMouseDoubleClicked(int button); IMGUI_API bool IsMouseClicked(int button, bool repeat = false);
bool IsMouseHoveringWindow(); // is mouse hovering current window ("window" in API names always refer to current window) IMGUI_API bool IsMouseDoubleClicked(int button);
bool IsMouseHoveringAnyWindow(); // is mouse hovering any active imgui window IMGUI_API bool IsMouseHoveringWindow(); // is mouse hovering current window ("window" in API names always refer to current window)
bool IsMouseHoveringBox(const ImVec2& box_min, const ImVec2& box_max); // is mouse hovering given bounding box IMGUI_API bool IsMouseHoveringAnyWindow(); // is mouse hovering any active imgui window
bool IsPosHoveringAnyWindow(const ImVec2& pos); // is given position hovering any active imgui window IMGUI_API bool IsMouseHoveringBox(const ImVec2& box_min, const ImVec2& box_max); // is mouse hovering given bounding box
ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls IMGUI_API bool IsPosHoveringAnyWindow(const ImVec2& pos); // is given position hovering any active imgui window
float GetTime(); IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
int GetFrameCount(); IMGUI_API float GetTime();
const char* GetStyleColorName(ImGuiCol idx); IMGUI_API int GetFrameCount();
void GetDefaultFontData(const void** fnt_data, unsigned int* fnt_size, const void** png_data, unsigned int* png_size); IMGUI_API const char* GetStyleColorName(ImGuiCol idx);
ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, const bool hide_text_after_hash = true); IMGUI_API void GetDefaultFontData(const void** fnt_data, unsigned int* fnt_size, const void** png_data, unsigned int* png_size);
IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_hash = true, float wrap_width = -1.0f);
}; // namespace ImGui } // namespace ImGui
// Flags for ImGui::Begin() // Flags for ImGui::Begin()
enum ImGuiWindowFlags_ enum ImGuiWindowFlags_
@ -331,6 +349,7 @@ enum ImGuiKey_
ImGuiKey_COUNT, ImGuiKey_COUNT,
}; };
// Enumeration for PushStyleColor() / PopStyleColor()
enum ImGuiCol_ enum ImGuiCol_
{ {
ImGuiCol_Text, ImGuiCol_Text,
@ -373,6 +392,19 @@ enum ImGuiCol_
ImGuiCol_COUNT, ImGuiCol_COUNT,
}; };
// 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.
enum ImGuiStyleVar_
{
ImGuiStyleVar_Alpha, // float
ImGuiStyleVar_WindowPadding, // ImVec2
ImGuiStyleVar_FramePadding, // ImVec2
ImGuiStyleVar_ItemSpacing, // ImVec2
ImGuiStyleVar_ItemInnerSpacing, // ImVec2
ImGuiStyleVar_TreeNodeSpacing, // float
ImGuiStyleVar_ColumnsMinSpacing, // float
};
enum ImGuiColorEditMode_ enum ImGuiColorEditMode_
{ {
ImGuiColorEditMode_UserSelect = -1, ImGuiColorEditMode_UserSelect = -1,
@ -398,7 +430,7 @@ struct ImGuiStyle
float ScrollBarWidth; // Width of the vertical scroll bar float ScrollBarWidth; // Width of the vertical scroll bar
ImVec4 Colors[ImGuiCol_COUNT]; ImVec4 Colors[ImGuiCol_COUNT];
ImGuiStyle(); IMGUI_API ImGuiStyle();
}; };
// This is where your app communicate with ImGui. Call ImGui::GetIO() to access. // This is where your app communicate with ImGui. Call ImGui::GetIO() to access.
@ -461,7 +493,7 @@ struct ImGuiIO
ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper.
// Function // Function
void AddInputCharacter(ImWchar); // Helper to add a new character into InputCharacters[] IMGUI_API void AddInputCharacter(ImWchar c); // Helper to add a new character into InputCharacters[]
//------------------------------------------------------------------ //------------------------------------------------------------------
// Output - Retrieve after calling NewFrame(), you can use them to discard inputs or hide them from the rest of your application // Output - Retrieve after calling NewFrame(), you can use them to discard inputs or hide them from the rest of your application
@ -483,7 +515,7 @@ struct ImGuiIO
float MouseDownTime[5]; float MouseDownTime[5];
float KeysDownTime[512]; float KeysDownTime[512];
ImGuiIO(); IMGUI_API ImGuiIO();
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -518,7 +550,7 @@ struct ImGuiTextFilter
char front() const { return *b; } char front() const { return *b; }
static bool isblank(char c) { return c == ' ' || c == '\t'; } static bool isblank(char c) { return c == ' ' || c == '\t'; }
void trim_blanks() { while (b < e && isblank(*b)) b++; while (e > b && isblank(*(e-1))) e--; } void trim_blanks() { while (b < e && isblank(*b)) b++; while (e > b && isblank(*(e-1))) e--; }
void split(char separator, ImVector<TextRange>& out); IMGUI_API void split(char separator, ImVector<TextRange>& out);
}; };
char InputBuf[256]; char InputBuf[256];
@ -530,7 +562,7 @@ struct ImGuiTextFilter
void Draw(const char* label = "Filter (inc,-exc)", float width = -1.0f); // Helper calling InputText+Build void Draw(const char* label = "Filter (inc,-exc)", float width = -1.0f); // Helper calling InputText+Build
bool PassFilter(const char* val) const; bool PassFilter(const char* val) const;
bool IsActive() const { return !Filters.empty(); } bool IsActive() const { return !Filters.empty(); }
void Build(); IMGUI_API void Build();
}; };
// Helper: Text buffer for logging/accumulating text // Helper: Text buffer for logging/accumulating text
@ -539,12 +571,13 @@ struct ImGuiTextBuffer
ImVector<char> Buf; ImVector<char> Buf;
ImGuiTextBuffer() { Buf.push_back(0); } ImGuiTextBuffer() { Buf.push_back(0); }
~ImGuiTextBuffer() { clear(); }
const char* begin() const { return Buf.begin(); } const char* begin() const { return Buf.begin(); }
const char* end() const { return Buf.end()-1; } const char* end() const { return Buf.end()-1; }
size_t size() const { return Buf.size()-1; } size_t size() const { return Buf.size()-1; }
bool empty() { return Buf.empty(); } bool empty() { return Buf.empty(); }
void clear() { Buf.clear(); Buf.push_back(0); } void clear() { Buf.clear(); Buf.push_back(0); }
void append(const char* fmt, ...); IMGUI_API void append(const char* fmt, ...);
}; };
// Helper: Key->value storage // Helper: Key->value storage
@ -557,13 +590,13 @@ struct ImGuiStorage
struct Pair { ImU32 key; int val; }; struct Pair { ImU32 key; int val; };
ImVector<Pair> Data; ImVector<Pair> Data;
void Clear(); IMGUI_API void Clear();
int GetInt(ImU32 key, int default_val = 0); IMGUI_API int GetInt(ImU32 key, int default_val = 0);
void SetInt(ImU32 key, int val); IMGUI_API void SetInt(ImU32 key, int val);
void SetAllInt(int val); IMGUI_API void SetAllInt(int val);
int* Find(ImU32 key); IMGUI_API int* Find(ImU32 key);
void Insert(ImU32 key, int val); IMGUI_API void Insert(ImU32 key, int val);
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -602,22 +635,22 @@ struct ImDrawList
ImDrawList() { Clear(); } ImDrawList() { Clear(); }
void Clear(); IMGUI_API void Clear();
void PushClipRect(const ImVec4& clip_rect); IMGUI_API void PushClipRect(const ImVec4& clip_rect);
void PopClipRect(); IMGUI_API void PopClipRect();
void ReserveVertices(unsigned int vtx_count); IMGUI_API void ReserveVertices(unsigned int vtx_count);
void AddVtx(const ImVec2& pos, ImU32 col); IMGUI_API void AddVtx(const ImVec2& pos, ImU32 col);
void AddVtxLine(const ImVec2& a, const ImVec2& b, ImU32 col); IMGUI_API void AddVtxLine(const ImVec2& a, const ImVec2& b, ImU32 col);
// Primitives // Primitives
void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col); IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col);
void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners=0x0F); IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners=0x0F);
void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners=0x0F); IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners=0x0F);
void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col);
void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
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);
void AddArc(const ImVec2& center, float rad, ImU32 col, int a_min, int a_max, bool tris=false, const ImVec2& third_point_offset = ImVec2(0,0)); IMGUI_API void AddArc(const ImVec2& center, float rad, ImU32 col, int a_min, int a_max, bool tris = false, const ImVec2& third_point_offset = ImVec2(0,0));
void AddText(ImFont font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end); IMGUI_API void AddText(ImFont font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end, float wrap_width = 0.0f);
}; };
// Optional bitmap font data loader & renderer into vertices // Optional bitmap font data loader & renderer into vertices
@ -686,18 +719,23 @@ struct ImBitmapFont
ImVector<const char*> Filenames; // (point into raw data) ImVector<const char*> Filenames; // (point into raw data)
ImVector<int> IndexLookup; // (built) ImVector<int> IndexLookup; // (built)
ImBitmapFont(); IMGUI_API ImBitmapFont();
~ImBitmapFont() { Clear(); } IMGUI_API ~ImBitmapFont() { Clear(); }
bool LoadFromMemory(const void* data, size_t data_size); IMGUI_API bool LoadFromMemory(const void* data, size_t data_size);
bool LoadFromFile(const char* filename); IMGUI_API bool LoadFromFile(const char* filename);
void Clear(); IMGUI_API void Clear();
void BuildLookupTable(); IMGUI_API void BuildLookupTable();
const FntGlyph * FindGlyph(unsigned short c) const; IMGUI_API const FntGlyph * FindGlyph(unsigned short c, const FntGlyph* fallback = NULL) const;
float GetFontSize() const { return (float)Info->FontSize; } IMGUI_API float GetFontSize() const { return (float)Info->FontSize; }
bool IsLoaded() const { return Info != NULL && Common != NULL && Glyphs != NULL; } IMGUI_API bool IsLoaded() const { return Info != NULL && Common != NULL && Glyphs != NULL; }
ImVec2 CalcTextSizeA(float size, float max_width, const char* text_begin, const char* text_end, const char** remaining = NULL) const; // utf8 // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
ImVec2 CalcTextSizeW(float size, float max_width, const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL) const; // wchar // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
void RenderText(float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, ImDrawVert*& out_vertices) const; IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end, const char** remaining = NULL) const; // utf8
IMGUI_API ImVec2 CalcTextSizeW(float size, float max_width, const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL) const; // wchar
IMGUI_API void RenderText(float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, ImDrawVert*& out_vertices, float wrap_width = 0.0f) const;
private:
IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width, const FntGlyph* fallback_glyph) const;
}; };