public void RenderTitleBarButtonsBox(Rectangle rcBox, Graphics g, int lSinglePosX, int lSinglePosY) { using (GradualAntiAlias xxx = new GradualAntiAlias(g)) { int lBtnWidth = 0; int lBtnHeight = 0; foreach (GradualTitleBarButton btn in m_xtbButtons) { if (btn.ButtonStyle == GradualTitleBarButton.GradualTitleBarButtonStyle.MacStyle) { m_bShouldRenderButtonBox = false; } lBtnWidth = btn.XButtonWidth; lBtnHeight = btn.XButtonHeight; } int lX = rcBox.Right - lBtnWidth; int lY = rcBox.Bottom - lBtnHeight; if (m_bShouldRenderButtonBox) { using (GraphicsPath XButtonBox = BuildTitleBarButtonsBox(rcBox)) { switch (m_eButtonBoxFill) { case GradualButtonBoxFill.ColorMix: using (LinearGradientBrush lgb = new LinearGradientBrush( rcBox, m_ButtonBoxColors[0], m_ButtonBoxColors[4], LinearGradientMode.Vertical)) { lgb.InterpolationColors = GradualFormHelper.ColorMix ( m_ButtonBoxColors, false ); g.FillPath( lgb, XButtonBox ); } break; case GradualButtonBoxFill.TitleBarRectangleRendering: RectangleF rcDownRect = XButtonBox.GetBounds(); RectangleF rcUpRect = XButtonBox.GetBounds(); g.SetClip(XButtonBox); rcUpRect.Height /= 2; using (LinearGradientBrush lgbUpperRect = new LinearGradientBrush( rcUpRect, m_clrUpperFillStart, m_clrUpperFillEnd, LinearGradientMode.Vertical )) { lgbUpperRect.WrapMode = WrapMode.TileFlipY; g.FillRectangle( lgbUpperRect, rcUpRect ); } rcDownRect.Height = rcDownRect.Height / 2; rcDownRect.Y = rcUpRect.Bottom; using (LinearGradientBrush lgbDwnRect = new LinearGradientBrush( rcDownRect, m_clrFillStart, m_clrFillEnd, LinearGradientMode.Vertical )) { g.FillRectangle( lgbDwnRect, rcDownRect ); } g.ResetClip(); break; } #region Draw button separators g.DrawLine( new Pen(m_clrButtonBoxOuter), rcBox.Right - lBtnWidth, rcBox.Bottom, rcBox.Right - lBtnWidth, rcBox.Top + 1); g.DrawLine( new Pen(m_clrButtonBoxInner), rcBox.Right - lBtnWidth - 1, rcBox.Bottom, rcBox.Right - lBtnWidth - 1, rcBox.Top + 1); g.DrawLine( new Pen(m_clrButtonBoxOuter), rcBox.Right - lBtnWidth * 2, rcBox.Bottom - 2, rcBox.Right - lBtnWidth * 2, rcBox.Top + 1); g.DrawLine( new Pen(m_clrButtonBoxInner), rcBox.Right - lBtnWidth * 2 - 1, rcBox.Bottom - 2, rcBox.Right - lBtnWidth * 2 - 1, rcBox.Top + 1); #endregion #region Render buttons g.SetClip(XButtonBox); foreach (GradualTitleBarButton btn in m_xtbButtons) { btn.XButtonLeft = lX; btn.XButtonTop = lY; btn.RenderTitleBarButton(btn.XButtonLeft, btn.XButtonTop, g, XButtonBox); lX -= btn.XButtonWidth + 1; } g.ResetClip(); #endregion g.DrawPath( new Pen(m_clrButtonBoxOuter), XButtonBox ); DrawInnerTitleBarBoxBorder(g, rcBox, m_clrButtonBoxInner); } } else { int lSP = lSinglePosX; foreach (GradualTitleBarButton btn in m_xtbButtons) { btn.XButtonHeight = 13; btn.XButtonWidth = 13; btn.XButtonLeft = lSP; btn.XButtonTop = lSinglePosY; btn.RenderTitleBarButton( btn.XButtonLeft, btn.XButtonTop, g, null ); lSP -= btn.XButtonWidth + 4; } } } }
private void FillTitleBar(Graphics g, Rectangle rcTitleBar) { GraphicsPath GradualTitleBarPath = new GraphicsPath(); GradualTitleBarPath = BuildTitleBarShape(rcTitleBar); using (GradualAntiAlias xaa = new GradualAntiAlias(g)) { #region Fill titlebar switch (m_eTitleBarFill) { case GradualTitleBarFill.AdvancedRendering: using (LinearGradientBrush lgb = new LinearGradientBrush(rcTitleBar, m_TitleBarMix[0], m_TitleBarMix[4], LinearGradientMode.Vertical)) { lgb.InterpolationColors = GradualFormHelper.ColorMix(m_TitleBarMix, true); g.FillPath(lgb, GradualTitleBarPath); } #region Draw titlebar glow using (GraphicsPath XGlow = new GraphicsPath()) { XGlow.AddEllipse(rcTitleBar.Left, rcTitleBar.Bottom / 2 + 4, rcTitleBar.Width, rcTitleBar.Height); using (PathGradientBrush pgb = new PathGradientBrush(XGlow)) { pgb.CenterColor = Color.White; pgb.SurroundColors = new Color[] { Color.FromArgb(0, 229, 121, 13) }; g.SetClip(GradualTitleBarPath); g.FillPath(pgb, XGlow); g.ResetClip(); } } #endregion break; case GradualTitleBarFill.Texture: if (m_TitleBarTexture != null) { using (TextureBrush tb = new TextureBrush(m_TitleBarTexture)) { g.FillPath(tb, GradualTitleBarPath); } } break; case GradualTitleBarFill.LinearRendering: RectangleF rcLinearFill = GradualTitleBarPath.GetBounds(); g.SetClip(GradualTitleBarPath); using (LinearGradientBrush lgbLinearFill = new LinearGradientBrush( rcLinearFill, m_clrFillStart, m_clrFillEnd, LinearGradientMode.Vertical )) { g.FillRectangle( lgbLinearFill, rcLinearFill ); } g.ResetClip(); break; case GradualTitleBarFill.UpperGlow: RectangleF rcGlow = GradualTitleBarPath.GetBounds(); g.SetClip(GradualTitleBarPath); rcGlow.Height /= 2; using (LinearGradientBrush lgbUpperGlow = new LinearGradientBrush( rcGlow, m_clrUpperFillStart, m_clrUpperFillEnd, LinearGradientMode.Vertical )) { g.FillRectangle( lgbUpperGlow, rcGlow ); } g.ResetClip(); break; case GradualTitleBarFill.RectangleRendering: RectangleF rcDownRect = GradualTitleBarPath.GetBounds(); RectangleF rcUpRect = GradualTitleBarPath.GetBounds(); g.SetClip(GradualTitleBarPath); rcUpRect.Height /= 2; using (LinearGradientBrush lgbUpperRect = new LinearGradientBrush( rcUpRect, m_clrUpperFillStart, m_clrUpperFillEnd, LinearGradientMode.Vertical )) { lgbUpperRect.WrapMode = WrapMode.TileFlipY; g.FillRectangle( lgbUpperRect, rcUpRect ); } rcDownRect.Height = rcDownRect.Height / 2; rcDownRect.Y = rcUpRect.Bottom; using (LinearGradientBrush lgbDwnRect = new LinearGradientBrush( rcDownRect, m_clrFillStart, m_clrFillEnd, LinearGradientMode.Vertical )) { g.FillRectangle( lgbDwnRect, rcDownRect ); } g.ResetClip(); break; } #endregion #region Draw back image DrawTitleBarBackImage(g, rcTitleBar, GradualTitleBarPath); #endregion DrawOuterTitleBarBorder(g, rcTitleBar, m_clrOuterTitleBarColor); DrawInnerTitleBarBorder(g, rcTitleBar, m_clrInnerTitleBarColor); } GradualTitleBarPath.Dispose(); }