public static void BeginSplit(SplitterState state, GUIStyle style, bool vertical, params GUILayoutOption[] options)
{
int num;
GUISplitterGroup group = (GUISplitterGroup) GUILayoutUtility.BeginLayoutGroup(style, null, typeof(GUISplitterGroup));
state.ID = GUIUtility.GetControlID(splitterHash, FocusType.Passive);
switch (Event.current.GetTypeForControl(state.ID))
{
case EventType.MouseDown:
if ((Event.current.button == 0) && (Event.current.clickCount == 1))
{
int num2 = !group.isVertical ? ((int) group.rect.x) : ((int) group.rect.y);
num = !group.isVertical ? ((int) Event.current.mousePosition.x) : ((int) Event.current.mousePosition.y);
for (int i = 0; i < (state.relativeSizes.Length - 1); i++)
{
Rect rect = !group.isVertical ? new Rect(((state.xOffset + num2) + state.realSizes[i]) - (state.splitSize / 2), group.rect.y, (float) state.splitSize, group.rect.height) : new Rect(state.xOffset + group.rect.x, (float) ((num2 + state.realSizes[i]) - (state.splitSize / 2)), group.rect.width, (float) state.splitSize);
if (rect.Contains(Event.current.mousePosition))
{
state.splitterInitialOffset = num;
state.currentActiveSplitter = i;
GUIUtility.hotControl = state.ID;
Event.current.Use();
break;
}
num2 += 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))
{
num = !group.isVertical ? ((int) Event.current.mousePosition.x) : ((int) Event.current.mousePosition.y);
int diff = num - state.splitterInitialOffset;
if (diff != 0)
{
state.splitterInitialOffset = num;
state.DoSplitter(state.currentActiveSplitter, state.currentActiveSplitter + 1, diff);
}
Event.current.Use();
}
break;
case EventType.Repaint:
{
int num5 = !group.isVertical ? ((int) group.rect.x) : ((int) group.rect.y);
for (int j = 0; j < (state.relativeSizes.Length - 1); j++)
{
Rect position = !group.isVertical ? new Rect(((state.xOffset + num5) + state.realSizes[j]) - (state.splitSize / 2), group.rect.y, (float) state.splitSize, group.rect.height) : new Rect(state.xOffset + group.rect.x, (float) ((num5 + state.realSizes[j]) - (state.splitSize / 2)), group.rect.width, (float) state.splitSize);
EditorGUIUtility.AddCursorRect(position, !group.isVertical ? MouseCursor.SplitResizeLeftRight : MouseCursor.ResizeVertical, state.ID);
num5 += state.realSizes[j];
}
break;
}
case EventType.Layout:
group.state = state;
group.resetCoords = false;
group.isVertical = vertical;
group.ApplyOptions(options);
break;
}
}