protected override Size ArrangeOverride()

in tools/Explorer/TabControl/TabPanel.cs [428:489]


        protected override Size ArrangeOverride(Size finalSize)
        {
            // monitors changes to the ScrollViewer extent value
            if (_oldExtent != _extent)
            {
                _oldExtent = _extent;
                if (_scrollOwner != null)
                    _scrollOwner.InvalidateScrollInfo();
            }

            // monitors changes to the parent container size, (ie window resizes)
            if (finalSize != _lastSize)
            {
                _lastSize = finalSize;
                if (_scrollOwner != null)
                    _scrollOwner.InvalidateScrollInfo();
            }

            // monitor scrolling being removed
            bool invalidateMeasure = false;
            if (_extent.Width <= _viewPort.Width && _offset.X > 0)
            {
                _offset.X = 0;
                _translateTransform.X = 0;

                if (_scrollOwner != null)
                    _scrollOwner.InvalidateScrollInfo();

                invalidateMeasure = true;
            }
            if (_extent.Height <= _viewPort.Height && _offset.Y > 0)
            {
                _offset.Y = 0;
                _translateTransform.Y = 0;

                if (_scrollOwner != null)
                    _scrollOwner.InvalidateScrollInfo();

                invalidateMeasure = true;
            }
            if (invalidateMeasure)
                InvalidateMeasure();

            

            // arrange the children
            for (var i = 0; i < InternalChildren.Count; i++)
            {
                InternalChildren[i].Arrange(_childRects[i]);
            }

            // we need these lines as when the Scroll Buttons get Shown/Hidden,
            // the _offset value gets out of line, this will ensure that our scroll position stays in line
            if (InternalChildren.Count > 0)
            {
                _offset = _childRects[FirstVisibleIndex].TopLeft;
                _translateTransform.X = -_offset.X;
                _translateTransform.Y = -_offset.Y;
            }

            return finalSize;
        }