@ -25,6 +25,10 @@ struct ImGuiWindow;
# define IM_ASSERT(_EXPR) assert(_EXPR)
# endif
# ifndef IMGUI_API
# define IMGUI_API
# endif
typedef unsigned int ImU32 ;
typedef unsigned short ImWchar ;
typedef ImU32 ImGuiID ;
@ -60,9 +64,9 @@ struct ImVec4
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.
void * MemAlloc ( size_t sz ) ;
void MemFree ( void * ptr ) ;
void * MemRealloc ( void * ptr , size_t sz ) ;
IMGUI_API void * MemAlloc ( size_t sz ) ;
IMGUI_API void MemFree ( void * ptr ) ;
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).
@ -129,165 +133,165 @@ public:
namespace ImGui
{
// Main
ImGuiIO & GetIO ( ) ;
ImGuiStyle & GetStyle ( ) ;
void NewFrame ( ) ;
void Render ( ) ;
void Shutdown ( ) ;
void ShowUserGuide ( ) ;
void ShowStyleEditor ( ImGuiStyle * ref = NULL ) ;
void ShowTestWindow ( bool * open = NULL ) ;
IMGUI_API I mGuiIO & GetIO ( ) ;
IMGUI_API I mGuiStyle & GetStyle ( ) ;
IMGUI_API void NewFrame ( ) ;
IMGUI_API void Render ( ) ;
IMGUI_API void Shutdown ( ) ;
IMGUI_API void ShowUserGuide ( ) ;
IMGUI_API void ShowStyleEditor ( ImGuiStyle * ref = NULL ) ;
IMGUI_API void ShowTestWindow ( bool * open = NULL ) ;
// 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.
void End ( ) ;
void BeginChild ( const char * str_id , ImVec2 size = ImVec2 ( 0 , 0 ) , bool border = false , ImGuiWindowFlags extra_flags = 0 ) ;
void EndChild ( ) ;
bool GetWindowIsFocused ( ) ;
ImVec2 GetWindowSize ( ) ;
float GetWindowWidth ( ) ;
void SetWindowSize ( const ImVec2 & size ) ; // set to ImVec2(0,0) to force an auto-fit
ImVec2 GetWindowPos ( ) ; // you should rarely need/care about the window position, but it can be useful if you want to use your own drawing.
void SetWindowPos ( const ImVec2 & pos ) ; // set current window pos.
ImVec2 GetContentRegionMax ( ) ; // window or current column boundaries
ImVec2 GetWindowContentRegionMin ( ) ; // window boundaries
ImVec2 GetWindowContentRegionMax ( ) ;
ImDrawList * GetWindowDrawList ( ) ; // get rendering command-list if you want to append your own draw primitives.
ImFont GetWindowFont ( ) ;
float GetWindowFontSize ( ) ;
void SetWindowFontScale ( float scale ) ; // per-window font scale. Adjust IO.FontBaseScale if you want to scale all windows together.
void SetScrollPosHere ( ) ; // adjust scrolling position to center into the current cursor position.
void SetKeyboardFocusHere ( int offset = 0 ) ; // focus keyboard on the next widget. Use 'offset' to access sub components of a multiple component widget.
void SetTreeStateStorage ( ImGuiStorage * tree ) ; // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it).
ImGuiStorage * GetTreeStateStorage ( ) ;
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.
IMGUI_API void End ( ) ;
IMGUI_API void BeginChild ( const char * str_id , ImVec2 size = ImVec2 ( 0 , 0 ) , bool border = false , ImGuiWindowFlags extra_flags = 0 ) ;
IMGUI_API void EndChild ( ) ;
IMGUI_API bool GetWindowIsFocused ( ) ;
IMGUI_API I mVec2 GetWindowSize ( ) ;
IMGUI_API float GetWindowWidth ( ) ;
IMGUI_API void SetWindowSize ( const ImVec2 & size ) ; // set to ImVec2(0,0) to force an auto-fit
IMGUI_API I mVec2 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 SetWindowPos ( const ImVec2 & pos ) ; // set current window pos.
IMGUI_API ImVec2 GetContentRegionMax ( ) ; // window or current column boundaries
IMGUI_API I mVec2 GetWindowContentRegionMin ( ) ; // window boundaries
IMGUI_API I mVec2 GetWindowContentRegionMax ( ) ;
IMGUI_API I mDrawList * GetWindowDrawList ( ) ; // get rendering command-list if you want to append your own draw primitives.
IMGUI_API I mFont GetWindowFont ( ) ;
IMGUI_API float GetWindowFontSize ( ) ;
IMGUI_API void SetWindowFontScale ( float scale ) ; // per-window font scale. Adjust IO.FontBaseScale if you want to scale all windows together.
IMGUI_API void SetScrollPosHere ( ) ; // adjust scrolling position to center into the current cursor position.
IMGUI_API 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 SetTreeStateStorage ( ImGuiStorage * tree ) ; // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it).
IMGUI_API I mGuiStorage * GetTreeStateStorage ( ) ;
void PushItemWidth ( float item_width ) ; // width of items for the common item+label case. default to ~2/3 of windows width.
void PopItemWidth ( ) ;
float GetItemWidth ( ) ;
void PushAllowKeyboardFocus ( bool v ) ; // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets.
void PopAllowKeyboardFocus ( ) ;
void PushStyleColor ( ImGuiCol idx , const ImVec4 & col ) ;
void PopStyleColor ( ) ;
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.
void PopTextWrapPos ( ) ;
IMGUI_API void PushItemWidth ( float item_width ) ; // width of items for the common item+label case. default to ~2/3 of windows width.
IMGUI_API void PopItemWidth ( ) ;
IMGUI_API float GetItemWidth ( ) ;
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 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
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 ) ;
void BeginTooltip ( ) ; // use to create full-featured tooltip windows that aren't just text.
void EndTooltip ( ) ;
IMGUI_API void SetTooltip ( const char * fmt , . . . ) ; // 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 EndTooltip ( ) ;
// Layout
void Separator ( ) ; // horizontal line
void SameLine ( int column_x = 0 , int spacing_w = - 1 ) ; // call between widgets to layout them horizontally
void Spacing ( ) ;
void Columns ( int count = 1 , const char * id = NULL , bool border = true ) ; // setup number of columns
void NextColumn ( ) ; // next column
float GetColumnOffset ( int column_index = - 1 ) ;
void SetColumnOffset ( int column_index , float offset ) ;
float GetColumnWidth ( int column_index = - 1 ) ;
ImVec2 GetCursorPos ( ) ; // cursor position is relative to window position
void SetCursorPos ( const ImVec2 & pos ) ; // "
void SetCursorPosX ( float x ) ; // "
void SetCursorPosY ( float y ) ; // "
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.
float GetTextLineSpacing ( ) ;
float GetTextLineHeight ( ) ;
IMGUI_API void Separator ( ) ; // horizontal line
IMGUI_API void SameLine ( int column_x = 0 , int spacing_w = - 1 ) ; // call between widgets to layout them horizontally
IMGUI_API void Spacing ( ) ;
IMGUI_API void Columns ( int count = 1 , const char * id = NULL , bool border = true ) ; // setup number of columns
IMGUI_API void NextColumn ( ) ; // next column
IMGUI_API float GetColumnOffset ( int column_index = - 1 ) ;
IMGUI_API void SetColumnOffset ( int column_index , float offset ) ;
IMGUI_API float GetColumnWidth ( int column_index = - 1 ) ;
IMGUI_API I mVec2 GetCursorPos ( ) ; // cursor position is relative to window position
IMGUI_API void SetCursorPos ( const ImVec2 & pos ) ; // "
IMGUI_API void SetCursorPosX ( float x ) ; // "
IMGUI_API void SetCursorPosY ( float y ) ; // "
IMGUI_API I mVec2 GetCursorScreenPos ( ) ; // cursor position in screen space
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.
IMGUI_API float GetTextLineSpacing ( ) ;
IMGUI_API float GetTextLineHeight ( ) ;
// ID scopes
void PushID ( const char * str_id ) ;
void PushID ( const void * ptr_id ) ;
void PushID ( const int int_id ) ;
void PopID ( ) ;
IMGUI_API void PushID ( const char * str_id ) ;
IMGUI_API void PushID ( const void * ptr_id ) ;
IMGUI_API void PushID ( const int int_id ) ;
IMGUI_API void PopID ( ) ;
// Widgets
void Text ( const char * fmt , . . . ) ;
void TextV ( const char * fmt , va_list args ) ;
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 ) ;
void TextWrapped ( const char * fmt , . . . ) ; // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();
void TextWrappedV ( 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, recommended for long chunks of text.
void LabelText ( const char * label , const char * fmt , . . . ) ; // display text+label aligned the same way as value+label widgets
void LabelTextV ( const char * label , const char * fmt , va_list args ) ;
void BulletText ( const char * fmt , . . . ) ;
void BulletTextV ( const char * fmt , va_list args ) ;
bool Button ( const char * label , ImVec2 size = ImVec2 ( 0 , 0 ) , bool repeat_when_held = false ) ;
bool SmallButton ( const char * label ) ;
bool CollapsingHeader ( const char * label , const char * str_id = NULL , const bool display_frame = true , const bool default_open = 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.
bool SliderFloat2 ( const char * label , float v [ 2 ] , float v_min , float v_max , const char * display_format = " %.3f " , float power = 1.0f ) ;
bool SliderFloat3 ( const char * label , float v [ 3 ] , float v_min , float v_max , const char * display_format = " %.3f " , float power = 1.0f ) ;
bool SliderFloat4 ( const char * label , float v [ 4 ] , 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
bool SliderInt ( const char * label , int * v , int v_min , int v_max , const char * display_format = " %.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 ) ) ;
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 ) ) ;
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 ) ) ;
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 Checkbox ( const char * label , bool * v ) ;
bool CheckboxFlags ( const char * label , unsigned int * flags , unsigned int flags_value ) ;
bool RadioButton ( const char * label , bool active ) ;
bool RadioButton ( const char * label , int * v , int v_button ) ;
bool InputText ( const char * label , char * buf , size_t buf_size , ImGuiInputTextFlags flags = 0 ) ;
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 InputFloat2 ( const char * label , float v [ 2 ] , int decimal_precision = - 1 ) ;
bool InputFloat3 ( const char * label , float v [ 3 ] , int decimal_precision = - 1 ) ;
bool InputFloat4 ( const char * label , float v [ 4 ] , int decimal_precision = - 1 ) ;
bool InputInt ( const char * label , int * v , int step = 1 , int step_fast = 100 , ImGuiInputTextFlags extra_flags = 0 ) ;
bool Combo ( const char * label , int * current_item , const char * * items , int items_count , int popup_height_items = 7 ) ;
bool Combo ( const char * label , int * current_item , const char * items_separated_by_zeros , int popup_height_items = 7 ) ; // S eparate items with \0, end item-list with \0\0
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 ColorButton ( const ImVec4 & col , bool small_height = false , bool outline_border = true ) ;
bool ColorEdit3 ( const char * label , float col [ 3 ] ) ;
bool ColorEdit4 ( const char * label , float col [ 4 ] , bool show_alpha = true ) ;
void ColorEditMode ( ImGuiColorEditMode mode ) ;
bool TreeNode ( const char * str_label_id ) ; // if returning 'true' the node is open and the user is responsible for calling TreePop
bool TreeNode ( const char * str_id , const char * fmt , . . . ) ; // "
bool TreeNode ( const void * ptr_id , const char * fmt , . . . ) ; // "
bool TreeNodeV ( const char * str_id , const char * fmt , va_list args ) ; // "
bool TreeNodeV ( const void * ptr_id , const char * fmt , va_list args ) ; // "
void TreePush ( const char * str_id = NULL ) ; // already called by TreeNode(), but you can call Push/Pop yourself for layouting purpose
void TreePush ( const void * ptr_id = NULL ) ; // "
void TreePop ( ) ;
void OpenNextNode ( bool open ) ; // force open/close the next TreeNode or CollapsingHeader
IMGUI_API void Text ( const char * fmt , . . . ) ;
IMGUI_API void TextV ( const char * fmt , va_list args ) ;
IMGUI_API void TextColored ( const ImVec4 & col , const char * fmt , . . . ) ; // 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 TextWrapped ( const char * fmt , . . . ) ; // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();
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 , . . . ) ; // 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 BulletText ( const char * fmt , . . . ) ;
IMGUI_API void BulletTextV ( const char * fmt , va_list args ) ;
IMGUI_API bool Button ( const char * label , ImVec2 size = ImVec2 ( 0 , 0 ) , bool repeat_when_held = false ) ;
IMGUI_API bool SmallButton ( const char * label ) ;
IMGUI_API bool CollapsingHeader ( const char * label , const char * str_id = NULL , const bool display_frame = true , const bool default_open = false ) ;
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 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 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 SliderAngle ( const char * label , float * v , float v_degrees_min = - 360.0f , float v_degrees_max = + 360.0f ) ; // *v in radians
IMGUI_API bool SliderInt ( const char * label , int * v , int v_min , int v_max , const char * display_format = " %.0f " ) ;
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 ) ) ;
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 ) , size_t stride = sizeof ( float ) ) ;
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 ) ) ;
IMGUI_API bool Checkbox ( const char * label , bool * v ) ;
IMGUI_API bool CheckboxFlags ( const char * label , unsigned int * flags , unsigned int flags_value ) ;
IMGUI_API bool RadioButton ( const char * label , bool active ) ;
IMGUI_API bool RadioButton ( const char * label , int * v , int v_button ) ;
IMGUI_API bool InputText ( const char * label , char * buf , size_t buf_size , ImGuiInputTextFlags 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 ) ;
IMGUI_API bool InputFloat2 ( const char * label , float v [ 2 ] , int decimal_precision = - 1 ) ;
IMGUI_API bool InputFloat3 ( const char * label , float v [ 3 ] , int decimal_precision = - 1 ) ;
IMGUI_API bool InputFloat4 ( const char * label , float v [ 4 ] , int decimal_precision = - 1 ) ;
IMGUI_API bool InputInt ( const char * label , int * v , int step = 1 , int step_fast = 100 , ImGuiInputTextFlags extra_flags = 0 ) ;
IMGUI_API bool Combo ( const char * label , int * current_item , const char * * items , int items_count , int popup_height_items = 7 ) ;
IMGUI_API bool Combo ( const char * label , int * current_item , const char * items_separated_by_zeros , int popup_height_items = 7 ) ; // s eparate 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 popup_height_items = 7 ) ;
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 ] ) ;
IMGUI_API bool ColorEdit4 ( const char * label , float col [ 4 ] , bool show_alpha = true ) ;
IMGUI_API void ColorEditMode ( ImGuiColorEditMode mode ) ;
IMGUI_API 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 TreeNode ( const char * str_id , const char * fmt , . . . ) ; // "
IMGUI_API bool TreeNode ( const void * ptr_id , const char * fmt , . . . ) ; // "
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 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"
// Freely declare your own in the ImGui namespace.
void Value ( const char * prefix , bool b ) ;
void Value ( const char * prefix , int v ) ;
void Value ( const char * prefix , unsigned int v ) ;
void Value ( const char * prefix , float v , const char * float_format = NULL ) ;
void Color ( const char * prefix , const ImVec4 & v ) ;
void Color ( const char * prefix , unsigned int v ) ;
IMGUI_API void Value ( const char * prefix , bool b ) ;
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 , float v , const char * float_format = NULL ) ;
IMGUI_API void Color ( const char * prefix , const ImVec4 & v ) ;
IMGUI_API void Color ( const char * prefix , unsigned int v ) ;
// Logging
void LogButtons ( ) ;
void LogToTTY ( int max_depth = - 1 ) ;
void LogToFile ( int max_depth = - 1 , const char * filename = NULL ) ;
void LogToClipboard ( int max_depth = - 1 ) ;
IMGUI_API void LogButtons ( ) ;
IMGUI_API void LogToTTY ( int max_depth = - 1 ) ;
IMGUI_API void LogToFile ( int max_depth = - 1 , const char * filename = NULL ) ;
IMGUI_API void LogToClipboard ( int max_depth = - 1 ) ;
// Utilities
void SetNewWindowDefaultPos ( const ImVec2 & pos ) ; // set position of window that do
bool IsHovered ( ) ; // was the last item active area hovered by mouse?
bool IsItemFocused ( ) ; // was the last item focused for keyboard input?
ImVec2 GetItemBoxMin ( ) ; // get bounding box of last item
ImVec2 GetItemBoxMax ( ) ; // get bounding box of last item
bool IsClipped ( const ImVec2 & item_size ) ; // to perform coarse clipping on user's side (as an optimization)
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 IsMouseClicked ( int button , bool repeat = false ) ;
bool IsMouseDoubleClicked ( int button ) ;
bool IsMouseHoveringWindow ( ) ; // is mouse hovering current window ("window" in API names always refer to current window)
bool IsMouseHoveringAnyWindow ( ) ; // is mouse hovering any active imgui window
bool IsMouseHoveringBox ( const ImVec2 & box_min , const ImVec2 & box_max ) ; // is mouse hovering given bounding box
bool IsPosHoveringAnyWindow ( const ImVec2 & pos ) ; // is given position hovering any active imgui window
ImVec2 GetMousePos ( ) ; // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
float GetTime ( ) ;
int GetFrameCount ( ) ;
const char * GetStyleColorName ( ImGuiCol idx ) ;
void GetDefaultFontData ( const void * * fnt_data , unsigned int * fnt_size , const void * * png_data , unsigned int * png_size ) ;
ImVec2 CalcTextSize ( const char * text , const char * text_end = NULL , bool hide_text_after_hash = true , float wrap_width = - 1.0f ) ;
IMGUI_API void SetNewWindowDefaultPos ( const ImVec2 & pos ) ; // set position of window that do
IMGUI_API bool IsHovered ( ) ; // was the last item active area hovered by mouse?
IMGUI_API bool IsItemFocused ( ) ; // was the last item focused for keyboard input?
IMGUI_API I mVec2 GetItemBoxMin ( ) ; // get bounding box of last item
IMGUI_API I mVec2 GetItemBoxMax ( ) ; // get bounding box of last item
IMGUI_API bool IsClipped ( const ImVec2 & item_size ) ; // to perform coarse clipping on user's side (as an optimization)
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
IMGUI_API bool IsMouseClicked ( int button , bool repeat = false ) ;
IMGUI_API bool IsMouseDoubleClicked ( int button ) ;
IMGUI_API bool IsMouseHoveringWindow ( ) ; // is mouse hovering current window ("window" in API names always refer to current window)
IMGUI_API bool IsMouseHoveringAnyWindow ( ) ; // is mouse hovering any active imgui window
IMGUI_API bool IsMouseHoveringBox ( const ImVec2 & box_min , const ImVec2 & box_max ) ; // is mouse hovering given bounding box
IMGUI_API bool IsPosHoveringAnyWindow ( const ImVec2 & pos ) ; // is given position hovering any active imgui window
IMGUI_API I mVec2 GetMousePos ( ) ; // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
IMGUI_API float GetTime ( ) ;
IMGUI_API int GetFrameCount ( ) ;
IMGUI_API const char * GetStyleColorName ( ImGuiCol idx ) ;
IMGUI_API void GetDefaultFontData ( const void * * fnt_data , unsigned int * fnt_size , const void * * png_data , unsigned int * png_size ) ;
IMGUI_API I mVec2 CalcTextSize ( const char * text , const char * text_end = NULL , bool hide_text_after_hash = true , float wrap_width = - 1.0f ) ;
} // namespace ImGui
@ -408,7 +412,7 @@ struct ImGuiStyle
float ScrollBarWidth ; // Width of the vertical scroll bar
ImVec4 Colors [ ImGuiCol_COUNT ] ;
ImGuiStyle ( ) ;
IMGUI_API I mGuiStyle ( ) ;
} ;
// This is where your app communicate with ImGui. Call ImGui::GetIO() to access.
@ -471,7 +475,7 @@ struct ImGuiIO
ImWchar InputCharacters [ 16 + 1 ] ; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper.
// 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
@ -493,7 +497,7 @@ struct ImGuiIO
float MouseDownTime [ 5 ] ;
float KeysDownTime [ 512 ] ;
ImGuiIO ( ) ;
IMGUI_API I mGuiIO ( ) ;
} ;
//-----------------------------------------------------------------------------
@ -528,7 +532,7 @@ struct ImGuiTextFilter
char front ( ) const { return * b ; }
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 split ( char separator , ImVector < TextRange > & out ) ;
IMGUI_API void split ( char separator , ImVector < TextRange > & out ) ;
} ;
char InputBuf [ 256 ] ;
@ -540,7 +544,7 @@ struct ImGuiTextFilter
void Draw ( const char * label = " Filter (inc,-exc) " , float width = -1.0f) ; // Helper calling InputText+Build
bool PassFilter ( const char * val ) const ;
bool IsActive ( ) const { return ! Filters . empty ( ) ; }
void Build ( ) ;
IMGUI_API void Build ( ) ;
} ;
// Helper: Text buffer for logging/accumulating text
@ -555,7 +559,7 @@ struct ImGuiTextBuffer
size_t size ( ) const { return Buf . size ( ) - 1 ; }
bool empty ( ) { return Buf . empty ( ) ; }
void clear ( ) { Buf . clear ( ) ; Buf . push_back ( 0 ) ; }
void append ( const char * fmt , . . . ) ;
IMGUI_API void append ( const char * fmt , . . . ) ;
} ;
// Helper: Key->value storage
@ -568,13 +572,13 @@ struct ImGuiStorage
struct Pair { ImU32 key ; int val ; } ;
ImVector < Pair > Data ;
void Clear ( ) ;
int GetInt ( ImU32 key , int default_val = 0 ) ;
void SetInt ( ImU32 key , int val ) ;
void SetAllInt ( int val ) ;
IMGUI_API void Clear ( ) ;
IMGUI_API int GetInt ( ImU32 key , int default_val = 0 ) ;
IMGUI_API void SetInt ( ImU32 key , int val ) ;
IMGUI_API void SetAllInt ( int val ) ;
int * Find ( ImU32 key ) ;
void Insert ( ImU32 key , int val ) ;
IMGUI_API int * Find ( ImU32 key ) ;
IMGUI_API void Insert ( ImU32 key , int val ) ;
} ;
//-----------------------------------------------------------------------------
@ -613,22 +617,22 @@ struct ImDrawList
ImDrawList ( ) { Clear ( ) ; }
void Clear ( ) ;
void PushClipRect ( const ImVec4 & clip_rect ) ;
void PopClipRect ( ) ;
void ReserveVertices ( unsigned int vtx_count ) ;
void AddVtx ( const ImVec2 & pos , ImU32 col ) ;
void AddVtxLine ( const ImVec2 & a , const ImVec2 & b , ImU32 col ) ;
// Primitives
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 ) ;
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 ) ;
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 ) ;
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 , float wrap_width = 0.0f ) ;
IMGUI_API void Clear ( ) ;
IMGUI_API void PushClipRect ( const ImVec4 & clip_rect ) ;
IMGUI_API void PopClipRect ( ) ;
IMGUI_API void ReserveVertices ( unsigned int vtx_count ) ;
IMGUI_API void AddVtx ( const ImVec2 & pos , ImU32 col ) ;
IMGUI_API void AddVtxLine ( const ImVec2 & a , const ImVec2 & b , ImU32 col ) ;
// Primitives
IMGUI_API void AddLine ( const ImVec2 & a , const ImVec2 & b , ImU32 col ) ;
IMGUI_API void AddRect ( 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 ) ;
IMGUI_API void AddTriangleFilled ( const ImVec2 & a , const ImVec2 & b , const ImVec2 & c , ImU32 col ) ;
IMGUI_API void AddCircle ( 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 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 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
@ -697,23 +701,23 @@ struct ImBitmapFont
ImVector < const char * > Filenames ; // (point into raw data)
ImVector < int > IndexLookup ; // (built)
ImBitmapFont ( ) ;
~ ImBitmapFont ( ) { Clear ( ) ; }
IMGUI_API I mBitmapFont ( ) ;
IMGUI_API ~ ImBitmapFont ( ) { Clear ( ) ; }
bool LoadFromMemory ( const void * data , size_t data_size ) ;
bool LoadFromFile ( const char * filename ) ;
void Clear ( ) ;
void BuildLookupTable ( ) ;
const FntGlyph * FindGlyph ( unsigned short c , const FntGlyph * fallback = NULL ) const ;
float GetFontSize ( ) const { return ( float ) Info - > FontSize ; }
bool IsLoaded ( ) const { return Info ! = NULL & & Common ! = NULL & & Glyphs ! = NULL ; }
IMGUI_API bool LoadFromMemory ( const void * data , size_t data_size ) ;
IMGUI_API bool LoadFromFile ( const char * filename ) ;
IMGUI_API void Clear ( ) ;
IMGUI_API void BuildLookupTable ( ) ;
IMGUI_API const FntGlyph * FindGlyph ( unsigned short c , const FntGlyph * fallback = NULL ) const ;
IMGUI_API float GetFontSize ( ) const { return ( float ) Info - > FontSize ; }
IMGUI_API bool IsLoaded ( ) const { return Info ! = NULL & & Common ! = NULL & & Glyphs ! = NULL ; }
// 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
// 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
ImVec2 CalcTextSizeA ( float size , float max_width , float wrap_width , const char * text_begin , const char * text_end , const char * * remaining = NULL ) const ; // utf8
ImVec2 CalcTextSizeW ( float size , float max_width , const ImWchar * text_begin , const ImWchar * text_end , const ImWchar * * remaining = NULL ) const ; // wchar
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 ;
IMGUI_API I mVec2 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 I mVec2 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 :
const char * CalcWordWrapPositionA ( float scale , const char * text , const char * text_end , float wrap_width , const FntGlyph * fallback_glyph ) const ;
IMGUI_API const char * CalcWordWrapPositionA ( float scale , const char * text , const char * text_end , float wrap_width , const FntGlyph * fallback_glyph ) const ;
} ;