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); }