private Rectangle GetTabRectangle(TabVS2012 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 = rectTabStrip.Y + (dockState == DockState.DockTopAutoHide || dockState == DockState.DockRightAutoHide ? 0 : TabGapTop); int width = 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, TabVS2012 tab) { var rectTabOrigin = GetTabRectangle(tab); if (rectTabOrigin.IsEmpty) { return; } var dockState = tab.Content.DockHandler.DockState; var content = tab.Content; //Set no rotate for drawing icon and text var matrixRotate = g.Transform; g.Transform = MatrixIdentity; Color borderColor; Color backgroundColor; Color textColor; if (tab.IsMouseOver) { borderColor = DockPanel.Theme.ColorPalette.AutoHideStripHovered.Border; backgroundColor = DockPanel.Theme.ColorPalette.AutoHideStripHovered.Background; textColor = DockPanel.Theme.ColorPalette.AutoHideStripHovered.Text; } else { borderColor = DockPanel.Theme.ColorPalette.AutoHideStripDefault.Border; backgroundColor = DockPanel.Theme.ColorPalette.AutoHideStripDefault.Background; textColor = DockPanel.Theme.ColorPalette.AutoHideStripDefault.Text; } g.FillRectangle(DockPanel.Theme.PaintingService.GetBrush(backgroundColor), rectTabOrigin); var rectBorder = GetBorderRectangle(rectTabOrigin, dockState, TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width); g.FillRectangle(DockPanel.Theme.PaintingService.GetBrush(borderColor), rectBorder); // Draw the text var rectText = GetTextRectangle(rectTabOrigin, dockState); if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) { g.DrawString(content.DockHandler.TabText, TextFont, DockPanel.Theme.PaintingService.GetBrush(textColor), rectText, StringFormatTabVertical); } else { g.DrawString(content.DockHandler.TabText, TextFont, DockPanel.Theme.PaintingService.GetBrush(textColor), rectText, StringFormatTabHorizontal); } // Set rotate back g.Transform = matrixRotate; }
private Rectangle GetTabRectangle(TabVS2012 tab) { var state = tab.Content.DockHandler.DockState; var rectStrip = GetTabStripRectangle(state); var location = rectStrip.Location; if (state == DockState.DockLeftAutoHide || state == DockState.DockRightAutoHide) { location.Y += tab.TabX; return(new Rectangle(location.X, location.Y, rectStrip.Width, tab.TabWidth)); } location.X += tab.TabX; return(new Rectangle(location.X, location.Y, tab.TabWidth, rectStrip.Height)); }
private GraphicsPath GetTabOutline(TabVS2012 tab, bool rtlTransform) { DockState dockState = tab.Content.DockHandler.DockState; Rectangle rectTab = GetTabRectangle(tab); if (rtlTransform) { rectTab = RtlTransform(rectTab, dockState); } if (GraphicsPath != null) { GraphicsPath.Reset(); GraphicsPath.AddRectangle(rectTab); } return(GraphicsPath); }
protected override void OnMouseHover(EventArgs e) { var tab = (TabVS2012)TabHitTest(PointToClient(MousePosition)); if (tab != null) { tab.IsMouseOver = true; Invalidate(); } if (lastSelectedTab != tab) { if (lastSelectedTab != null) { lastSelectedTab.IsMouseOver = false; } lastSelectedTab = tab; } base.OnMouseHover(e); }
private void DrawTab_ToolWindow(Graphics g, TabVS2012 tab, Rectangle rect, bool last) { rect.Y += 1; Rectangle rectIcon = new Rectangle( rect.X + ToolWindowImageGapLeft, rect.Y - 1 + rect.Height - ToolWindowImageGapBottom - ToolWindowImageHeight, ToolWindowImageWidth, ToolWindowImageHeight); Rectangle rectText = PatchController.EnableHighDpi == true ? new Rectangle( rect.X + ToolWindowImageGapLeft, rect.Y - 1 + rect.Height - ToolWindowImageGapBottom - TextFont.Height, ToolWindowImageWidth, TextFont.Height) : rectIcon; rectText.X += rectIcon.Width + ToolWindowImageGapRight; rectText.Width = rect.Width - rectIcon.Width - ToolWindowImageGapLeft - ToolWindowImageGapRight - ToolWindowTextGapRight; Rectangle rectTab = DrawHelper.RtlTransform(this, rect); rectText = DrawHelper.RtlTransform(this, rectText); rectIcon = DrawHelper.RtlTransform(this, rectIcon); Color separatorColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowSeparator; if (DockPane.ActiveContent == tab.Content) { Color textColor; Color backgroundColor; if (DockPane.IsActiveDocumentPane) { textColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowTabSelectedActive.Text; backgroundColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowTabSelectedActive.Background; } else { textColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowTabSelectedInactive.Text; backgroundColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowTabSelectedInactive.Background; } g.FillRectangle(DockPane.DockPanel.Theme.PaintingService.GetBrush(backgroundColor), rect); TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, TextFont, rectText, textColor, ToolWindowTextFormat); // TODO: how to cache Pen? g.DrawLine(DockPane.DockPanel.Theme.PaintingService.GetPen(separatorColor), rect.X + rect.Width - 1, rect.Y, rect.X + rect.Width - 1, rect.Height); } else { Color textColor; Color backgroundColor; if (tab.Content == DockPane.MouseOverTab) { textColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowTabUnselectedHovered.Text; backgroundColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowTabUnselectedHovered.Background; } else { textColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowTabUnselected.Text; backgroundColor = DockPane.DockPanel.Theme.ColorPalette.MainWindowActive.Background; } g.FillRectangle(DockPane.DockPanel.Theme.PaintingService.GetBrush(backgroundColor), rect); TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, TextFont, rectText, textColor, ToolWindowTextFormat); if (!last) { g.DrawLine(DockPane.DockPanel.Theme.PaintingService.GetPen(separatorColor), rect.X + rect.Width - 1, rect.Y, rect.X + rect.Width - 1, rect.Height); } } if (rectTab.Contains(rectIcon)) g.DrawIcon(tab.Content.DockHandler.Icon, rectIcon); }
private Rectangle GetTabRectangle(TabVS2012 tab) { return(GetTabRectangle(tab, false)); }
private void DrawTab(Graphics g, TabVS2012 tab) { Rectangle rectTabOrigin = GetTabRectangle(tab); if (rectTabOrigin.IsEmpty) { return; } DockState dockState = tab.Content.DockHandler.DockState; IDockContent content = tab.Content; Color borderColor; Color backgroundColor; if (tab.IsMouseOver) { borderColor = DockPanel.Theme.Skin.ColorPalette.AutoHideStripHovered.Border; backgroundColor = DockPanel.Theme.Skin.ColorPalette.AutoHideStripHovered.Background; } else { borderColor = DockPanel.Theme.Skin.ColorPalette.AutoHideStripDefault.Border; backgroundColor = DockPanel.Theme.Skin.ColorPalette.AutoHideStripDefault.Background; } g.FillRectangle(DockPanel.Theme.PaintingService.GetBrush(backgroundColor), rectTabOrigin); Rectangle rectThickLine = rectTabOrigin; rectThickLine.X += TabGapLeft + TextGapLeft; rectThickLine.Width = TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width; rectThickLine.Height = DockPanel.Theme.Measures.AutoHideTabLineWidth; if (dockState == DockState.DockBottomAutoHide || dockState == DockState.DockLeftAutoHide) { rectThickLine.Y += rectTabOrigin.Height - DockPanel.Theme.Measures.AutoHideTabLineWidth; } g.FillRectangle(DockPanel.Theme.PaintingService.GetBrush(borderColor), rectThickLine); //Set no rotate for drawing icon and text Matrix matrixRotate = g.Transform; g.Transform = MatrixIdentity; // Draw the text Rectangle rectText = rectTabOrigin; rectText.X += TextGapLeft; rectText.Width -= TextGapLeft; if (dockState == DockState.DockBottomAutoHide || dockState == DockState.DockLeftAutoHide) { rectText.Y -= TextGapBottom; } else { rectText.Y += TextGapBottom; } rectText = RtlTransform(GetTransformedRectangle(dockState, rectText), dockState); Color textColor; if (tab.IsMouseOver) { textColor = DockPanel.Theme.Skin.ColorPalette.AutoHideStripHovered.Text; } else { textColor = DockPanel.Theme.Skin.ColorPalette.AutoHideStripDefault.Text; } if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) { g.DrawString(content.DockHandler.TabText, TextFont, DockPanel.Theme.PaintingService.GetBrush(textColor), rectText, StringFormatTabVertical); } else { g.DrawString(content.DockHandler.TabText, TextFont, DockPanel.Theme.PaintingService.GetBrush(textColor), rectText, StringFormatTabHorizontal); } // Set rotate back g.Transform = matrixRotate; }
private Rectangle GetTabRectangle(TabVS2012 tab) { var state = tab.Content.DockHandler.DockState; var rectStrip = GetTabStripRectangle(state); var location = rectStrip.Location; if (state == DockState.DockLeftAutoHide || state == DockState.DockRightAutoHide) { location.Y += tab.TabX; return new Rectangle(location.X, location.Y, rectStrip.Width, tab.TabWidth); } location.X += tab.TabX; return new Rectangle(location.X, location.Y, tab.TabWidth, rectStrip.Height); }
private Rectangle GetTabRectangle(TabVS2012 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 = rectTabStrip.Y + (dockState == DockState.DockTopAutoHide || dockState == DockState.DockRightAutoHide ? 0 : TabGapTop); int width = 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 Rectangle GetTabRectangle(TabVS2012 tab) { return GetTabRectangle(tab, false); }
private GraphicsPath GetTabOutline(TabVS2012 tab, bool transformed, bool rtlTransform) { DockState dockState = tab.Content.DockHandler.DockState; Rectangle rectTab = GetTabRectangle(tab, transformed); if (rtlTransform) rectTab = RtlTransform(rectTab, dockState); if (GraphicsPath != null) { GraphicsPath.Reset(); GraphicsPath.AddRectangle(rectTab); } return GraphicsPath; }
private void DrawTab(Graphics g, TabVS2012 tab) { Rectangle rectTabOrigin = GetTabRectangle(tab); if (rectTabOrigin.IsEmpty) return; DockState dockState = tab.Content.DockHandler.DockState; IDockContent content = tab.Content; Color borderColor; if (tab.Content.DockHandler.IsActivated || tab.IsMouseOver) borderColor = DockPanel.Skin.ColorPalette.AutoHideStripHovered.Border; else borderColor = DockPanel.Skin.ColorPalette.AutoHideStripDefault.Border; Rectangle rectThickLine = rectTabOrigin; rectThickLine.X += _TabGapLeft + _TextGapLeft + _ImageGapLeft + _ImageWidth; rectThickLine.Width = TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width - 8; rectThickLine.Height = Measures.AutoHideTabLineWidth; if (dockState == DockState.DockBottomAutoHide || dockState == DockState.DockLeftAutoHide) rectThickLine.Y += rectTabOrigin.Height - Measures.AutoHideTabLineWidth; else if (dockState == DockState.DockTopAutoHide || dockState == DockState.DockRightAutoHide) rectThickLine.Y += 0; g.FillRectangle(DockPanel.Theme.PaintingService.GetBrush(borderColor), rectThickLine); //Set no rotate for drawing icon and text Matrix matrixRotate = g.Transform; g.Transform = MatrixIdentity; // Draw the icon Rectangle rectImage = rectTabOrigin; rectImage.X += ImageGapLeft; rectImage.Y += ImageGapTop; int imageHeight = rectTabOrigin.Height - ImageGapTop - ImageGapBottom; int imageWidth = ImageWidth; if (imageHeight > ImageHeight) imageWidth = ImageWidth * (imageHeight / ImageHeight); rectImage.Height = imageHeight; rectImage.Width = imageWidth; rectImage = GetTransformedRectangle(dockState, rectImage); if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) { // The DockState is DockLeftAutoHide or DockRightAutoHide, so rotate the image 90 degrees to the right. Rectangle rectTransform = RtlTransform(rectImage, dockState); Point[] rotationPoints = { new Point(rectTransform.X + rectTransform.Width, rectTransform.Y), new Point(rectTransform.X + rectTransform.Width, rectTransform.Y + rectTransform.Height), new Point(rectTransform.X, rectTransform.Y) }; using (Icon rotatedIcon = new Icon(((Form)content).Icon, 16, 16)) { g.DrawImage(rotatedIcon.ToBitmap(), rotationPoints); } } else { // Draw the icon normally without any rotation. g.DrawIcon(((Form)content).Icon, RtlTransform(rectImage, dockState)); } // Draw the text Rectangle rectText = rectTabOrigin; rectText.X += ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; rectText.Width -= ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; rectText = RtlTransform(GetTransformedRectangle(dockState, rectText), dockState); Color textColor; if (DockPanel.ActiveContent == content || tab.IsMouseOver) textColor = DockPanel.Skin.ColorPalette.AutoHideStripHovered.Text; else textColor = DockPanel.Skin.ColorPalette.AutoHideStripDefault.Text; if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) g.DrawString(content.DockHandler.TabText, TextFont, DockPanel.Theme.PaintingService.GetBrush(textColor), rectText, StringFormatTabVertical); else g.DrawString(content.DockHandler.TabText, TextFont, DockPanel.Theme.PaintingService.GetBrush(textColor), rectText, StringFormatTabHorizontal); // Set rotate back g.Transform = matrixRotate; }
protected override void OnMouseHover(EventArgs e) { var tab = (TabVS2012)TabHitTest(PointToClient(MousePosition)); if (tab != null) { tab.IsMouseOver = true; Invalidate(); } if (lastSelectedTab != tab) { if (lastSelectedTab != null) lastSelectedTab.IsMouseOver = false; lastSelectedTab = tab; } base.OnMouseHover(e); }
private void DrawTab(Graphics g, TabVS2012 tab, Rectangle rect, bool last) { if (Appearance == DockPane.AppearanceStyle.ToolWindow) DrawTab_ToolWindow(g, tab, rect, last); else DrawTab_Document(g, tab, rect); }
private void DrawTab_Document(Graphics g, TabVS2012 tab, Rectangle rect) { if (tab.TabWidth == 0) return; var rectCloseButton = GetCloseButtonRect(rect); Rectangle rectIcon = new Rectangle( rect.X + DocumentIconGapLeft, rect.Y + rect.Height - DocumentIconGapBottom - DocumentIconHeight, DocumentIconWidth, DocumentIconHeight); Rectangle rectText = PatchController.EnableHighDpi == true ? new Rectangle( rect.X + DocumentIconGapLeft, rect.Y + rect.Height - DocumentIconGapBottom - TextFont.Height, DocumentIconWidth, TextFont.Height) : rectIcon; if (DockPane.DockPanel.ShowDocumentIcon) { rectText.X += rectIcon.Width + DocumentIconGapRight; rectText.Y = rect.Y; rectText.Width = rect.Width - rectIcon.Width - DocumentIconGapLeft - DocumentIconGapRight - DocumentTextGapRight - rectCloseButton.Width; rectText.Height = rect.Height; } else rectText.Width = rect.Width - DocumentIconGapLeft - DocumentTextGapRight - rectCloseButton.Width; Rectangle rectTab = DrawHelper.RtlTransform(this, rect); Rectangle rectBack = DrawHelper.RtlTransform(this, rect); rectBack.Width += DocumentIconGapLeft; rectBack.X -= DocumentIconGapLeft; rectText = DrawHelper.RtlTransform(this, rectText); rectIcon = DrawHelper.RtlTransform(this, rectIcon); Color activeColor = DockPane.DockPanel.Theme.ColorPalette.TabSelectedActive.Background; Color lostFocusColor = DockPane.DockPanel.Theme.ColorPalette.TabSelectedInactive.Background; Color inactiveColor = DockPane.DockPanel.Theme.ColorPalette.MainWindowActive.Background; Color mouseHoverColor = DockPane.DockPanel.Theme.ColorPalette.TabUnselectedHovered.Background; Color activeText = DockPane.DockPanel.Theme.ColorPalette.TabSelectedActive.Text; Color lostFocusText = DockPane.DockPanel.Theme.ColorPalette.TabSelectedInactive.Text; Color inactiveText = DockPane.DockPanel.Theme.ColorPalette.TabUnselected.Text; Color mouseHoverText = DockPane.DockPanel.Theme.ColorPalette.TabUnselectedHovered.Text; Color text; Image image = null; Color paint; var imageService = DockPane.DockPanel.Theme.ImageService; if (DockPane.ActiveContent == tab.Content) { if (DockPane.IsActiveDocumentPane) { paint = activeColor; text = activeText; image = IsMouseDown ? imageService.TabPressActive_Close : rectCloseButton == ActiveClose ? imageService.TabHoverActive_Close : imageService.TabActive_Close; } else { paint = lostFocusColor; text = lostFocusText; image = IsMouseDown ? imageService.TabPressLostFocus_Close : rectCloseButton == ActiveClose ? imageService.TabHoverLostFocus_Close : imageService.TabLostFocus_Close; } } else { if (tab.Content == DockPane.MouseOverTab) { paint = mouseHoverColor; text = mouseHoverText; image = IsMouseDown ? imageService.TabPressInactive_Close : rectCloseButton == ActiveClose ? imageService.TabHoverInactive_Close : imageService.TabInactive_Close; } else { paint = inactiveColor; text = inactiveText; } } g.FillRectangle(DockPane.DockPanel.Theme.PaintingService.GetBrush(paint), rect); TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, TextFont, rectText, text, DocumentTextFormat); if (image != null) g.DrawImage(image, rectCloseButton); if (rectTab.Contains(rectIcon) && DockPane.DockPanel.ShowDocumentIcon) g.DrawIcon(tab.Content.DockHandler.Icon, rectIcon); }
private void DrawTab_Document(Graphics g, TabVS2012 tab, Rectangle rect) { if (tab.TabWidth == 0) return; var rectCloseButton = GetCloseButtonRect(rect); Rectangle rectIcon = new Rectangle( rect.X + DocumentIconGapLeft, rect.Y + rect.Height - DocumentIconGapBottom - DocumentIconHeight, DocumentIconWidth, DocumentIconHeight); Rectangle rectText = PatchController.EnableHighDpi == true ? new Rectangle( rect.X + DocumentIconGapLeft, rect.Y + rect.Height - DocumentIconGapBottom - TextFont.Height, DocumentIconWidth, TextFont.Height) : rectIcon; if (DockPane.DockPanel.ShowDocumentIcon) { rectText.X += rectIcon.Width + DocumentIconGapRight; rectText.Y = rect.Y; rectText.Width = rect.Width - rectIcon.Width - DocumentIconGapLeft - DocumentIconGapRight - DocumentTextGapRight - rectCloseButton.Width; rectText.Height = rect.Height; } else rectText.Width = rect.Width - DocumentIconGapLeft - DocumentTextGapRight - rectCloseButton.Width; Rectangle rectTab = DrawHelper.RtlTransform(this, rect); Rectangle rectBack = DrawHelper.RtlTransform(this, rect); rectBack.Width += DocumentIconGapLeft; rectBack.X -= DocumentIconGapLeft; rectText = DrawHelper.RtlTransform(this, rectText); rectIcon = DrawHelper.RtlTransform(this, rectIcon); Color activeColor = DockPane.DockPanel.Skin.ColorPalette.TabSelectedActive.Background; Color lostFocusColor = DockPane.DockPanel.Skin.ColorPalette.TabSelectedInactive.Background; Color inactiveColor = DockPane.DockPanel.Skin.ColorPalette.TabUnselected.Background; Color mouseHoverColor = DockPane.DockPanel.Skin.ColorPalette.TabUnselectedHovered.Background; Color activeText = DockPane.DockPanel.Skin.ColorPalette.TabSelectedActive.Text; Color lostFocusText = DockPane.DockPanel.Skin.ColorPalette.TabSelectedInactive.Text; Color inactiveText = DockPane.DockPanel.Skin.ColorPalette.TabUnselected.Text; Color mouseHoverText = DockPane.DockPanel.Skin.ColorPalette.TabUnselectedHovered.Text; if (DockPane.ActiveContent == tab.Content) { if (DockPane.IsActiveDocumentPane) { g.FillRectangle(DockPane.DockPanel.Theme.PaintingService.GetBrush(activeColor), rect); TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, TextFont, rectText, activeText, DocumentTextFormat); g.DrawImage(rectCloseButton == ActiveClose ? DockPane.DockPanel.Theme.ImageService.ActiveTabHover_Close : DockPane.DockPanel.Theme.ImageService.ActiveTab_Close, rectCloseButton); } else { g.FillRectangle(DockPane.DockPanel.Theme.PaintingService.GetBrush(lostFocusColor), rect); TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, TextFont, rectText, lostFocusText, DocumentTextFormat); g.DrawImage(rectCloseButton == ActiveClose ? DockPane.DockPanel.Theme.ImageService.LostFocusTabHover_Close : DockPane.DockPanel.Theme.ImageService.LostFocusTab_Close, rectCloseButton); } } else { if (tab.Content == DockPane.MouseOverTab) { g.FillRectangle(DockPane.DockPanel.Theme.PaintingService.GetBrush(mouseHoverColor), rect); TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, TextFont, rectText, mouseHoverText, DocumentTextFormat); g.DrawImage(rectCloseButton == ActiveClose ? DockPane.DockPanel.Theme.ImageService.InactiveTabHover_Close : DockPane.DockPanel.Theme.ImageService.ActiveTabHover_Close, rectCloseButton); } else { g.FillRectangle(DockPane.DockPanel.Theme.PaintingService.GetBrush(inactiveColor), rect); TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, TextFont, rectText, inactiveText, DocumentTextFormat); } } if (rectTab.Contains(rectIcon) && DockPane.DockPanel.ShowDocumentIcon) g.DrawIcon(tab.Content.DockHandler.Icon, rectIcon); }
private void DrawTab(Graphics g, TabVS2012 tab) { Rectangle rectTabOrigin = GetTabRectangle(tab); if (rectTabOrigin.IsEmpty) { return; } DockState dockState = tab.Content.DockHandler.DockState; IDockContent content = tab.Content; Color textColor; if (tab.Content.DockHandler.IsActivated || tab.IsMouseOver) { textColor = DockPanel.Skin.AutoHideTabActive; } else { textColor = DockPanel.Skin.AutoHideTabBarFG; } Rectangle rectThickLine = rectTabOrigin; rectThickLine.X += _TabGapLeft + _TextGapLeft + _ImageGapLeft + _ImageWidth; rectThickLine.Width = TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width - 8; rectThickLine.Height = Measures.AutoHideTabLineWidth; if (dockState == DockState.DockBottomAutoHide || dockState == DockState.DockLeftAutoHide) { rectThickLine.Y += rectTabOrigin.Height - Measures.AutoHideTabLineWidth; } else if (dockState == DockState.DockTopAutoHide || dockState == DockState.DockRightAutoHide) { rectThickLine.Y += 0; } g.FillRectangle(new SolidBrush(textColor), rectThickLine); //Set no rotate for drawing icon and text Matrix matrixRotate = g.Transform; g.Transform = MatrixIdentity; // Draw the icon Rectangle rectImage = rectTabOrigin; rectImage.X += ImageGapLeft; rectImage.Y += ImageGapTop; int imageHeight = rectTabOrigin.Height - ImageGapTop - ImageGapBottom; int imageWidth = ImageWidth; if (imageHeight > ImageHeight) { imageWidth = ImageWidth * (imageHeight / ImageHeight); } rectImage.Height = imageHeight; rectImage.Width = imageWidth; rectImage = GetTransformedRectangle(dockState, rectImage); if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) { // The DockState is DockLeftAutoHide or DockRightAutoHide, so rotate the image 90 degrees to the right. Rectangle rectTransform = RtlTransform(rectImage, dockState); Point[] rotationPoints = { new Point(rectTransform.X + rectTransform.Width, rectTransform.Y), new Point(rectTransform.X + rectTransform.Width, rectTransform.Y + rectTransform.Height), new Point(rectTransform.X, rectTransform.Y) }; using (Icon rotatedIcon = new Icon(((Form)content).Icon, 16, 16)) { g.DrawImage(rotatedIcon.ToBitmap(), rotationPoints); } } else { // Draw the icon normally without any rotation. g.DrawIcon(((Form)content).Icon, RtlTransform(rectImage, dockState)); } // Draw the text Rectangle rectText = rectTabOrigin; rectText.X += ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; rectText.Width -= ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; rectText = RtlTransform(GetTransformedRectangle(dockState, rectText), dockState); if (DockPanel.ActiveContent == content || tab.IsMouseOver) { textColor = DockPanel.Skin.AutoHideTabActive; } else { textColor = DockPanel.Skin.AutoHideTabInactive; } if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) { g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabVertical); } else { g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabHorizontal); } // Set rotate back g.Transform = matrixRotate; }
private void DrawTab(Graphics g, TabVS2012 tab) { Rectangle rectTabOrigin = GetTabRectangle(tab); if (rectTabOrigin.IsEmpty) return; DockState dockState = tab.Content.DockHandler.DockState; IDockContent content = tab.Content; //Set no rotate for drawing icon and text Matrix matrixRotate = g.Transform; g.Transform = MatrixIdentity; Color borderColor; Color backgroundColor; Color textColor; if (tab.IsMouseOver) { borderColor = DockPanel.Theme.ColorPalette.AutoHideStripHovered.Border; backgroundColor = DockPanel.Theme.ColorPalette.AutoHideStripHovered.Background; textColor = DockPanel.Theme.ColorPalette.AutoHideStripHovered.Text; } else { borderColor = DockPanel.Theme.ColorPalette.AutoHideStripDefault.Border; backgroundColor = DockPanel.Theme.ColorPalette.AutoHideStripDefault.Background; textColor = DockPanel.Theme.ColorPalette.AutoHideStripDefault.Text; } g.FillRectangle(DockPanel.Theme.PaintingService.GetBrush(backgroundColor), rectTabOrigin); Rectangle rectBorder = GetBorderRectangle(rectTabOrigin, dockState, TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width); g.FillRectangle(DockPanel.Theme.PaintingService.GetBrush(borderColor), rectBorder); // Draw the text Rectangle rectText = GetTextRectangle(rectTabOrigin, dockState); if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) g.DrawString(content.DockHandler.TabText, TextFont, DockPanel.Theme.PaintingService.GetBrush(textColor), rectText, StringFormatTabVertical); else g.DrawString(content.DockHandler.TabText, TextFont, DockPanel.Theme.PaintingService.GetBrush(textColor), rectText, StringFormatTabHorizontal); // Set rotate back g.Transform = matrixRotate; }