void RenderCustomTexData(MaxRectsBinPack spc, int pass, ImVector <ImFontPackingRect> rects) { // A work of art lies ahead! (. = white layer, X = black layer, others are blank) // The white texels on the top left are the ones we'll use everywhere in ImGui to render filled shapes. const int TEX_DATA_W = 90; const int TEX_DATA_H = 27; const string texture_data = "..- -XXXXXXX- X - X -XXXXXXX - XXXXXXX" + "..- -X.....X- X.X - X.X -X.....X - X.....X" + "--- -XXX.XXX- X...X - X...X -X....X - X....X" + "X - X.X - X.....X - X.....X -X...X - X...X" + "XX - X.X -X.......X- X.......X -X..X.X - X.X..X" + "X.X - X.X -XXXX.XXXX- XXXX.XXXX -X.X X.X - X.X X.X" + "X..X - X.X - X.X - X.X -XX X.X - X.X XX" + "X...X - X.X - X.X - XX X.X XX - X.X - X.X " + "X....X - X.X - X.X - X.X X.X X.X - X.X - X.X " + "X.....X - X.X - X.X - X..X X.X X..X - X.X - X.X " + "X......X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X XX-XX X.X " + "X.......X - X.X - X.X -X.....................X- X.X X.X-X.X X.X " + "X........X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X..X-X..X.X " + "X.........X -XXX.XXX- X.X - X..X X.X X..X - X...X-X...X " + "X..........X-X.....X- X.X - X.X X.X X.X - X....X-X....X " + "X......XXXXX-XXXXXXX- X.X - XX X.X XX - X.....X-X.....X " + "X...X..X --------- X.X - X.X - XXXXXXX-XXXXXXX " + "X..X X..X - -XXXX.XXXX- XXXX.XXXX ------------------------------------" + "X.X X..X - -X.......X- X.......X - XX XX - " + "XX X..X - - X.....X - X.....X - X.X X.X - " + " X..X - X...X - X...X - X..X X..X - " + " XX - X.X - X.X - X...XXXXXXXXXXXXX...X - " + "------------ - X - X -X.....................X- " + " ----------------------------------- X...XXXXXXXXXXXXX...X - " + " - X..X X..X - " + " - X.X X.X - " + " - XX XX - "; //ImVector < stbrp_rect > &rects = *(ImVector<stbrp_rect>*)p_rects; if (pass == 0) { // Request rectangles var custom = new ImFontPackingRect(); custom.w = TEX_DATA_W * 2 + 1; custom.h = TEX_DATA_H + 1; rects.push_back(custom); custom.pack(spc); } else if (pass == 1) { // Render/copy pixels //the first rect in rects will always be custom font data var r = rects[0]; for (int y = 0, n = 0; y < TEX_DATA_H; y++) { for (int x = 0; x < TEX_DATA_W; x++, n++) { int offset0 = (r.x + x) + (r.y + y) * TexWidth; int offset1 = offset0 + 1 + TEX_DATA_W; TexPixelsAlpha8[offset0] = (byte)(texture_data[n] == '.' ? 0xFF : 0x00); TexPixelsAlpha8[offset1] = (byte)(texture_data[n] == 'X' ? 0xFF : 0x00); } } ImVec2 tex_uv_scale = new ImVec2(1.0f / TexWidth, 1.0f / TexHeight); TexUvWhitePixel = new ImVec2((r.x + 0.5f) * tex_uv_scale.x, (r.y + 0.5f) * tex_uv_scale.y); //TODO: Finish render custom text //// Setup mouse cursors var cursor_datas = new ImVec2[, ] { // Pos ........ Size ......... Offset ...... { new ImVec2(0, 3), new ImVec2(12, 19), new ImVec2(0, 0) }, // ImGuiMouseCursor_Arrow { new ImVec2(13, 0), new ImVec2(7, 16), new ImVec2(4, 8) }, // ImGuiMouseCursor_TextInput { new ImVec2(31, 0), new ImVec2(23, 23), new ImVec2(11, 11) }, // ImGuiMouseCursor_Move { new ImVec2(21, 0), new ImVec2(9, 23), new ImVec2(5, 11) }, // ImGuiMouseCursor_ResizeNS { new ImVec2(55, 18), new ImVec2(23, 9), new ImVec2(11, 5) }, // ImGuiMouseCursor_ResizeEW { new ImVec2(73, 0), new ImVec2(17, 17), new ImVec2(9, 9) }, // ImGuiMouseCursor_ResizeNESW { new ImVec2(55, 0), new ImVec2(17, 17), new ImVec2(9, 9) }, // ImGuiMouseCursor_ResizeNWSE }; for (int type = 0; type < 7; type++) { ImGuiMouseCursorData cursor_data = ImGui.Instance.State.MouseCursorData[type]; ImVec2 pos = cursor_datas[type, 0] + new ImVec2((float)r.x, (float)r.y); ImVec2 size = cursor_datas[type, 1]; cursor_data.Type = (ImGuiMouseCursor)type; cursor_data.Size = size; cursor_data.HotOffset = cursor_datas[type, 2]; cursor_data.TexUvMin[0] = (pos) * tex_uv_scale; cursor_data.TexUvMax[0] = (pos + size) * tex_uv_scale; pos.x += TEX_DATA_W + 1; cursor_data.TexUvMin[1] = (pos) * tex_uv_scale; cursor_data.TexUvMax[1] = (pos + size) * tex_uv_scale; } } }
internal char[] TempBuffer = new char[1024 * 3 + 1]; // temporary text buffer internal ImGuiState() { IO = new ImGuiIO(); Style = new ImGuiStyle(); Windows = new ImVector <ImGuiWindow>(); WindowsSortBuffer = new ImVector <ImGuiWindow>(); CurrentWindowStack = new ImVector <ImGuiWindow>(); Settings = new ImVector <ImGuiIniData>(); ColorModifiers = new ImVector <ImGuiColMod>(); StyleModifiers = new ImVector <ImGuiStyleMod>(); FontStack = new ImVector <ImFont>(); OpenedPopupStack = new ImVector <ImGuiPopupRef>(); CurrentPopupStack = new ImVector <ImGuiPopupRef>(); RenderDrawData = new ImDrawData(); for (var i = 0; i < RenderDrawLists.Length; i++) { RenderDrawLists[i] = new ImVector <ImDrawList>(); } OverlayDrawList = new ImDrawList(); ColorEditModeStorage = new ImGuiStorage(); for (var i = 0; i < MouseCursorData.Length; i++) { MouseCursorData[i] = new ImGuiMouseCursorData(); } InputTextState = new ImGuiTextEditState(); Initialized = false; Font = null; FontSize = FontBaseSize = 0.0f; FontTexUvWhitePixel = new ImVec2(0.0f, 0.0f); Time = 0.0f; FrameCount = 0; FrameCountEnded = FrameCountRendered = -1; CurrentWindow = null; FocusedWindow = null; HoveredWindow = null; HoveredRootWindow = null; HoveredId = 0; HoveredIdAllowOverlap = false; HoveredIdPreviousFrame = 0; ActiveId = 0; ActiveIdPreviousFrame = 0; ActiveIdIsAlive = false; ActiveIdIsJustActivated = false; ActiveIdAllowOverlap = false; ActiveIdWindow = null; MovedWindow = null; SettingsDirtyTimer = 0.0f; SetNextWindowPosVal = new ImVec2(0.0f, 0.0f); SetNextWindowSizeVal = new ImVec2(0.0f, 0.0f); SetNextWindowCollapsedVal = false; SetNextWindowPosCond = 0; SetNextWindowSizeCond = 0; SetNextWindowContentSizeCond = 0; SetNextWindowCollapsedCond = 0; SetNextWindowFocus = false; SetNextTreeNodeOpenedVal = false; SetNextTreeNodeOpenedCond = 0; ScalarAsInputTextId = 0; ActiveClickDeltaToCenter = new ImVec2(0.0f, 0.0f); DragCurrentValue = 0.0f; DragLastMouseDelta = new ImVec2(0.0f, 0.0f); DragSpeedDefaultRatio = 0.01f; DragSpeedScaleSlow = 0.01f; DragSpeedScaleFast = 10.0f; ScrollbarClickDeltaToGrabCenter = new ImVec2(0.0f, 0.0f); //memset(Tooltip, 0, sizeof(Tooltip)); PrivateClipboard = null; OsImePosRequest = OsImePosSet = new ImVec2(-1.0f, -1.0f); ModalWindowDarkeningRatio = 0.0f; OverlayDrawList._OwnerName = "##Overlay"; // Give it a name for debugging MouseCursor = ImGuiMouseCursor.ImGuiMouseCursor_Arrow; //memset(MouseCursorData, 0, sizeof(MouseCursorData)); LogEnabled = false; //LogFile = null; //TODO: LogClipboard = null; LogStartDepth = 0; LogAutoExpandMaxDepth = 2; //memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame)); FramerateSecPerFrameIdx = 0; FramerateSecPerFrameAccum = 0.0f; CaptureMouseNextFrame = CaptureKeyboardNextFrame = -1; //memset(TempBuffer, 0, sizeof(TempBuffer)); }