public static void BeginSplit(SplitterState state, GUIStyle style, bool vertical, params GUILayoutOption[] options)
        {
            var guiSplitterGroup = BeginLayoutGroup(style, null, GUISplitterGroup.GuiSplitterGroupType);

            state.ID = GUIUtility.GetControlID(SplitterGUILayout.SplitterHash, FocusType.Passive);
            switch (Event.current.GetTypeForControl(state.ID))
            {
            case EventType.MouseDown:
                if (Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    int num  = (!guiSplitterGroup.isVertical) ? ((int)guiSplitterGroup.rect.x) : ((int)guiSplitterGroup.rect.y);
                    int num2 = (!guiSplitterGroup.isVertical) ? ((int)Event.current.mousePosition.x) : ((int)Event.current.mousePosition.y);
                    for (int i = 0; i < state.relativeSizes.Length - 1; i++)
                    {
                        if (((!guiSplitterGroup.isVertical) ? new Rect(state.xOffset + (float)num + (float)state.realSizes[i] - (float)(state.splitSize / 2), guiSplitterGroup.rect.y, (float)state.splitSize, guiSplitterGroup.rect.height) : new Rect(state.xOffset + guiSplitterGroup.rect.x, (float)(num + state.realSizes[i] - state.splitSize / 2), guiSplitterGroup.rect.width, (float)state.splitSize)).Contains(Event.current.mousePosition))
                        {
                            state.splitterInitialOffset = num2;
                            state.currentActiveSplitter = i;
                            GUIUtility.hotControl       = state.ID;
                            Event.current.Use();
                            break;
                        }
                        num += state.realSizes[i];
                    }
                }
                break;

            case EventType.MouseUp:
                if (GUIUtility.hotControl == state.ID)
                {
                    GUIUtility.hotControl       = 0;
                    state.currentActiveSplitter = -1;
                    state.RealToRelativeSizes();
                    Event.current.Use();
                }
                break;

            case EventType.MouseDrag:
                if (GUIUtility.hotControl == state.ID && state.currentActiveSplitter >= 0)
                {
                    int num2 = (!guiSplitterGroup.isVertical) ? ((int)Event.current.mousePosition.x) : ((int)Event.current.mousePosition.y);
                    int num3 = num2 - state.splitterInitialOffset;
                    if (num3 != 0)
                    {
                        state.splitterInitialOffset = num2;
                        state.DoSplitter(state.currentActiveSplitter, state.currentActiveSplitter + 1, num3);
                    }
                    Event.current.Use();
                }
                break;

            case EventType.Repaint:
            {
                int num4 = (!guiSplitterGroup.isVertical) ? ((int)guiSplitterGroup.rect.x) : ((int)guiSplitterGroup.rect.y);
                for (int j = 0; j < state.relativeSizes.Length - 1; j++)
                {
                    Rect position = (!guiSplitterGroup.isVertical) ? new Rect(state.xOffset + (float)num4 + (float)state.realSizes[j] - (float)(state.splitSize / 2), guiSplitterGroup.rect.y, (float)state.splitSize, guiSplitterGroup.rect.height) : new Rect(state.xOffset + guiSplitterGroup.rect.x, (float)(num4 + state.realSizes[j] - state.splitSize / 2), guiSplitterGroup.rect.width, (float)state.splitSize);
                    EditorGUIUtility.AddCursorRect(position, (!guiSplitterGroup.isVertical) ? MouseCursor.SplitResizeLeftRight : MouseCursor.ResizeVertical, state.ID);
                    num4 += state.realSizes[j];
                }
                break;
            }

            case EventType.Layout:
                guiSplitterGroup.state       = state;
                guiSplitterGroup.resetCoords = false;
                guiSplitterGroup.isVertical  = vertical;
                guiSplitterGroup.ApplyOptions(options);
                break;
            }
        }
 public static void BeginHorizontalSplit(SplitterState state, params GUILayoutOption[] options)
 {
     BeginSplit(state, GUIStyle.none, false, options);
 }