private Rectangle GetTabRectangle(AutoHideTabFromBase tab)
 {
     return GetTabRectangle(tab, false);
 }
        private Rectangle GetTabRectangle(AutoHideTabFromBase tab, bool transformed)
        {
            DockState dockState = tab.Content.DockHandler.DockState;
            Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState);
            if (rectTabStrip.IsEmpty)
            {
                return Rectangle.Empty;
            }
            int x = tab.TabX;
            int y = 0;

            if (dockState == DockState.DockTopAutoHide || dockState == DockState.DockRightAutoHide)
            {
                y = rectTabStrip.Y;
            }
            else
            {
                y = rectTabStrip.Y + TabGapTop;
            }

            int width = ((AutoHideTabFromBase)tab).TabWidth;
            int height = rectTabStrip.Height - TabGapTop;
            if (! transformed)
            {
                return new Rectangle(x, y, width, height);
            }
            else
            {
                return GetTransformedRectangle(dockState, new Rectangle(x, y, width, height));
            }
        }
        private void DrawTab(Graphics g, AutoHideTabFromBase tab)
        {
            Rectangle rectTab = GetTabRectangle(tab);
            if (rectTab.IsEmpty)
            {
                return;
            }
            DockState dockState = tab.Content.DockHandler.DockState;
            IDockContent content = tab.Content;
            BeginDrawTab();
            Brush brushTabBackGround = this.BrushTabBackGround;
            Pen penTabBorder = this.PenTabBorder;
            Brush brushTabText = this.BrushTabText;

            g.SmoothingMode = SmoothingMode.AntiAlias;
            if (dockState == DockState.DockTopAutoHide || dockState == DockState.DockRightAutoHide)
            {
                DrawHelper.DrawTab(g, rectTab, Corners.Bottom, GradientType.Flat, Color.FromArgb(244, 242, 232), Color.FromArgb(244, 242, 232), Color.FromArgb(172, 168, 153), true);
            }
            else
            {
                DrawHelper.DrawTab(g, rectTab, Corners.Top, GradientType.Flat, Color.FromArgb(244, 242, 232), Color.FromArgb(244, 242, 232), Color.FromArgb(172, 168, 153), true);
            }

            // Set no rotate for drawing icon and text
            Matrix matrixRotate = g.Transform;
            g.Transform = MatrixIdentity;

            // Draw the icon
            Rectangle rectImage = rectTab;
            rectImage.X += ImageGapLeft;
            rectImage.Y += ImageGapTop;
            int imageHeight = rectTab.Height - ImageGapTop - ImageGapBottom;
            int imageWidth = this.ImageWidth;
            if (imageHeight > this.ImageHeight)
            {
                imageWidth = System.Convert.ToInt32(this.ImageWidth * (imageHeight / this.ImageHeight));
            }
            rectImage.Height = imageHeight;
            rectImage.Width = imageWidth;
            rectImage = GetTransformedRectangle(dockState, rectImage);
            g.DrawIcon(content.DockHandler.Icon, rectImage);

            // Draw the text
            if (content == content.DockHandler.Pane.ActiveContent)
            {
                Rectangle rectText = rectTab;
                rectText.X += ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft;
                rectText.Width -= ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft;
                rectText = GetTransformedRectangle(dockState, rectText);
                if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide)
                {
                    g.DrawString(content.DockHandler.TabText, Font, brushTabText, rectText, StringFormatTabVertical);
                }
                else
                {
                    g.DrawString(content.DockHandler.TabText, Font, brushTabText, rectText, StringFormatTabHorizontal);
                }
            }
            // Set rotate back
            g.Transform = matrixRotate;
            EndDrawTab();
        }