Пример #1
0
        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();
        }