mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Comments + adding spacing in headers because VS IDE parser display blocks so badly. Add helper in internal's ImGuiInputTextState. (#4275)
This commit is contained in:
		| @@ -4459,6 +4459,9 @@ void ImGui::EndFrame() | |||||||
|     CallContextHooks(&g, ImGuiContextHookType_EndFramePost); |     CallContextHooks(&g, ImGuiContextHookType_EndFramePost); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Prepare the data for rendering so you can call GetDrawData() | ||||||
|  | // (As with anything within the ImGui:: namspace this doesn't touch your GPU or graphics API at all: | ||||||
|  | // it is the role of the ImGui_ImplXXXX_RenderDrawData() function provided by the renderer backend) | ||||||
| void ImGui::Render() | void ImGui::Render() | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -343,7 +343,8 @@ namespace ImGui | |||||||
|     IMGUI_API float         GetWindowWidth();                           // get current window width (shortcut for GetWindowSize().x) |     IMGUI_API float         GetWindowWidth();                           // get current window width (shortcut for GetWindowSize().x) | ||||||
|     IMGUI_API float         GetWindowHeight();                          // get current window height (shortcut for GetWindowSize().y) |     IMGUI_API float         GetWindowHeight();                          // get current window height (shortcut for GetWindowSize().y) | ||||||
|  |  | ||||||
|     // Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin). |     // Window manipulation | ||||||
|  |     // - Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin). | ||||||
|     IMGUI_API void          SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0, 0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. |     IMGUI_API void          SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0, 0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. | ||||||
|     IMGUI_API void          SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0);                  // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() |     IMGUI_API void          SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0);                  // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() | ||||||
|     IMGUI_API void          SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Sizes will be rounded down. Use callback to apply non-trivial programmatic constraints. |     IMGUI_API void          SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Sizes will be rounded down. Use callback to apply non-trivial programmatic constraints. | ||||||
| @@ -355,7 +356,7 @@ namespace ImGui | |||||||
|     IMGUI_API void          SetWindowSize(const ImVec2& size, ImGuiCond cond = 0);                      // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0, 0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. |     IMGUI_API void          SetWindowSize(const ImVec2& size, ImGuiCond cond = 0);                      // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0, 0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. | ||||||
|     IMGUI_API void          SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0);                     // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). |     IMGUI_API void          SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0);                     // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). | ||||||
|     IMGUI_API void          SetWindowFocus();                                                           // (not recommended) set current window to be focused / top-most. prefer using SetNextWindowFocus(). |     IMGUI_API void          SetWindowFocus();                                                           // (not recommended) set current window to be focused / top-most. prefer using SetNextWindowFocus(). | ||||||
|     IMGUI_API void          SetWindowFontScale(float scale);                                            // set font scale. Adjust IO.FontGlobalScale if you want to scale all windows. This is an old API! For correct scaling, prefer to reload font + rebuild ImFontAtlas + call style.ScaleAllSizes(). |     IMGUI_API void          SetWindowFontScale(float scale);                                            // [OBSOLETE] set font scale. Adjust IO.FontGlobalScale if you want to scale all windows. This is an old API! For correct scaling, prefer to reload font + rebuild ImFontAtlas + call style.ScaleAllSizes(). | ||||||
|     IMGUI_API void          SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0);      // set named window position. |     IMGUI_API void          SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0);      // set named window position. | ||||||
|     IMGUI_API void          SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0);    // set named window size. set axis to 0.0f to force an auto-fit on this axis. |     IMGUI_API void          SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0);    // set named window size. set axis to 0.0f to force an auto-fit on this axis. | ||||||
|     IMGUI_API void          SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0);   // set named window collapsed state |     IMGUI_API void          SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0);   // set named window collapsed state | ||||||
| @@ -405,6 +406,7 @@ namespace ImGui | |||||||
|     IMGUI_API void          PopTextWrapPos(); |     IMGUI_API void          PopTextWrapPos(); | ||||||
|  |  | ||||||
|     // Style read access |     // Style read access | ||||||
|  |     // - Use the style editor (ShowStyleEditor() function) to interactively see what the colors are) | ||||||
|     IMGUI_API ImFont*       GetFont();                                                      // get current font |     IMGUI_API ImFont*       GetFont();                                                      // get current font | ||||||
|     IMGUI_API float         GetFontSize();                                                  // get current font size (= height in pixels) of current font with current scale applied |     IMGUI_API float         GetFontSize();                                                  // get current font size (= height in pixels) of current font with current scale applied | ||||||
|     IMGUI_API ImVec2        GetFontTexUvWhitePixel();                                       // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API |     IMGUI_API ImVec2        GetFontTexUvWhitePixel();                                       // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API | ||||||
| @@ -445,11 +447,15 @@ namespace ImGui | |||||||
|     IMGUI_API float         GetFrameHeightWithSpacing();                                    // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) |     IMGUI_API float         GetFrameHeightWithSpacing();                                    // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) | ||||||
|  |  | ||||||
|     // ID stack/scopes |     // ID stack/scopes | ||||||
|     // - Read the FAQ for more details about how ID are handled in dear imgui. If you are creating widgets in a loop you most |     // Read the FAQ (docs/FAQ.md or http://dearimgui.org/faq) for more details about how ID are handled in dear imgui. | ||||||
|     //   likely want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them. |     // - Those questions are answered and impacted by understanding of the ID stack system: | ||||||
|     // - The resulting ID are hashes of the entire stack. |     //   - "Q: Why is my widget not reacting when I click on it?" | ||||||
|  |     //   - "Q: How can I have widgets with an empty label?" | ||||||
|  |     //   - "Q: How can I have multiple widgets with the same label?" | ||||||
|  |     // - Short version: ID are hashes of the entire ID stack. If you are creating widgets in a loop you most likely | ||||||
|  |     //   want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them. | ||||||
|     // - You can also use the "Label##foobar" syntax within widget label to distinguish them from each others. |     // - You can also use the "Label##foobar" syntax within widget label to distinguish them from each others. | ||||||
|     // - In this header file we use the "label"/"name" terminology to denote a string that will be displayed and used as an ID, |     // - In this header file we use the "label"/"name" terminology to denote a string that will be displayed + used as an ID, | ||||||
|     //   whereas "str_id" denote a string that is only used as an ID and not normally displayed. |     //   whereas "str_id" denote a string that is only used as an ID and not normally displayed. | ||||||
|     IMGUI_API void          PushID(const char* str_id);                                     // push string into the ID stack (will hash string). |     IMGUI_API void          PushID(const char* str_id);                                     // push string into the ID stack (will hash string). | ||||||
|     IMGUI_API void          PushID(const char* str_id_begin, const char* str_id_end);       // push string into the ID stack (will hash string). |     IMGUI_API void          PushID(const char* str_id_begin, const char* str_id_end);       // push string into the ID stack (will hash string). | ||||||
| @@ -654,12 +660,14 @@ namespace ImGui | |||||||
|     //  - You can bypass the hovering restriction by using ImGuiHoveredFlags_AllowWhenBlockedByPopup when calling IsItemHovered() or IsWindowHovered(). |     //  - You can bypass the hovering restriction by using ImGuiHoveredFlags_AllowWhenBlockedByPopup when calling IsItemHovered() or IsWindowHovered(). | ||||||
|     //  - IMPORTANT: Popup identifiers are relative to the current ID stack, so OpenPopup and BeginPopup generally needs to be at the same level of the stack. |     //  - IMPORTANT: Popup identifiers are relative to the current ID stack, so OpenPopup and BeginPopup generally needs to be at the same level of the stack. | ||||||
|     //    This is sometimes leading to confusing mistakes. May rework this in the future. |     //    This is sometimes leading to confusing mistakes. May rework this in the future. | ||||||
|  |  | ||||||
|     // Popups: begin/end functions |     // Popups: begin/end functions | ||||||
|     //  - BeginPopup(): query popup state, if open start appending into the window. Call EndPopup() afterwards. ImGuiWindowFlags are forwarded to the window. |     //  - BeginPopup(): query popup state, if open start appending into the window. Call EndPopup() afterwards. ImGuiWindowFlags are forwarded to the window. | ||||||
|     //  - BeginPopupModal(): block every interactions behind the window, cannot be closed by user, add a dimming background, has a title bar. |     //  - BeginPopupModal(): block every interactions behind the window, cannot be closed by user, add a dimming background, has a title bar. | ||||||
|     IMGUI_API bool          BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0);                         // return true if the popup is open, and you can start outputting to it. |     IMGUI_API bool          BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0);                         // return true if the popup is open, and you can start outputting to it. | ||||||
|     IMGUI_API bool          BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // return true if the modal is open, and you can start outputting to it. |     IMGUI_API bool          BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // return true if the modal is open, and you can start outputting to it. | ||||||
|     IMGUI_API void          EndPopup();                                                                         // only call EndPopup() if BeginPopupXXX() returns true! |     IMGUI_API void          EndPopup();                                                                         // only call EndPopup() if BeginPopupXXX() returns true! | ||||||
|  |  | ||||||
|     // Popups: open/close functions |     // Popups: open/close functions | ||||||
|     //  - OpenPopup(): set popup state to open. ImGuiPopupFlags are available for opening options. |     //  - OpenPopup(): set popup state to open. ImGuiPopupFlags are available for opening options. | ||||||
|     //  - If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE. |     //  - If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE. | ||||||
| @@ -671,6 +679,7 @@ namespace ImGui | |||||||
|     IMGUI_API void          OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags = 0);                             // id overload to facilitate calling from nested stacks |     IMGUI_API void          OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags = 0);                             // id overload to facilitate calling from nested stacks | ||||||
|     IMGUI_API void          OpenPopupOnItemClick(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);   // helper to open popup when clicked on last item. Default to ImGuiPopupFlags_MouseButtonRight == 1. (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors) |     IMGUI_API void          OpenPopupOnItemClick(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);   // helper to open popup when clicked on last item. Default to ImGuiPopupFlags_MouseButtonRight == 1. (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors) | ||||||
|     IMGUI_API void          CloseCurrentPopup();                                                                // manually close the popup we have begin-ed into. |     IMGUI_API void          CloseCurrentPopup();                                                                // manually close the popup we have begin-ed into. | ||||||
|  |  | ||||||
|     // Popups: open+begin combined functions helpers |     // Popups: open+begin combined functions helpers | ||||||
|     //  - Helpers to do OpenPopup+BeginPopup where the Open action is triggered by e.g. hovering an item and right-clicking. |     //  - Helpers to do OpenPopup+BeginPopup where the Open action is triggered by e.g. hovering an item and right-clicking. | ||||||
|     //  - They are convenient to easily create context menus, hence the name. |     //  - They are convenient to easily create context menus, hence the name. | ||||||
| @@ -679,6 +688,7 @@ namespace ImGui | |||||||
|     IMGUI_API bool          BeginPopupContextItem(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);  // open+begin popup when clicked on last item. Use str_id==NULL to associate the popup to previous item. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! |     IMGUI_API bool          BeginPopupContextItem(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);  // open+begin popup when clicked on last item. Use str_id==NULL to associate the popup to previous item. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! | ||||||
|     IMGUI_API bool          BeginPopupContextWindow(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);// open+begin popup when clicked on current window. |     IMGUI_API bool          BeginPopupContextWindow(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);// open+begin popup when clicked on current window. | ||||||
|     IMGUI_API bool          BeginPopupContextVoid(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);  // open+begin popup when clicked in void (where there are no windows). |     IMGUI_API bool          BeginPopupContextVoid(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);  // open+begin popup when clicked in void (where there are no windows). | ||||||
|  |  | ||||||
|     // Popups: query functions |     // Popups: query functions | ||||||
|     //  - IsPopupOpen(): return true if the popup is open at the current BeginPopup() level of the popup stack. |     //  - IsPopupOpen(): return true if the popup is open at the current BeginPopup() level of the popup stack. | ||||||
|     //  - IsPopupOpen() with ImGuiPopupFlags_AnyPopupId: return true if any popup is open at the current BeginPopup() level of the popup stack. |     //  - IsPopupOpen() with ImGuiPopupFlags_AnyPopupId: return true if any popup is open at the current BeginPopup() level of the popup stack. | ||||||
| @@ -715,6 +725,7 @@ namespace ImGui | |||||||
|     IMGUI_API void          TableNextRow(ImGuiTableRowFlags row_flags = 0, float min_row_height = 0.0f); // append into the first cell of a new row. |     IMGUI_API void          TableNextRow(ImGuiTableRowFlags row_flags = 0, float min_row_height = 0.0f); // append into the first cell of a new row. | ||||||
|     IMGUI_API bool          TableNextColumn();                          // append into the next column (or first column of next row if currently in last column). Return true when column is visible. |     IMGUI_API bool          TableNextColumn();                          // append into the next column (or first column of next row if currently in last column). Return true when column is visible. | ||||||
|     IMGUI_API bool          TableSetColumnIndex(int column_n);          // append into the specified column. Return true when column is visible. |     IMGUI_API bool          TableSetColumnIndex(int column_n);          // append into the specified column. Return true when column is visible. | ||||||
|  |  | ||||||
|     // Tables: Headers & Columns declaration |     // Tables: Headers & Columns declaration | ||||||
|     // - Use TableSetupColumn() to specify label, resizing policy, default width/weight, id, various other flags etc. |     // - Use TableSetupColumn() to specify label, resizing policy, default width/weight, id, various other flags etc. | ||||||
|     // - Use TableHeadersRow() to create a header row and automatically submit a TableHeader() for each column. |     // - Use TableHeadersRow() to create a header row and automatically submit a TableHeader() for each column. | ||||||
| @@ -727,6 +738,7 @@ namespace ImGui | |||||||
|     IMGUI_API void          TableSetupScrollFreeze(int cols, int rows); // lock columns/rows so they stay visible when scrolled. |     IMGUI_API void          TableSetupScrollFreeze(int cols, int rows); // lock columns/rows so they stay visible when scrolled. | ||||||
|     IMGUI_API void          TableHeadersRow();                          // submit all headers cells based on data provided to TableSetupColumn() + submit context menu |     IMGUI_API void          TableHeadersRow();                          // submit all headers cells based on data provided to TableSetupColumn() + submit context menu | ||||||
|     IMGUI_API void          TableHeader(const char* label);             // submit one header cell manually (rarely used) |     IMGUI_API void          TableHeader(const char* label);             // submit one header cell manually (rarely used) | ||||||
|  |  | ||||||
|     // Tables: Sorting |     // Tables: Sorting | ||||||
|     // - Call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting. |     // - Call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting. | ||||||
|     // - When 'SpecsDirty == true' you should sort your data. It will be true when sorting specs have changed |     // - When 'SpecsDirty == true' you should sort your data. It will be true when sorting specs have changed | ||||||
| @@ -734,6 +746,7 @@ namespace ImGui | |||||||
|     //   wastefully sort your data every frame! |     //   wastefully sort your data every frame! | ||||||
|     // - Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable(). |     // - Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable(). | ||||||
|     IMGUI_API ImGuiTableSortSpecs*  TableGetSortSpecs();                        // get latest sort specs for the table (NULL if not sorting). |     IMGUI_API ImGuiTableSortSpecs*  TableGetSortSpecs();                        // get latest sort specs for the table (NULL if not sorting). | ||||||
|  |  | ||||||
|     // Tables: Miscellaneous functions |     // Tables: Miscellaneous functions | ||||||
|     // - Functions args 'int column_n' treat the default value of -1 as the same as passing the current column index. |     // - Functions args 'int column_n' treat the default value of -1 as the same as passing the current column index. | ||||||
|     IMGUI_API int                   TableGetColumnCount();                      // return number of columns (value passed to BeginTable) |     IMGUI_API int                   TableGetColumnCount();                      // return number of columns (value passed to BeginTable) | ||||||
| @@ -744,7 +757,7 @@ namespace ImGui | |||||||
|     IMGUI_API void                  TableSetColumnEnabled(int column_n, bool v);// change user accessible enabled/disabled state of a column. Set to false to hide the column. User can use the context menu to change this themselves (right-click in headers, or right-click in columns body with ImGuiTableFlags_ContextMenuInBody) |     IMGUI_API void                  TableSetColumnEnabled(int column_n, bool v);// change user accessible enabled/disabled state of a column. Set to false to hide the column. User can use the context menu to change this themselves (right-click in headers, or right-click in columns body with ImGuiTableFlags_ContextMenuInBody) | ||||||
|     IMGUI_API void                  TableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n = -1);  // change the color of a cell, row, or column. See ImGuiTableBgTarget_ flags for details. |     IMGUI_API void                  TableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n = -1);  // change the color of a cell, row, or column. See ImGuiTableBgTarget_ flags for details. | ||||||
|  |  | ||||||
|     // Legacy Columns API (2020: prefer using Tables!) |     // Legacy Columns API (prefer using Tables!) | ||||||
|     // - You can also use SameLine(pos_x) to mimic simplified columns. |     // - You can also use SameLine(pos_x) to mimic simplified columns. | ||||||
|     IMGUI_API void          Columns(int count = 1, const char* id = NULL, bool border = true); |     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 void          NextColumn();                                                       // next column, defaults to current row or next row if the current row is finished | ||||||
|   | |||||||
| @@ -1078,6 +1078,9 @@ struct IMGUI_API ImGuiInputTextState | |||||||
|     void        CursorClamp()               { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); } |     void        CursorClamp()               { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); } | ||||||
|     bool        HasSelection() const        { return Stb.select_start != Stb.select_end; } |     bool        HasSelection() const        { return Stb.select_start != Stb.select_end; } | ||||||
|     void        ClearSelection()            { Stb.select_start = Stb.select_end = Stb.cursor; } |     void        ClearSelection()            { Stb.select_start = Stb.select_end = Stb.cursor; } | ||||||
|  |     int         GetCursorPos() const        { return Stb.cursor; } | ||||||
|  |     int         GetSelectionStart() const   { return Stb.select_start; } | ||||||
|  |     int         GetSelectionEnd() const     { return Stb.select_end; } | ||||||
|     void        SelectAll()                 { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; } |     void        SelectAll()                 { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user