diff --git a/src/ImGui.NET/ImGui.NET.csproj b/src/ImGui.NET/ImGui.NET.csproj
index 0ca1b77..a4b413d 100644
--- a/src/ImGui.NET/ImGui.NET.csproj
+++ b/src/ImGui.NET/ImGui.NET.csproj
@@ -5,7 +5,7 @@
14.0
{2665014F-0FEC-4268-8F77-7B029921AB09}
Library
- ImGui
+ ImGuiNET
ImGui.NET
true
@@ -15,6 +15,7 @@
+
diff --git a/src/ImGui.NET/ImGui.cs b/src/ImGui.NET/ImGui.cs
index 87b192d..4704086 100644
--- a/src/ImGui.NET/ImGui.cs
+++ b/src/ImGui.NET/ImGui.cs
@@ -1,4 +1,6 @@
-using System.Numerics;
+using System;
+using System.Numerics;
+using System.Runtime.InteropServices;
namespace ImGuiNET
{
@@ -25,6 +27,16 @@ namespace ImGuiNET
ImGuiNative.igText(message);
}
+ public static void PushId(string id)
+ {
+ ImGuiNative.igPushIdStr(id);
+ }
+
+ public static void PopId()
+ {
+ ImGuiNative.igPopId();
+ }
+
public static void Text(string message, Vector4 color)
{
ImGuiNative.igTextColored(color, message);
@@ -35,6 +47,16 @@ namespace ImGuiNET
return ImGuiNative.igButton(message, size);
}
+ public static void SetNextWindowSize(Vector2 size, SetCondition condition)
+ {
+ ImGuiNative.igSetNextWindowSize(size, condition);
+ }
+
+ public static void SetNextWindowPosCenter(SetCondition condition)
+ {
+ ImGuiNative.igSetNextWindowPosCenter(condition);
+ }
+
///
/// Helper to scale the ClipRect field of each ImDrawCmd.
/// Use if your final output buffer is at a different scale than ImGui expects,
@@ -55,5 +77,210 @@ namespace ImGuiNET
}
}
}
+
+ public static float GetWindowHeight()
+ {
+ return ImGuiNative.igGetWindowHeight();
+ }
+
+ public static bool ColorButton(Vector4 color, bool smallHeight, bool outlineBorder)
+ {
+ return ImGuiNative.igColorButton(color, smallHeight, outlineBorder);
+ }
+
+ public static float GetWindowWidth()
+ {
+ return ImGuiNative.igGetWindowWidth();
+ }
+
+ public static bool BeginWindow(string windowTitle) => BeginWindow(windowTitle, WindowFlags.Default);
+
+ public static bool BeginWindow(string windowTitle, WindowFlags flags)
+ {
+ bool opened = true;
+ return ImGuiNative.igBegin(windowTitle, ref opened, flags);
+ }
+
+ public static bool BeginWindow(string windowTitle, ref bool opened, WindowFlags flags)
+ {
+ return ImGuiNative.igBegin(windowTitle, ref opened, flags);
+ }
+
+ public static bool BeginWindow(string windowTitle, ref bool opened, float backgroundAlpha, WindowFlags flags)
+ {
+ return ImGuiNative.igBegin2(windowTitle, ref opened, new Vector2(), backgroundAlpha, flags);
+ }
+
+ public static bool BeginMenu(string label, bool enabled)
+ {
+ return ImGuiNative.igBeginMenu(label, enabled);
+ }
+
+ public static void BeginMenuBar()
+ {
+ ImGuiNative.igBeginMenuBar();
+ }
+
+ public static bool BeginWindow(string windowTitle, ref bool opened, Vector2 startingSize, WindowFlags flags)
+ {
+ return ImGuiNative.igBegin2(windowTitle, ref opened, startingSize, 1f, flags);
+ }
+
+ public static void EndMenuBar()
+ {
+ ImGuiNative.igEndMenuBar();
+ }
+
+ public static void EndMenu()
+ {
+ ImGuiNative.igEndMenu();
+ }
+
+ public static bool BeginWindow(string windowTitle, ref bool opened, Vector2 startingSize, float backgroundAlpha, WindowFlags flags)
+ {
+ return ImGuiNative.igBegin2(windowTitle, ref opened, startingSize, backgroundAlpha, flags);
+ }
+
+ public static void Separator()
+ {
+ ImGuiNative.igSeparator();
+ }
+
+ public static bool MenuItem(string label, string shortcut)
+ {
+ return MenuItem(label, shortcut, false, true);
+ }
+
+ public static unsafe bool InputText(string label, IntPtr textBuffer, uint bufferSize, InputTextFlags flags, TextEditCallback textEditCallback)
+ {
+ return InputText(label, textBuffer, bufferSize, flags, textEditCallback, IntPtr.Zero);
+ }
+
+ public static unsafe bool InputText(string label, IntPtr textBuffer, uint bufferSize, InputTextFlags flags, TextEditCallback textEditCallback, IntPtr userData)
+ {
+ return ImGuiNative.igInputText(label, textBuffer, bufferSize, flags, textEditCallback, userData.ToPointer());
+ }
+
+ public static bool MenuItem(string label, string shortcut, bool selected, bool enabled)
+ {
+ return ImGuiNative.igMenuItem(label, shortcut, selected, enabled);
+ }
+
+ public static void EndWindow()
+ {
+ ImGuiNative.igEnd();
+ }
+
+ public static void PushStyleColor(ColorTarget target, Vector4 color)
+ {
+ ImGuiNative.igPushStyleColor(target, color);
+ }
+
+ public static unsafe void InputTextMultiline(string label, IntPtr textBuffer, uint bufferSize, Vector2 size, InputTextFlags flags, TextEditCallback callback, IntPtr userData)
+ {
+ ImGuiNative.igInputTextMultiline(label, textBuffer, bufferSize, size, flags, callback, userData.ToPointer());
+ }
+
+ public static void PopStyleColor()
+ {
+ PopStyleColor(1);
+ }
+
+ public static void PopStyleColor(int numStyles)
+ {
+ ImGuiNative.igPopStyleColor(numStyles);
+ }
+
+ public static bool BeginChildFrame(uint id, Vector2 size, WindowFlags flags)
+ {
+ return ImGuiNative.igBeginChildFrame(id, size, flags);
+ }
+
+ public static void EndChildFrame()
+ {
+ ImGuiNative.igEndChildFrame();
+ }
+
+ public static bool BeginChild(string id, Vector2 size, bool border, WindowFlags flags)
+ {
+ return ImGuiNative.igBeginChild(id, size, border, flags);
+ }
+
+ public static bool BeginChild(uint id, Vector2 size, bool border, WindowFlags flags)
+ {
+ return ImGuiNative.igBeginChildEx(id, size, border, flags);
+ }
+
+ public static void EndChild()
+ {
+ ImGuiNative.igEndChild();
+ }
+
+ public static bool Selectable(string label, bool isSelected)
+ {
+ return Selectable(label, isSelected, SelectableFlags.Default);
+ }
+
+ public static bool Selectable(string label, bool isSelected, SelectableFlags flags)
+ {
+ return Selectable(label, isSelected, flags, new Vector2());
+ }
+
+ public static bool Selectable(string label, bool isSelected, SelectableFlags flags, Vector2 size)
+ {
+ return ImGuiNative.igSelectable(label, isSelected, flags, size);
+ }
+
+ public static unsafe Vector2 GetTextSize(string text, float wrapWidth = Int32.MaxValue)
+ {
+ Vector2 result;
+ IntPtr buffer = Marshal.StringToHGlobalAnsi(text);
+ byte* textStart = (byte*)buffer.ToPointer();
+ byte* textEnd = textStart + text.Length;
+ ImGuiNative.igCalcTextSize(out result, (char*)textStart, (char*)textEnd, false, wrapWidth);
+ return result;
+ }
+
+ public static void SameLine()
+ {
+ ImGuiNative.igSameLine(0, 0);
+ }
+
+ public static void SameLine(float localPositionX, float spacingW)
+ {
+ ImGuiNative.igSameLine(localPositionX, spacingW);
+ }
+
+ public static bool IsLastItemHovered()
+ {
+ return ImGuiNative.igIsItemHovered();
+ }
+
+ public static void ShowTooltip(string text)
+ {
+ ImGuiNative.igSetTooltip(text);
+ }
+
+ public static void SetNextTreeNodeOpened(bool opened)
+ {
+ ImGuiNative.igSetNextTreeNodeOpened(opened, SetCondition.Always);
+ }
+
+ public static bool TreeNode(string label)
+ {
+ return ImGuiNative.igTreeNode(label);
+ }
+
+ public static void TreePop()
+ {
+ ImGuiNative.igTreePop();
+ }
+
+ public static Vector2 GetLastItemRect()
+ {
+ Vector2 result;
+ ImGuiNative.igGetItemRectSize(out result);
+ return result;
+ }
}
}
diff --git a/src/ImGui.NET/ImGuiNative.cs b/src/ImGui.NET/ImGuiNative.cs
index 0ee1a33..38b73ef 100644
--- a/src/ImGui.NET/ImGuiNative.cs
+++ b/src/ImGui.NET/ImGuiNative.cs
@@ -31,16 +31,6 @@ namespace ImGuiNET
[DllImport(cimguiLib)]
public static extern void igShowStyleEditor(ref Style @ref);
- public static void igBegin(string v, ref object _mainWindowOpened, WindowFlags windowFlags)
- {
- throw new NotImplementedException();
- }
-
- public static void igBeginChildFrame(uint _leftFrameId, Vector2 vector2)
- {
- throw new NotImplementedException();
- }
-
[DllImport(cimguiLib)]
public static extern void igShowTestWindow(ref bool opened);
[DllImport(cimguiLib)]
@@ -64,11 +54,6 @@ namespace ImGuiNET
[DllImport(cimguiLib)]
public static extern void igGetContentRegionAvail(out Vector2 @out);
- public static void igSliderFloat(string v1, ref object _sliderVal, float v2, float v3, string v4, int v5)
- {
- throw new NotImplementedException();
- }
-
[DllImport(cimguiLib)]
public static extern float igGetContentRegionAvailWidth();
[DllImport(cimguiLib)]
@@ -416,20 +401,11 @@ namespace ImGuiNET
public static extern bool igTreeNode(string str_label_id);
[DllImport(cimguiLib)]
- //public static extern bool igTreeNodeStr(string str_id, string fmt, ...);
public static extern bool igTreeNodeStr(string str_id, string fmt);
[DllImport(cimguiLib)]
- //public static extern bool igTreeNodePtr(void* ptr_id, string fmt, ...);
public static extern bool igTreeNodePtr(void* ptr_id, string fmt);
- /*
- [DllImport(LibName)]
- public static extern bool igTreeNodeStrV(string str_id, string fmt, va_list args);
- [DllImport(LibName)]
- public static extern bool igTreeNodePtrV(void* ptr_id, string fmt, va_list args);
- */
-
[DllImport(cimguiLib)]
public static extern void igTreePushStr(string str_id);
[DllImport(cimguiLib)]
@@ -443,7 +419,7 @@ namespace ImGuiNET
[DllImport(cimguiLib)]
public static extern bool igSelectable(string label, bool selected, SelectableFlags flags, Vector2 size);
[DllImport(cimguiLib)]
- public static extern bool igSelectableEx(string label, bool* p_selected, SelectableFlags flags, Vector2 size);
+ public static extern bool igSelectableEx(string label, ref bool p_selected, SelectableFlags flags, Vector2 size);
[DllImport(cimguiLib)]
public static extern bool igListBox(string label, int* current_item, char** items, int items_count, int height_in_items);
@@ -473,14 +449,7 @@ namespace ImGuiNET
// Tooltip
[DllImport(cimguiLib)]
- //public static extern void igSetTooltip(string fmt, ...);
public static extern void igSetTooltip(string fmt);
-
- /*
- [DllImport(LibName)]
- public static extern void igSetTooltipV(string fmt, va_list args);
- */
-
[DllImport(cimguiLib)]
public static extern void igBeginTooltip();
[DllImport(cimguiLib)]
@@ -569,11 +538,11 @@ namespace ImGuiNET
[DllImport(cimguiLib)]
public static extern bool igIsAnyItemActive();
[DllImport(cimguiLib)]
- public static extern void igGetItemRectMin(Vector2* pOut);
+ public static extern void igGetItemRectMin(out Vector2 pOut);
[DllImport(cimguiLib)]
- public static extern void igGetItemRectMax(Vector2* pOut);
+ public static extern void igGetItemRectMax(out Vector2 pOut);
[DllImport(cimguiLib)]
- public static extern void igGetItemRectSize(Vector2* pOut);
+ public static extern void igGetItemRectSize(out Vector2 pOut);
[DllImport(cimguiLib)]
public static extern bool igIsWindowHovered();
[DllImport(cimguiLib)]
@@ -593,9 +562,9 @@ namespace ImGuiNET
[DllImport(cimguiLib)]
public static extern string igGetStyleColName(ColorTarget idx);
[DllImport(cimguiLib)]
- public static extern void igCalcItemRectClosestPoint(Vector2* pOut, Vector2 pos, bool on_edge, float outward);
+ public static extern void igCalcItemRectClosestPoint(out Vector2 pOut, Vector2 pos, bool on_edge, float outward);
[DllImport(cimguiLib)]
- public static extern void igCalcTextSize(Vector2* pOut, string text, string text_end, bool hide_text_after_double_hash, float wrap_width);
+ public static extern void igCalcTextSize(out Vector2 pOut, char* text, char* text_end, bool hide_text_after_double_hash, float wrap_width);
[DllImport(cimguiLib)]
public static extern void igCalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end);
diff --git a/src/ImGui.NET/TextInputBuffer.cs b/src/ImGui.NET/TextInputBuffer.cs
new file mode 100644
index 0000000..2c37169
--- /dev/null
+++ b/src/ImGui.NET/TextInputBuffer.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace ImGuiNET
+{
+ public class TextInputBuffer : IDisposable
+ {
+ public IntPtr Buffer { get; private set; }
+ public uint Length { get; private set; }
+
+ public TextInputBuffer(int length)
+ {
+ CreateBuffer(length);
+ }
+
+ public TextInputBuffer(string initialText)
+ {
+ Buffer = Marshal.StringToHGlobalAnsi(initialText);
+ Length = (uint)initialText.Length;
+ }
+
+ public void Resize(int newSize)
+ {
+ ClearBuffer();
+ CreateBuffer(newSize);
+ }
+
+ private void CreateBuffer(int size)
+ {
+ Buffer = Marshal.AllocHGlobal(size);
+ Length = Length;
+ }
+
+ private void ClearBuffer()
+ {
+ Marshal.FreeHGlobal(Buffer);
+ Buffer = IntPtr.Zero;
+ Length = 0;
+ }
+
+ public void Dispose()
+ {
+ if (Buffer != IntPtr.Zero)
+ {
+ ClearBuffer();
+ }
+ }
+ }
+}
diff --git a/src/ImGui.NET/project.json b/src/ImGui.NET/project.json
index 4b4e5e9..4e48cce 100644
--- a/src/ImGui.NET/project.json
+++ b/src/ImGui.NET/project.json
@@ -1,7 +1,6 @@
{
"dependencies": {
- "Microsoft.NETCore.Console": "1.0.0-beta-23413",
- "System.Console": "4.0.0-beta-23427"
+ "Microsoft.NETCore.Console": "1.0.0-beta-23504"
},
"runtimes": {
"win10-x64": { },