protected virtual void RenderList(Rect listRect, float headerWidth) { if (ContentOffset.x > 0) { Rect sideRect = listRect; sideRect.width = ContentOffset.x; if (Event.current.type == EventType.Repaint) { GUI.color = BackgroundColor; EditorGUI.DrawTextureAlpha(sideRect, EditorGUIUtility.whiteTexture); GUI.color = Color.white; } } listRect.xMin += ContentOffset.x; headerWidth -= ContentOffset.x; Rect editorRect = listRect; GUI.BeginGroup(listRect); editorRect.y = 0; editorRect.x = 0; editorRect.height = 0; for (int i = 0; i != _editors.Count; ++i) { editorRect.yMin = editorRect.yMax; editorRect.height = _editors[i].Height; if (SequenceEditor.EditorDragged == _editors[i]) { Rect editorDraggedRect = editorRect; editorDraggedRect.y = -_editors[i].Offset.value.y; SequenceEditor.EditorDraggedRect = editorDraggedRect; SequenceEditor.Repaint(); } else { if (SequenceEditor.EditorDragged != null && SequenceEditor.EditorDragged.Owner == this) { float mouseOffsetY = SequenceEditor.EditorDragged.Offset.value.y; float editorDraggedTop = Event.current.mousePosition.y - mouseOffsetY; float editorDraggedBot = editorDraggedTop + SequenceEditor.EditorDraggedRect.height; if (i < SequenceEditor.EditorDragged.Obj.GetId()) { if (_editors[i].Offset.target.y == 0) { if (editorDraggedTop < editorRect.center.y) { _editors[i].Offset.target = new Vector3(0, SequenceEditor.EditorDragged.Height, 0); } else { _editors[i].Offset.target = Vector3.zero; } } else { if (editorDraggedBot > editorRect.center.y + SequenceEditor.EditorDragged.Height) { _editors[i].Offset.target = Vector3.zero; } else { _editors[i].Offset.target = new Vector3(0, SequenceEditor.EditorDragged.Height, 0); } } } else if (i > SequenceEditor.EditorDragged.Obj.GetId()) { if (_editors[i].Offset.target.y == 0) { if (editorDraggedBot > editorRect.center.y) { _editors[i].Offset.target = new Vector3(0, -SequenceEditor.EditorDragged.Height, 0); } else { _editors[i].Offset.target = Vector3.zero; } } else { if (editorDraggedTop < editorRect.center.y - SequenceEditor.EditorDragged.Height) { _editors[i].Offset.target = Vector3.zero; } else { _editors[i].Offset.target = new Vector3(0, -SequenceEditor.EditorDragged.Height, 0); } } } } Rect editorRenderRect = editorRect; editorRenderRect.y += _editors[i].Offset.value.y; _editors[i].Render(editorRenderRect, headerWidth); Rect editorHeaderRect = editorRect; editorHeaderRect.width = headerWidth; if (EditorGUIUtility.hotControl == 0 && Event.current.type == EventType.MouseDrag && Event.current.button == 0 && editorHeaderRect.Contains(Event.current.mousePosition)) { SequenceEditor.StartDraggingEditor(_editors[i]); _editors[i].Offset.target = _editors[i].Offset.value = new Vector3(0, Event.current.mousePosition.y - editorRect.y, 0); } } } GUI.EndGroup(); }