mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Merge branch 'master' into styles
This commit is contained in:
		
							
								
								
									
										179
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										179
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // dear imgui, v1.51 WIP | ||||
| // dear imgui, v1.52 WIP | ||||
| // (headers) | ||||
|  | ||||
| // See imgui.cpp file for documentation. | ||||
| @@ -16,7 +16,7 @@ | ||||
| #include <stddef.h>         // ptrdiff_t, NULL | ||||
| #include <string.h>         // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp | ||||
|  | ||||
| #define IMGUI_VERSION       "1.51 WIP" | ||||
| #define IMGUI_VERSION       "1.52 WIP" | ||||
|  | ||||
| // Define attributes of all API symbols declarations, e.g. for DLL under Windows. | ||||
| #ifndef IMGUI_API | ||||
| @@ -31,9 +31,11 @@ | ||||
|  | ||||
| // Some compilers support applying printf-style warnings to user functions. | ||||
| #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 | ||||
| #define IM_PRINTFARGS(FMT) | ||||
| #define IM_FMTARGS(FMT) | ||||
| #define IM_FMTLIST(FMT) | ||||
| #endif | ||||
|  | ||||
| #if defined(__clang__) | ||||
| @@ -74,6 +76,7 @@ typedef int ImGuiColorEditFlags;    // color edit flags for Color*()        // e | ||||
| typedef int ImGuiMouseCursor;       // a mouse cursor identifier            // enum ImGuiMouseCursor_ | ||||
| typedef int ImGuiWindowFlags;       // window flags for Begin*()            // enum ImGuiWindowFlags_ | ||||
| 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 ImGuiSelectableFlags;   // flags for Selectable()               // enum ImGuiSelectableFlags_ | ||||
| typedef int ImGuiTreeNodeFlags;     // flags for TreeNode*(), Collapsing*() // enum ImGuiTreeNodeFlags_ | ||||
| @@ -146,6 +149,7 @@ namespace ImGui | ||||
|     IMGUI_API float         GetWindowWidth(); | ||||
|     IMGUI_API float         GetWindowHeight(); | ||||
|     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          SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0);            // set next window position. call before Begin() | ||||
| @@ -180,11 +184,13 @@ namespace ImGui | ||||
|     // Parameters stacks (shared) | ||||
|     IMGUI_API void          PushFont(ImFont* font);                                             // use NULL as a shortcut to push default font | ||||
|     IMGUI_API void          PopFont(); | ||||
|     IMGUI_API void          PushStyleColor(ImGuiCol idx, ImU32 col); | ||||
|     IMGUI_API void          PushStyleColor(ImGuiCol idx, const ImVec4& col); | ||||
|     IMGUI_API void          PopStyleColor(int count = 1); | ||||
|     IMGUI_API void          PushStyleVar(ImGuiStyleVar idx, float val); | ||||
|     IMGUI_API void          PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); | ||||
|     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 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 | ||||
| @@ -198,9 +204,9 @@ namespace ImGui | ||||
|     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          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          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(); | ||||
|  | ||||
|     // Cursor / Layout | ||||
| @@ -228,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 | ||||
|  | ||||
|     // 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 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 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 | ||||
|     // 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. | ||||
|     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 void* ptr_id); | ||||
|     IMGUI_API void          PushID(int int_id); | ||||
|     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 | ||||
|     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 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          SmallButton(const char* label);                                         // button with FramePadding=(0,0) to easily embed in text | ||||
|     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 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 | ||||
| @@ -331,15 +340,15 @@ namespace ImGui | ||||
|  | ||||
|     // 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* 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* 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 void* ptr_id = NULL);                                    // " | ||||
|     IMGUI_API void          TreePop();                                                              // ~ Unindent()+PopId() | ||||
| @@ -365,8 +374,8 @@ namespace ImGui | ||||
|     IMGUI_API void          Value(const char* prefix, float v, const char* float_format = NULL); | ||||
|  | ||||
|     // Tooltips | ||||
|     IMGUI_API void          SetTooltip(const char* fmt, ...) IM_PRINTFARGS(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); | ||||
|     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(); | ||||
|  | ||||
| @@ -397,7 +406,7 @@ namespace ImGui | ||||
|     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          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 | ||||
|     IMGUI_API void          PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); | ||||
| @@ -407,32 +416,34 @@ namespace ImGui | ||||
|     IMGUI_API void          StyleColorsClassic(ImGuiStyle* dst = NULL); | ||||
|  | ||||
|     // 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          IsAnyItemActive(); | ||||
|     IMGUI_API ImVec2        GetItemRectMin();                                                   // get bounding rect of last item in screen space | ||||
|     IMGUI_API ImVec2        GetItemRectMax();                                                   // " | ||||
|     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 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          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          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          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& 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 float         GetTime(); | ||||
|     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        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 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 ImVec4        ColorConvertU32ToFloat4(ImU32 in); | ||||
| @@ -445,14 +456,14 @@ namespace ImGui | ||||
|     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          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          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          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        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 | ||||
| @@ -478,13 +489,14 @@ namespace ImGui | ||||
|  | ||||
|     // Obsolete functions (Will be removed! Also see 'API BREAKING CHANGES' section in imgui.cpp) | ||||
| #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 ImFont*   GetWindowFont() { return GetFont(); }                              // OBSOLETE 1.48+ | ||||
|     static inline float     GetWindowFontSize() { return GetFontSize(); }                      // OBSOLETE 1.48+ | ||||
|     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 | ||||
|  | ||||
| } // namespace ImGui | ||||
| @@ -511,9 +523,7 @@ enum ImGuiWindowFlags_ | ||||
|     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) | ||||
|     // [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_Tooltip                = 1 << 24,  // Don't use! For internal use by BeginTooltip() | ||||
|     ImGuiWindowFlags_Popup                  = 1 << 25,  // Don't use! For internal use by BeginPopup() | ||||
| @@ -644,6 +654,11 @@ enum ImGuiCol_ | ||||
|     ImGuiCol_TextSelectedBg, | ||||
|     ImGuiCol_ModalWindowDarkening,  // darken entire screen when a modal window is active | ||||
|     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() to temporarily modify the ImGuiStyle structure. | ||||
| @@ -720,7 +735,7 @@ enum ImGuiCond_ | ||||
|     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 obsolete) | ||||
|     // 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 | ||||
| @@ -774,7 +789,7 @@ struct ImGuiIO | ||||
|     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 | ||||
|     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. | ||||
|  | ||||
|     ImFontAtlas*  Fonts;                    // <auto>               // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. | ||||
| @@ -817,7 +832,7 @@ struct ImGuiIO | ||||
|     // 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. | ||||
|     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). | ||||
| @@ -990,8 +1005,8 @@ struct ImGuiTextBuffer | ||||
|     bool                empty() { return Buf.Size <= 1; } | ||||
|     void                clear() { Buf.clear(); Buf.push_back(0); } | ||||
|     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 | ||||
| @@ -1073,8 +1088,8 @@ struct ImGuiTextEditCallbackData | ||||
| struct ImGuiSizeConstraintCallbackData | ||||
| { | ||||
|     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. | ||||
| }; | ||||
|  | ||||
| @@ -1099,8 +1114,8 @@ struct ImGuiSizeConstraintCallbackData | ||||
|  | ||||
| // 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. | ||||
| // **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 | ||||
| { | ||||
|     ImVec4              Value; | ||||
| @@ -1113,8 +1128,8 @@ struct ImColor | ||||
|     inline operator ImU32() const                                   { return ImGui::ColorConvertFloat4ToU32(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; } | ||||
|  | ||||
|     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); } | ||||
| }; | ||||
|  | ||||
| @@ -1233,6 +1248,8 @@ struct ImDrawList | ||||
|     IMGUI_API void  PopClipRect(); | ||||
|     IMGUI_API void  PushTextureID(const ImTextureID& texture_id); | ||||
|     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 | ||||
|     IMGUI_API void  AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); | ||||
| @@ -1309,15 +1326,17 @@ struct ImFontConfig | ||||
| { | ||||
|     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). Set to true | ||||
|     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 | ||||
|     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. | ||||
|     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. Only X axis is supported for now. | ||||
|     ImVec2          GlyphOffset;                // 0, 0     // Offset all glyphs from this font input | ||||
|     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. | ||||
|     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] | ||||
|     char            Name[32];                               // Name (strictly to ease debugging) | ||||
| @@ -1392,10 +1411,22 @@ struct ImFontAtlas | ||||
|     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. | ||||
|  | ||||
|     // 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 | ||||
|     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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user