UnityEditor.SplitView.CalcRoomForRect C# (CSharp) Method

CalcRoomForRect() private method

private CalcRoomForRect ( Rect sources, Rect r ) : void
sources UnityEngine.Rect
r UnityEngine.Rect
return void
        private void CalcRoomForRect(Rect[] sources, Rect r)
        {
            float num8;
            float num = !this.vertical ? r.x : r.y;
            float num2 = num + (!this.vertical ? r.width : r.height);
            float num3 = (num + num2) * 0.5f;
            int index = 0;
            while (index < sources.Length)
            {
                float num5 = !this.vertical ? (sources[index].x + (sources[index].width * 0.5f)) : (sources[index].y + (sources[index].height * 0.5f));
                if (num5 > num3)
                {
                    break;
                }
                index++;
            }
            float num6 = num;
            for (int i = index - 1; i >= 0; i--)
            {
                if (this.vertical)
                {
                    sources[i].yMax = num6;
                    if (sources[i].height >= base.children[i].minSize.y)
                    {
                        break;
                    }
                    num8 = sources[i].yMax - base.children[i].minSize.y;
                    sources[i].yMin = num8;
                    num6 = num8;
                }
                else
                {
                    sources[i].xMax = num6;
                    if (sources[i].width >= base.children[i].minSize.x)
                    {
                        break;
                    }
                    num8 = sources[i].xMax - base.children[i].minSize.x;
                    sources[i].xMin = num8;
                    num6 = num8;
                }
            }
            if (num6 < 0f)
            {
                float num9 = -num6;
                for (int k = 0; k < (index - 1); k++)
                {
                    if (this.vertical)
                    {
                        sources[k].y += num9;
                    }
                    else
                    {
                        sources[k].x += num9;
                    }
                }
                num2 += num9;
            }
            num6 = num2;
            for (int j = index; j < sources.Length; j++)
            {
                if (this.vertical)
                {
                    float yMax = sources[j].yMax;
                    sources[j].yMin = num6;
                    sources[j].yMax = yMax;
                    if (sources[j].height >= base.children[j].minSize.y)
                    {
                        break;
                    }
                    num8 = sources[j].yMin + base.children[j].minSize.y;
                    sources[j].yMax = num8;
                    num6 = num8;
                }
                else
                {
                    float xMax = sources[j].xMax;
                    sources[j].xMin = num6;
                    sources[j].xMax = xMax;
                    if (sources[j].width >= base.children[j].minSize.x)
                    {
                        break;
                    }
                    num8 = sources[j].xMin + base.children[j].minSize.x;
                    sources[j].xMax = num8;
                    num6 = num8;
                }
            }
            float num14 = !this.vertical ? base.position.width : base.position.height;
            if (num6 > num14)
            {
                float num15 = num14 - num6;
                for (int m = 0; m < (index - 1); m++)
                {
                    if (this.vertical)
                    {
                        sources[m].y += num15;
                    }
                    else
                    {
                        sources[m].x += num15;
                    }
                }
                num2 += num15;
            }
        }