/// <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); }