示例#1
0
        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;
                }
            }
        }
示例#2
0
        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));
        }