using System; using System.Numerics; using System.Runtime.CompilerServices; using System.Text; namespace ImGuiNET { public unsafe partial struct ImDrawList { public ImVector CmdBuffer; public ImVector IdxBuffer; public ImVector VtxBuffer; public ImDrawListFlags Flags; public IntPtr _Data; public byte* _OwnerName; public uint _VtxCurrentOffset; public uint _VtxCurrentIdx; public ImDrawVert* _VtxWritePtr; public ushort* _IdxWritePtr; public ImVector _ClipRectStack; public ImVector _TextureIdStack; public ImVector _Path; public ImDrawListSplitter _Splitter; } public unsafe partial struct ImDrawListPtr { public ImDrawList* NativePtr { get; } public ImDrawListPtr(ImDrawList* nativePtr) => NativePtr = nativePtr; public ImDrawListPtr(IntPtr nativePtr) => NativePtr = (ImDrawList*)nativePtr; public static implicit operator ImDrawListPtr(ImDrawList* nativePtr) => new ImDrawListPtr(nativePtr); public static implicit operator ImDrawList* (ImDrawListPtr wrappedPtr) => wrappedPtr.NativePtr; public static implicit operator ImDrawListPtr(IntPtr nativePtr) => new ImDrawListPtr(nativePtr); public ImPtrVector CmdBuffer => new ImPtrVector(NativePtr->CmdBuffer, Unsafe.SizeOf()); public ImVector IdxBuffer => new ImVector(NativePtr->IdxBuffer); public ImPtrVector VtxBuffer => new ImPtrVector(NativePtr->VtxBuffer, Unsafe.SizeOf()); public ref ImDrawListFlags Flags => ref Unsafe.AsRef(&NativePtr->Flags); public ref IntPtr _Data => ref Unsafe.AsRef(&NativePtr->_Data); public NullTerminatedString _OwnerName => new NullTerminatedString(NativePtr->_OwnerName); public ref uint _VtxCurrentOffset => ref Unsafe.AsRef(&NativePtr->_VtxCurrentOffset); public ref uint _VtxCurrentIdx => ref Unsafe.AsRef(&NativePtr->_VtxCurrentIdx); public ImDrawVertPtr _VtxWritePtr => new ImDrawVertPtr(NativePtr->_VtxWritePtr); public IntPtr _IdxWritePtr { get => (IntPtr)NativePtr->_IdxWritePtr; set => NativePtr->_IdxWritePtr = (ushort*)value; } public ImVector _ClipRectStack => new ImVector(NativePtr->_ClipRectStack); public ImVector _TextureIdStack => new ImVector(NativePtr->_TextureIdStack); public ImVector _Path => new ImVector(NativePtr->_Path); public ref ImDrawListSplitter _Splitter => ref Unsafe.AsRef(&NativePtr->_Splitter); public void AddBezierCurve(Vector2 pos0, Vector2 cp0, Vector2 cp1, Vector2 pos1, uint col, float thickness) { int num_segments = 0; ImGuiNative.ImDrawList_AddBezierCurve(NativePtr, pos0, cp0, cp1, pos1, col, thickness, num_segments); } public void AddBezierCurve(Vector2 pos0, Vector2 cp0, Vector2 cp1, Vector2 pos1, uint col, float thickness, int num_segments) { ImGuiNative.ImDrawList_AddBezierCurve(NativePtr, pos0, cp0, cp1, pos1, col, thickness, num_segments); } public void AddCallback(IntPtr callback, IntPtr callback_data) { void* native_callback_data = (void*)callback_data.ToPointer(); ImGuiNative.ImDrawList_AddCallback(NativePtr, callback, native_callback_data); } public void AddCircle(Vector2 centre, float radius, uint col) { int num_segments = 12; float thickness = 1.0f; ImGuiNative.ImDrawList_AddCircle(NativePtr, centre, radius, col, num_segments, thickness); } public void AddCircle(Vector2 centre, float radius, uint col, int num_segments) { float thickness = 1.0f; ImGuiNative.ImDrawList_AddCircle(NativePtr, centre, radius, col, num_segments, thickness); } public void AddCircle(Vector2 centre, float radius, uint col, int num_segments, float thickness) { ImGuiNative.ImDrawList_AddCircle(NativePtr, centre, radius, col, num_segments, thickness); } public void AddCircleFilled(Vector2 centre, float radius, uint col) { int num_segments = 12; ImGuiNative.ImDrawList_AddCircleFilled(NativePtr, centre, radius, col, num_segments); } public void AddCircleFilled(Vector2 centre, float radius, uint col, int num_segments) { ImGuiNative.ImDrawList_AddCircleFilled(NativePtr, centre, radius, col, num_segments); } public void AddConvexPolyFilled(ref Vector2 points, int num_points, uint col) { fixed (Vector2* native_points = &points) { ImGuiNative.ImDrawList_AddConvexPolyFilled(NativePtr, native_points, num_points, col); } } public void AddDrawCmd() { ImGuiNative.ImDrawList_AddDrawCmd(NativePtr); } public void AddImage(IntPtr user_texture_id, Vector2 a, Vector2 b) { Vector2 uv_a = new Vector2(); Vector2 uv_b = new Vector2(1, 1); uint col = 0xFFFFFFFF; ImGuiNative.ImDrawList_AddImage(NativePtr, user_texture_id, a, b, uv_a, uv_b, col); } public void AddImage(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 uv_a) { Vector2 uv_b = new Vector2(1, 1); uint col = 0xFFFFFFFF; ImGuiNative.ImDrawList_AddImage(NativePtr, user_texture_id, a, b, uv_a, uv_b, col); } public void AddImage(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 uv_a, Vector2 uv_b) { uint col = 0xFFFFFFFF; ImGuiNative.ImDrawList_AddImage(NativePtr, user_texture_id, a, b, uv_a, uv_b, col); } public void AddImage(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 uv_a, Vector2 uv_b, uint col) { ImGuiNative.ImDrawList_AddImage(NativePtr, user_texture_id, a, b, uv_a, uv_b, col); } public void AddImageQuad(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 c, Vector2 d) { Vector2 uv_a = new Vector2(); Vector2 uv_b = new Vector2(1, 0); Vector2 uv_c = new Vector2(1, 1); Vector2 uv_d = new Vector2(0, 1); uint col = 0xFFFFFFFF; ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, a, b, c, d, uv_a, uv_b, uv_c, uv_d, col); } public void AddImageQuad(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 c, Vector2 d, Vector2 uv_a) { Vector2 uv_b = new Vector2(1, 0); Vector2 uv_c = new Vector2(1, 1); Vector2 uv_d = new Vector2(0, 1); uint col = 0xFFFFFFFF; ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, a, b, c, d, uv_a, uv_b, uv_c, uv_d, col); } public void AddImageQuad(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 c, Vector2 d, Vector2 uv_a, Vector2 uv_b) { Vector2 uv_c = new Vector2(1, 1); Vector2 uv_d = new Vector2(0, 1); uint col = 0xFFFFFFFF; ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, a, b, c, d, uv_a, uv_b, uv_c, uv_d, col); } public void AddImageQuad(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 c, Vector2 d, Vector2 uv_a, Vector2 uv_b, Vector2 uv_c) { Vector2 uv_d = new Vector2(0, 1); uint col = 0xFFFFFFFF; ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, a, b, c, d, uv_a, uv_b, uv_c, uv_d, col); } public void AddImageQuad(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 c, Vector2 d, Vector2 uv_a, Vector2 uv_b, Vector2 uv_c, Vector2 uv_d) { uint col = 0xFFFFFFFF; ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, a, b, c, d, uv_a, uv_b, uv_c, uv_d, col); } public void AddImageQuad(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 c, Vector2 d, Vector2 uv_a, Vector2 uv_b, Vector2 uv_c, Vector2 uv_d, uint col) { ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, a, b, c, d, uv_a, uv_b, uv_c, uv_d, col); } public void AddImageRounded(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 uv_a, Vector2 uv_b, uint col, float rounding) { ImDrawCornerFlags rounding_corners = ImDrawCornerFlags.All; ImGuiNative.ImDrawList_AddImageRounded(NativePtr, user_texture_id, a, b, uv_a, uv_b, col, rounding, rounding_corners); } public void AddImageRounded(IntPtr user_texture_id, Vector2 a, Vector2 b, Vector2 uv_a, Vector2 uv_b, uint col, float rounding, ImDrawCornerFlags rounding_corners) { ImGuiNative.ImDrawList_AddImageRounded(NativePtr, user_texture_id, a, b, uv_a, uv_b, col, rounding, rounding_corners); } public void AddLine(Vector2 a, Vector2 b, uint col) { float thickness = 1.0f; ImGuiNative.ImDrawList_AddLine(NativePtr, a, b, col, thickness); } public void AddLine(Vector2 a, Vector2 b, uint col, float thickness) { ImGuiNative.ImDrawList_AddLine(NativePtr, a, b, col, thickness); } public void AddPolyline(ref Vector2 points, int num_points, uint col, bool closed, float thickness) { byte native_closed = closed ? (byte)1 : (byte)0; fixed (Vector2* native_points = &points) { ImGuiNative.ImDrawList_AddPolyline(NativePtr, native_points, num_points, col, native_closed, thickness); } } public void AddQuad(Vector2 a, Vector2 b, Vector2 c, Vector2 d, uint col) { float thickness = 1.0f; ImGuiNative.ImDrawList_AddQuad(NativePtr, a, b, c, d, col, thickness); } public void AddQuad(Vector2 a, Vector2 b, Vector2 c, Vector2 d, uint col, float thickness) { ImGuiNative.ImDrawList_AddQuad(NativePtr, a, b, c, d, col, thickness); } public void AddQuadFilled(Vector2 a, Vector2 b, Vector2 c, Vector2 d, uint col) { ImGuiNative.ImDrawList_AddQuadFilled(NativePtr, a, b, c, d, col); } public void AddRect(Vector2 a, Vector2 b, uint col) { float rounding = 0.0f; ImDrawCornerFlags rounding_corners = ImDrawCornerFlags.All; float thickness = 1.0f; ImGuiNative.ImDrawList_AddRect(NativePtr, a, b, col, rounding, rounding_corners, thickness); } public void AddRect(Vector2 a, Vector2 b, uint col, float rounding) { ImDrawCornerFlags rounding_corners = ImDrawCornerFlags.All; float thickness = 1.0f; ImGuiNative.ImDrawList_AddRect(NativePtr, a, b, col, rounding, rounding_corners, thickness); } public void AddRect(Vector2 a, Vector2 b, uint col, float rounding, ImDrawCornerFlags rounding_corners) { float thickness = 1.0f; ImGuiNative.ImDrawList_AddRect(NativePtr, a, b, col, rounding, rounding_corners, thickness); } public void AddRect(Vector2 a, Vector2 b, uint col, float rounding, ImDrawCornerFlags rounding_corners, float thickness) { ImGuiNative.ImDrawList_AddRect(NativePtr, a, b, col, rounding, rounding_corners, thickness); } public void AddRectFilled(Vector2 a, Vector2 b, uint col) { float rounding = 0.0f; ImDrawCornerFlags rounding_corners = ImDrawCornerFlags.All; ImGuiNative.ImDrawList_AddRectFilled(NativePtr, a, b, col, rounding, rounding_corners); } public void AddRectFilled(Vector2 a, Vector2 b, uint col, float rounding) { ImDrawCornerFlags rounding_corners = ImDrawCornerFlags.All; ImGuiNative.ImDrawList_AddRectFilled(NativePtr, a, b, col, rounding, rounding_corners); } public void AddRectFilled(Vector2 a, Vector2 b, uint col, float rounding, ImDrawCornerFlags rounding_corners) { ImGuiNative.ImDrawList_AddRectFilled(NativePtr, a, b, col, rounding, rounding_corners); } public void AddRectFilledMultiColor(Vector2 a, Vector2 b, uint col_upr_left, uint col_upr_right, uint col_bot_right, uint col_bot_left) { ImGuiNative.ImDrawList_AddRectFilledMultiColor(NativePtr, a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); } public void AddTriangle(Vector2 a, Vector2 b, Vector2 c, uint col) { float thickness = 1.0f; ImGuiNative.ImDrawList_AddTriangle(NativePtr, a, b, c, col, thickness); } public void AddTriangle(Vector2 a, Vector2 b, Vector2 c, uint col, float thickness) { ImGuiNative.ImDrawList_AddTriangle(NativePtr, a, b, c, col, thickness); } public void AddTriangleFilled(Vector2 a, Vector2 b, Vector2 c, uint col) { ImGuiNative.ImDrawList_AddTriangleFilled(NativePtr, a, b, c, col); } public void ChannelsMerge() { ImGuiNative.ImDrawList_ChannelsMerge(NativePtr); } public void ChannelsSetCurrent(int n) { ImGuiNative.ImDrawList_ChannelsSetCurrent(NativePtr, n); } public void ChannelsSplit(int count) { ImGuiNative.ImDrawList_ChannelsSplit(NativePtr, count); } public void Clear() { ImGuiNative.ImDrawList_Clear(NativePtr); } public void ClearFreeMemory() { ImGuiNative.ImDrawList_ClearFreeMemory(NativePtr); } public ImDrawListPtr CloneOutput() { ImDrawList* ret = ImGuiNative.ImDrawList_CloneOutput(NativePtr); return new ImDrawListPtr(ret); } public void Destroy() { ImGuiNative.ImDrawList_destroy(NativePtr); } public Vector2 GetClipRectMax() { Vector2 ret = ImGuiNative.ImDrawList_GetClipRectMax(NativePtr); return ret; } public Vector2 GetClipRectMin() { Vector2 ret = ImGuiNative.ImDrawList_GetClipRectMin(NativePtr); return ret; } public void PathArcTo(Vector2 centre, float radius, float a_min, float a_max) { int num_segments = 10; ImGuiNative.ImDrawList_PathArcTo(NativePtr, centre, radius, a_min, a_max, num_segments); } public void PathArcTo(Vector2 centre, float radius, float a_min, float a_max, int num_segments) { ImGuiNative.ImDrawList_PathArcTo(NativePtr, centre, radius, a_min, a_max, num_segments); } public void PathArcToFast(Vector2 centre, float radius, int a_min_of_12, int a_max_of_12) { ImGuiNative.ImDrawList_PathArcToFast(NativePtr, centre, radius, a_min_of_12, a_max_of_12); } public void PathBezierCurveTo(Vector2 p1, Vector2 p2, Vector2 p3) { int num_segments = 0; ImGuiNative.ImDrawList_PathBezierCurveTo(NativePtr, p1, p2, p3, num_segments); } public void PathBezierCurveTo(Vector2 p1, Vector2 p2, Vector2 p3, int num_segments) { ImGuiNative.ImDrawList_PathBezierCurveTo(NativePtr, p1, p2, p3, num_segments); } public void PathClear() { ImGuiNative.ImDrawList_PathClear(NativePtr); } public void PathFillConvex(uint col) { ImGuiNative.ImDrawList_PathFillConvex(NativePtr, col); } public void PathLineTo(Vector2 pos) { ImGuiNative.ImDrawList_PathLineTo(NativePtr, pos); } public void PathLineToMergeDuplicate(Vector2 pos) { ImGuiNative.ImDrawList_PathLineToMergeDuplicate(NativePtr, pos); } public void PathRect(Vector2 rect_min, Vector2 rect_max) { float rounding = 0.0f; ImDrawCornerFlags rounding_corners = ImDrawCornerFlags.All; ImGuiNative.ImDrawList_PathRect(NativePtr, rect_min, rect_max, rounding, rounding_corners); } public void PathRect(Vector2 rect_min, Vector2 rect_max, float rounding) { ImDrawCornerFlags rounding_corners = ImDrawCornerFlags.All; ImGuiNative.ImDrawList_PathRect(NativePtr, rect_min, rect_max, rounding, rounding_corners); } public void PathRect(Vector2 rect_min, Vector2 rect_max, float rounding, ImDrawCornerFlags rounding_corners) { ImGuiNative.ImDrawList_PathRect(NativePtr, rect_min, rect_max, rounding, rounding_corners); } public void PathStroke(uint col, bool closed) { byte native_closed = closed ? (byte)1 : (byte)0; float thickness = 1.0f; ImGuiNative.ImDrawList_PathStroke(NativePtr, col, native_closed, thickness); } public void PathStroke(uint col, bool closed, float thickness) { byte native_closed = closed ? (byte)1 : (byte)0; ImGuiNative.ImDrawList_PathStroke(NativePtr, col, native_closed, thickness); } public void PopClipRect() { ImGuiNative.ImDrawList_PopClipRect(NativePtr); } public void PopTextureID() { ImGuiNative.ImDrawList_PopTextureID(NativePtr); } public void PrimQuadUV(Vector2 a, Vector2 b, Vector2 c, Vector2 d, Vector2 uv_a, Vector2 uv_b, Vector2 uv_c, Vector2 uv_d, uint col) { ImGuiNative.ImDrawList_PrimQuadUV(NativePtr, a, b, c, d, uv_a, uv_b, uv_c, uv_d, col); } public void PrimRect(Vector2 a, Vector2 b, uint col) { ImGuiNative.ImDrawList_PrimRect(NativePtr, a, b, col); } public void PrimRectUV(Vector2 a, Vector2 b, Vector2 uv_a, Vector2 uv_b, uint col) { ImGuiNative.ImDrawList_PrimRectUV(NativePtr, a, b, uv_a, uv_b, col); } public void PrimReserve(int idx_count, int vtx_count) { ImGuiNative.ImDrawList_PrimReserve(NativePtr, idx_count, vtx_count); } public void PrimVtx(Vector2 pos, Vector2 uv, uint col) { ImGuiNative.ImDrawList_PrimVtx(NativePtr, pos, uv, col); } public void PrimWriteIdx(ushort idx) { ImGuiNative.ImDrawList_PrimWriteIdx(NativePtr, idx); } public void PrimWriteVtx(Vector2 pos, Vector2 uv, uint col) { ImGuiNative.ImDrawList_PrimWriteVtx(NativePtr, pos, uv, col); } public void PushClipRect(Vector2 clip_rect_min, Vector2 clip_rect_max) { byte intersect_with_current_clip_rect = 0; ImGuiNative.ImDrawList_PushClipRect(NativePtr, clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); } public void PushClipRect(Vector2 clip_rect_min, Vector2 clip_rect_max, bool intersect_with_current_clip_rect) { byte native_intersect_with_current_clip_rect = intersect_with_current_clip_rect ? (byte)1 : (byte)0; ImGuiNative.ImDrawList_PushClipRect(NativePtr, clip_rect_min, clip_rect_max, native_intersect_with_current_clip_rect); } public void PushClipRectFullScreen() { ImGuiNative.ImDrawList_PushClipRectFullScreen(NativePtr); } public void PushTextureID(IntPtr texture_id) { ImGuiNative.ImDrawList_PushTextureID(NativePtr, texture_id); } public void UpdateClipRect() { ImGuiNative.ImDrawList_UpdateClipRect(NativePtr); } public void UpdateTextureID() { ImGuiNative.ImDrawList_UpdateTextureID(NativePtr); } } }