1
0
Fork 0
mirror of https://github.com/ocornut/imgui.git synced 2026-01-09 23:54:20 +00:00

Add C++ module support

This commit is contained in:
Toyosatomimi no Miko 2025-11-25 01:53:42 -05:00
parent 922a11f084
commit 3ce5c37b39
2 changed files with 684 additions and 1 deletions

View file

@ -39,7 +39,7 @@ Dear ImGui is particularly suited to integration in game engines (for tooling),
### Usage
**The core of Dear ImGui is self-contained within a few platform-agnostic files** which you can easily compile in your application/engine. They are all the files in the root folder of the repository (`imgui*.cpp`, `imgui*.h`). **No specific build process is required**: you can add all files into your existing project.
**The core of Dear ImGui is self-contained within a few platform-agnostic files** which you can easily compile in your application/engine. They are all the files in the root folder of the repository (`imgui*.cpp`, `imgui*.h`). **No specific build process is required**: you can add all files into your existing project. Dear ImGui is provided as a C++ module for users of C++20 and above, in file `imgui.cppm` as module `ImGui`.
**Backends for a variety of graphics API and rendering platforms** are provided in the [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder, along with example applications in the [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder. You may also create your own backend. Anywhere where you can render textured triangles, you can render Dear ImGui.

683
imgui.cppm Normal file
View file

@ -0,0 +1,683 @@
// dear imgui, v1.92.6 WIP
// (modules)
module;
#include "imgui.h"
export module ImGui;
export {
// Scalar data types
using ::ImGuiID;
using ::ImS8;
using ::ImU8;
using ::ImS16;
using ::ImU16;
using ::ImS32;
using ::ImU32;
using ::ImS64;
using ::ImU64;
// Forward declarations: ImDrawList, ImFontAtlas layer
using ::ImDrawChannel;
using ::ImDrawCmd;
using ::ImDrawData;
using ::ImDrawList;
using ::ImDrawListSharedData;
using ::ImDrawListSplitter;
using ::ImDrawVert;
using ::ImFont;
using ::ImFontAtlas;
using ::ImFontAtlasBuilder;
using ::ImFontAtlasRect;
using ::ImFontBaked;
using ::ImFontConfig;
using ::ImFontGlyph;
using ::ImFontGlyphRangesBuilder;
using ::ImFontLoader;
using ::ImTextureData;
using ::ImTextureRect;
using ::ImColor;
// Forward declarations: ImGui layer
using ::ImGuiContext;
using ::ImGuiIO;
using ::ImGuiInputTextCallbackData;
using ::ImGuiKeyData;
using ::ImGuiListClipper;
using ::ImGuiMultiSelectIO;
using ::ImGuiOnceUponAFrame;
using ::ImGuiPayload;
using ::ImGuiPlatformIO;
using ::ImGuiPlatformImeData;
using ::ImGuiSelectionBasicStorage;
using ::ImGuiSelectionExternalStorage;
using ::ImGuiSelectionRequest;
using ::ImGuiSizeCallbackData;
using ::ImGuiStorage;
using ::ImGuiStoragePair;
using ::ImGuiStyle;
using ::ImGuiTableSortSpecs;
using ::ImGuiTableColumnSortSpecs;
using ::ImGuiTextBuffer;
using ::ImGuiTextFilter;
using ::ImGuiViewport;
// Enumerations
using ::ImGuiDir;
using ::ImGuiKey;
using ::ImGuiMouseSource;
using ::ImGuiSortDirection;
using ::ImGuiCol;
using ::ImGuiCond;
using ::ImGuiDataType;
using ::ImGuiMouseButton;
using ::ImGuiMouseCursor;
using ::ImGuiStyleVar;
using ::ImGuiTableBgTarget;
// Flags
using ::ImDrawFlags;
using ::ImDrawListFlags;
using ::ImDrawTextFlags;
using ::ImFontFlags;
using ::ImFontAtlasFlags;
using ::ImGuiBackendFlags;
using ::ImGuiButtonFlags;
using ::ImGuiChildFlags;
using ::ImGuiColorEditFlags;
using ::ImGuiConfigFlags;
using ::ImGuiComboFlags;
using ::ImGuiDragDropFlags;
using ::ImGuiFocusedFlags;
using ::ImGuiHoveredFlags;
using ::ImGuiInputFlags;
using ::ImGuiInputTextFlags;
using ::ImGuiInputTextFlags;
using ::ImGuiItemFlags;
using ::ImGuiKeyChord;
using ::ImGuiListClipperFlags;
using ::ImGuiPopupFlags;
using ::ImGuiMultiSelectFlags;
using ::ImGuiSelectableFlags;
using ::ImGuiSliderFlags;
using ::ImGuiTabBarFlags;
using ::ImGuiTabItemFlags;
using ::ImGuiTableFlags;
using ::ImGuiTableColumnFlags;
using ::ImGuiTableRowFlags;
using ::ImGuiViewportFlags;
using ::ImGuiWindowFlags;
// Character types
using ::ImWchar32;
using ::ImWchar16;
using ::ImWchar;
// Multi-Selection item index or identifier when using BeginMultiSelect()
using ::ImGuiSelectionUserData;
// Callback and functions types
using ::ImGuiInputTextCallback;
using ::ImGuiSizeCallback;
using ::ImGuiMemAllocFunc;
using ::ImGuiMemFreeFunc;
// ImVec2
using ::ImVec2;
// ImVec4
using ::ImVec4;
// ImTextureID
#ifndef ImTextureID
using ::ImTextureID;
#endif
// ImTextureRef
using ::ImTextureRef;
// IM_MALLOC(), IM_FREE(), IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE()
using ::ImNewWrapper;
using ::operator new;
using ::operator delete;
constexpr void* IM_ALLOC(size_t _SIZE) {
return ImGui::MemAlloc(_SIZE);
}
constexpr void IM_FREE(void* _PTR) {
ImGui::MemFree(_PTR);
}
using ::IM_DELETE;
using ::ImVector;
}
export namespace ImGui {
// Context creation and access
using ImGui::CreateContext;
using ImGui::DestroyContext;
using ImGui::GetCurrentContext;
using ImGui::SetCurrentContext;
// Main
using ImGui::GetIO;
using ImGui::GetPlatformIO;
using ImGui::GetStyle;
using ImGui::NewFrame;
using ImGui::EndFrame;
using ImGui::Render;
using ImGui::GetDrawData;
// Demo, Debug, Information
using ImGui::ShowDemoWindow;
using ImGui::ShowMetricsWindow;
using ImGui::ShowDebugLogWindow;
using ImGui::ShowIDStackToolWindow;
using ImGui::ShowAboutWindow;
using ImGui::ShowStyleEditor;
using ImGui::ShowStyleSelector;
using ImGui::ShowFontSelector;
using ImGui::ShowUserGuide;
using ImGui::GetVersion;
// Styles
using ImGui::StyleColorsDark;
using ImGui::StyleColorsLight;
using ImGui::StyleColorsClassic;
// Windows
using ImGui::Begin;
using ImGui::End;
// Child Windows
using ImGui::BeginChild;
using ImGui::EndChild;
// Windows Utilities
using ImGui::IsWindowAppearing;
using ImGui::IsWindowCollapsed;
using ImGui::IsWindowFocused;
using ImGui::IsWindowHovered;
using ImGui::GetWindowDrawList;
using ImGui::GetWindowPos;
using ImGui::GetWindowSize;
using ImGui::GetWindowWidth;
using ImGui::GetWindowHeight;
// Window manipulation
using ImGui::SetNextWindowPos;
using ImGui::SetNextWindowSize;
using ImGui::SetNextWindowSizeConstraints;
using ImGui::SetNextWindowContentSize;
using ImGui::SetNextWindowCollapsed;
using ImGui::SetNextWindowFocus;
using ImGui::SetNextWindowScroll;
using ImGui::SetNextWindowBgAlpha;
using ImGui::SetWindowPos;
using ImGui::SetWindowSize;
using ImGui::SetWindowCollapsed;
using ImGui::SetWindowFocus;
// Windows Scrolling
using ImGui::GetScrollX;
using ImGui::GetScrollY;
using ImGui::SetScrollX;
using ImGui::SetScrollY;
using ImGui::GetScrollMaxX;
using ImGui::GetScrollMaxY;
using ImGui::SetScrollHereX;
using ImGui::SetScrollHereY;
using ImGui::SetScrollFromPosX;
using ImGui::SetScrollFromPosY;
// Parameters stacks (font)
using ImGui::PushFont;
using ImGui::PopFont;
using ImGui::GetFont;
using ImGui::GetFontSize;
using ImGui::GetFontBaked;
// Parameters stacks (shared)
using ImGui::PushStyleColor;
using ImGui::PopStyleColor;
using ImGui::PushStyleVar;
using ImGui::PushStyleVarX;
using ImGui::PushStyleVarY;
using ImGui::PopStyleVar;
using ImGui::PushItemFlag;
using ImGui::PopItemFlag;
// Parameters stacks (current window)
using ImGui::PushItemWidth;
using ImGui::PopItemWidth;
using ImGui::SetNextItemWidth;
using ImGui::CalcItemWidth;
using ImGui::PushTextWrapPos;
using ImGui::PopTextWrapPos;
// Style read access
using ImGui::GetFontTexUvWhitePixel;
using ImGui::GetColorU32;
using ImGui::GetStyleColorVec4;
// Layout cursor positioning
using ImGui::GetCursorScreenPos;
using ImGui::SetCursorScreenPos;
using ImGui::GetContentRegionAvail;
using ImGui::GetCursorPos;
using ImGui::GetCursorPosX;
using ImGui::GetCursorPosY;
using ImGui::SetCursorPos;
using ImGui::SetCursorPosX;
using ImGui::SetCursorPosY;
using ImGui::GetCursorStartPos;
// Other layout functions
using ImGui::Separator;
using ImGui::SameLine;
using ImGui::NewLine;
using ImGui::Spacing;
using ImGui::Dummy;
using ImGui::Indent;
using ImGui::Unindent;
using ImGui::BeginGroup;
using ImGui::EndGroup;
using ImGui::AlignTextToFramePadding;
using ImGui::GetTextLineHeight;
using ImGui::GetTextLineHeightWithSpacing;
using ImGui::GetFrameHeight;
using ImGui::GetFrameHeightWithSpacing;
// ID stack/scopes
using ImGui::PushID;
using ImGui::PopID;
using ImGui::GetID;
// Widgets: Text
using ImGui::TextUnformatted;
using ImGui::Text;
using ImGui::TextV;
using ImGui::TextColored;
using ImGui::TextColoredV;
using ImGui::TextDisabled;
using ImGui::TextDisabledV;
using ImGui::TextWrapped;
using ImGui::TextWrappedV;
using ImGui::LabelText;
using ImGui::LabelTextV;
using ImGui::BulletText;
using ImGui::BulletTextV;
using ImGui::SeparatorText;
// Widgets: Main
using ImGui::Button;
using ImGui::SmallButton;
using ImGui::InvisibleButton;
using ImGui::ArrowButton;
using ImGui::Checkbox;
using ImGui::CheckboxFlags;
using ImGui::RadioButton;
using ImGui::ProgressBar;
using ImGui::Bullet;
using ImGui::TextLink;
using ImGui::TextLinkOpenURL;
// Widgets: Images
using ImGui::Image;
using ImGui::ImageWithBg;
using ImGui::ImageButton;
// Widgets: Combo Box (Dropdown)
using ImGui::BeginCombo;
using ImGui::EndCombo;
using ImGui::Combo;
// Widgets: Drag Sliders
using ImGui::DragFloat;
using ImGui::DragFloat2;
using ImGui::DragFloat3;
using ImGui::DragFloat4;
using ImGui::DragFloatRange2;
using ImGui::DragInt;
using ImGui::DragInt2;
using ImGui::DragInt3;
using ImGui::DragInt4;
using ImGui::DragIntRange2;
using ImGui::DragScalar;
using ImGui::DragScalarN;
// Widgets: Regular Sliders
using ImGui::SliderFloat;
using ImGui::SliderFloat2;
using ImGui::SliderFloat3;
using ImGui::SliderFloat4;
using ImGui::SliderAngle;
using ImGui::SliderInt;
using ImGui::SliderInt2;
using ImGui::SliderInt3;
using ImGui::SliderInt4;
using ImGui::SliderScalar;
using ImGui::SliderScalarN;
using ImGui::VSliderFloat;
using ImGui::VSliderInt;
using ImGui::VSliderScalar;
// Widgets: Input with Keyboard
using ImGui::InputText;
using ImGui::InputTextMultiline;
using ImGui::InputTextWithHint;
using ImGui::InputFloat;
using ImGui::InputFloat2;
using ImGui::InputFloat3;
using ImGui::InputFloat4;
using ImGui::InputInt;
using ImGui::InputInt2;
using ImGui::InputInt3;
using ImGui::InputInt4;
using ImGui::InputDouble;
using ImGui::InputScalar;
using ImGui::InputScalarN;
// Widgets: Color Editor/Picker
using ImGui::ColorEdit3;
using ImGui::ColorEdit4;
using ImGui::ColorPicker3;
using ImGui::ColorPicker4;
using ImGui::ColorButton;
using ImGui::SetColorEditOptions;
// Widgets: Trees
using ImGui::TreeNode;
using ImGui::TreeNodeV;
using ImGui::TreeNodeEx;
using ImGui::TreeNodeExV;
using ImGui::TreePush;
using ImGui::TreePop;
using ImGui::GetTreeNodeToLabelSpacing;
using ImGui::CollapsingHeader;
using ImGui::SetNextItemOpen;
using ImGui::SetNextItemStorageID;
// Widgets: Selectables
using ImGui::Selectable;
// Multi-selection system for Selectable(), Checkbox(), TreeNode() functions [BETA]
using ImGui::BeginMultiSelect;
using ImGui::EndMultiSelect;
using ImGui::SetNextItemSelectionUserData;
using ImGui::IsItemToggledSelection;
// Widgets: List Boxes
using ImGui::BeginListBox;
using ImGui::EndListBox;
using ImGui::ListBox;
// Widgets: Data Plotting
using ImGui::PlotLines;
using ImGui::PlotHistogram;
// Widgets: Value() Helpers.
using ImGui::Value;
// Widgets: Menus
using ImGui::BeginMenuBar;
using ImGui::EndMenuBar;
using ImGui::BeginMainMenuBar;
using ImGui::EndMainMenuBar;
using ImGui::BeginMenu;
using ImGui::EndMenu;
using ImGui::MenuItem;
// Tooltips
using ImGui::BeginTooltip;
using ImGui::EndTooltip;
using ImGui::SetTooltip;
using ImGui::SetTooltipV;
// Tooltips: helpers for showing a tooltip when hovering an item
using ImGui::BeginItemTooltip;
using ImGui::SetItemTooltip;
using ImGui::SetItemTooltipV;
// Popups, Modals
using ImGui::BeginPopup;
using ImGui::BeginPopupModal;
using ImGui::EndPopup;
// Popups: open/close functions
using ImGui::OpenPopup;
using ImGui::OpenPopupOnItemClick;
using ImGui::CloseCurrentPopup;
// Popups: open+begin combined functions helpers
using ImGui::BeginPopupContextItem;
using ImGui::BeginPopupContextWindow;
using ImGui::BeginPopupContextVoid;
// Popups: query functions
using ImGui::IsPopupOpen;
// Tables
using ImGui::BeginTable;
using ImGui::EndTable;
using ImGui::TableNextRow;
using ImGui::TableNextColumn;
using ImGui::TableSetColumnIndex;
// Tables: Headers & Columns declaration
using ImGui::TableSetupColumn;
using ImGui::TableSetupScrollFreeze;
using ImGui::TableHeader;
using ImGui::TableHeadersRow;
using ImGui::TableAngledHeadersRow;
// Tables: Sorting & Miscellaneous functions
using ImGui::TableGetSortSpecs;
using ImGui::TableGetColumnCount;
using ImGui::TableGetColumnIndex;
using ImGui::TableGetRowIndex;
using ImGui::TableGetColumnName;
using ImGui::TableGetColumnFlags;
using ImGui::TableSetColumnEnabled;
using ImGui::TableGetHoveredColumn;
using ImGui::TableSetBgColor;
// Legacy Columns API
using ImGui::Columns;
using ImGui::NextColumn;
using ImGui::GetColumnIndex;
using ImGui::GetColumnWidth;
using ImGui::SetColumnWidth;
using ImGui::GetColumnOffset;
using ImGui::SetColumnOffset;
using ImGui::GetColumnsCount;
// Tab Bars, Tabs
using ImGui::BeginTabBar;
using ImGui::EndTabBar;
using ImGui::BeginTabItem;
using ImGui::EndTabItem;
using ImGui::TabItemButton;
using ImGui::SetTabItemClosed;
// Logging/Capture
using ImGui::LogToTTY;
using ImGui::LogToFile;
using ImGui::LogToClipboard;
using ImGui::LogFinish;
using ImGui::LogButtons;
using ImGui::LogText;
using ImGui::LogTextV;
// Drag and Drop
using ImGui::BeginDragDropSource;
using ImGui::SetDragDropPayload;
using ImGui::EndDragDropSource;
using ImGui::BeginDragDropTarget;
using ImGui::AcceptDragDropPayload;
using ImGui::EndDragDropTarget;
using ImGui::GetDragDropPayload;
// Disabling [BETA API]
using ImGui::BeginDisabled;
using ImGui::EndDisabled;
// Clipping
using ImGui::PushClipRect;
using ImGui::PopClipRect;
// Focus, Activation
using ImGui::SetItemDefaultFocus;
using ImGui::SetKeyboardFocusHere;
// Keyboard/Gamepad Navigation
using ImGui::SetNavCursorVisible;
// Overlapping mode
using ImGui::SetNextItemAllowOverlap;
// Item/Widgets Utilities and Query Functions
using ImGui::IsItemHovered;
using ImGui::IsItemActive;
using ImGui::IsItemFocused;
using ImGui::IsItemClicked;
using ImGui::IsItemVisible;
using ImGui::IsItemEdited;
using ImGui::IsItemActivated;
using ImGui::IsItemDeactivated;
using ImGui::IsItemDeactivatedAfterEdit;
using ImGui::IsItemToggledOpen;
using ImGui::IsAnyItemHovered;
using ImGui::IsAnyItemActive;
using ImGui::IsAnyItemFocused;
using ImGui::GetItemID;
using ImGui::GetItemRectMin;
using ImGui::GetItemRectMax;
using ImGui::GetItemRectSize;
// Viewports
using ImGui::GetMainViewport;
// Background/Foreground Draw Lists
using ImGui::GetBackgroundDrawList;
using ImGui::GetForegroundDrawList;
// Miscellaneous Utilities
using ImGui::IsRectVisible;
using ImGui::GetTime;
using ImGui::GetFrameCount;
using ImGui::GetDrawListSharedData;
using ImGui::GetStyleColorName;
using ImGui::SetStateStorage;
using ImGui::GetStateStorage;
// Text Utilities
using ImGui::CalcTextSize;
// Color Utilities
using ImGui::ColorConvertU32ToFloat4;
using ImGui::ColorConvertFloat4ToU32;
using ImGui::ColorConvertRGBtoHSV;
using ImGui::ColorConvertHSVtoRGB;
// Inputs Utilities: Keyboard/Mouse/Gamepad
using ImGui::IsKeyDown;
using ImGui::IsKeyPressed;
using ImGui::IsKeyReleased;
using ImGui::IsKeyChordPressed;
using ImGui::GetKeyPressedAmount;
using ImGui::GetKeyName;
using ImGui::SetNextFrameWantCaptureKeyboard;
// Inputs Utilities: Shortcut Testing & Routing [BETA]
using ImGui::Shortcut;
using ImGui::SetNextItemShortcut;
// Inputs Utilities: Key/Input Ownership [BETA]
using ImGui::SetItemKeyOwner;
// Inputs Utilities: Mouse
using ImGui::IsMouseDown;
using ImGui::IsMouseClicked;
using ImGui::IsMouseReleased;
using ImGui::IsMouseDoubleClicked;
using ImGui::IsMouseReleasedWithDelay;
using ImGui::GetMouseClickedCount;
using ImGui::IsMouseHoveringRect;
using ImGui::IsMousePosValid;
using ImGui::IsAnyMouseDown;
using ImGui::GetMousePos;
using ImGui::GetMousePosOnOpeningCurrentPopup;
using ImGui::IsMouseDragging;
using ImGui::GetMouseDragDelta;
using ImGui::ResetMouseDragDelta;
using ImGui::GetMouseCursor;
using ImGui::SetMouseCursor;
using ImGui::SetNextFrameWantCaptureMouse;
// Clipboard Utilities
using ImGui::GetClipboardText;
using ImGui::SetClipboardText;
// Settings/.Ini Utilities
using ImGui::LoadIniSettingsFromDisk;
using ImGui::LoadIniSettingsFromMemory;
using ImGui::SaveIniSettingsToDisk;
using ImGui::SaveIniSettingsToMemory;
// Debug Utilities
using ImGui::DebugTextEncoding;
using ImGui::DebugFlashStyleColor;
using ImGui::DebugStartItemPicker;
using ImGui::DebugCheckVersionAndDataLayout;
#ifndef IMGUI_DISABLE_DEBUG_TOOLS
using ImGui::DebugLog;
using ImGui::DebugLogV;
#endif
// Memory Allocators
using ImGui::SetAllocatorFunctions;
using ImGui::GetAllocatorFunctions;
using ImGui::MemAlloc;
using ImGui::MemFree;
}
export {
using ::ImGuiWindowFlags_;
using ::ImGuiChildFlags_;
using ::ImGuiItemFlags_;
using ::ImGuiInputTextFlags_;
using ::ImGuiTreeNodeFlags_;
using ::ImGuiPopupFlags_;
using ::ImGuiSelectableFlags_;
using ::ImGuiComboFlags_;
using ::ImGuiTabBarFlags_;
using ::ImGuiTabItemFlags_;
using ::ImGuiFocusedFlags_;
using ::ImGuiHoveredFlags_;
using ::ImGuiDragDropFlags_;
using ::ImGuiDataType_;
using ::ImGuiInputFlags_;
using ::ImGuiConfigFlags_;
using ::ImGuiBackendFlags_;
using ::ImGuiCol_;
using ::ImGuiStyleVar_;
using ::ImGuiButtonFlags_;
using ::ImGuiColorEditFlags_;
using ::ImGuiSliderFlags_;
using ::ImGuiMouseButton_;
using ::ImGuiMouseCursor_;
using ::ImGuiCond_;
using ::ImGuiTableFlags_;
using ::ImGuiTableColumnFlags_;
using ::ImGuiTableRowFlags_;
using ::ImGuiTableBgTarget_;
using ::ImGuiListClipperFlags_;
using ::ImGuiMultiSelectFlags_;
using ::ImGuiSelectionRequestType;
using ::ImDrawFlags_;
using ::ImDrawListFlags_;
using ::ImFontAtlasFlags_;
using ::ImFontFlags_;
using ::ImGuiViewportFlags_;
}