Exemple #1
0
        /// <summary>
        /// Measures the given tab
        /// </summary>
        /// <param name="tab"></param>
        /// <returns></returns>
        private Size MeasureTab(SuperTabItem tab)
        {
            Size size = new Size(0, 0);

            // Measure the tab Text

            Font font = tab.GetTabFont();

            Size textSize = (tab.TextMarkupBody != null)
                ? MeasureMarkup(tab, Graphics, font) : MeasureText(tab, Graphics, font);

            textSize.Width += _TabLayoutOffset.Width;
            textSize.Height += _TabLayoutOffset.Height;

            bool displayText =
                (tab.IsSelected || _TabStripItem.DisplaySelectedTextOnly == false);

            // Add in our overlap, spacing, and selection padding

            if (_TabStripItem.IsVertical == false || _TabStripItem.HorizontalText == false)
            {
                if (displayText == true)
                    size.Width += (textSize.Width + _TabStripItem.TabHorizontalSpacing);

                if (textSize.Height > size.Height)
                    size.Height = textSize.Height;

                size.Width += (TabDisplay.TabOverlap + TabDisplay.TabSpacing);
            }
            else
            {
                if (displayText == true)
                {
                    if (textSize.Height > size.Height)
                        size.Height = textSize.Height;
                }

                size.Height += (TabDisplay.TabOverlap + TabDisplay.TabSpacing);
                size.Width += (textSize.Width + _TabStripItem.TabHorizontalSpacing + TabDisplay.SelectedPaddingWidth);
            }

            // Add in any image space needed

            CompositeImage tabImage = tab.GetTabImage();

            if (tabImage != null)
            {
                int h = _TabStripItem.TabVerticalSpacing + tab.ImagePadding.Vertical;
                int w = _TabStripItem.TabHorizontalSpacing + tab.ImagePadding.Horizontal;

                switch (tab.EffectiveImageAlignment)
                {
                    case ImageAlignment.TopLeft:
                    case ImageAlignment.TopCenter:
                    case ImageAlignment.TopRight:
                    case ImageAlignment.BottomLeft:
                    case ImageAlignment.BottomCenter:
                    case ImageAlignment.BottomRight:
                        size.Height += (tabImage.Height + h);
                        break;

                    case ImageAlignment.MiddleLeft:
                    case ImageAlignment.MiddleRight:
                        size.Width += (tabImage.Width + w);

                        if (size.Height < tabImage.Height + h)
                            size.Height = tabImage.Height + h;
                        break;

                    case ImageAlignment.MiddleCenter:
                        if (size.Height < tabImage.Height + h)
                            size.Height = tabImage.Height + h;
                        break;
                }

                int n = tabImage.Height +
                        _TabStripItem.TabDisplay.TabOverlap + _TabStripItem.TabDisplay.TabSpacing + 4;

                if (size.Height < n)
                    size.Height = n;
            }

            // Add in the Close Button

            if (TabDisplay.CloseButtonOnTabs && tab.CloseButtonVisible)
            {
                size.Width += (_CloseButtonSize.Width + _TabStripItem.TabHorizontalSpacing);

                if (size.Height < _CloseButtonSize.Height + _TabStripItem.TabVerticalSpacing)
                    size.Height = _CloseButtonSize.Height + _TabStripItem.TabVerticalSpacing;

                if (size.Height < _CloseButtonSize.Height + 4)
                    size.Height = _CloseButtonSize.Height + 4;
            }

            // Add our default spacing

            size.Width += _TabStripItem.TabHorizontalSpacing * 2;
            size.Height += _TabStripItem.TabVerticalSpacing * 2;

            return (size);
        }