public GraphicsPath FindX3DBorderPrimitive(Rectangle rcBorder) { switch (m_eBorderType) { case XBorderType.Rounded: m_BorderShape = XCoolFormHelper.RoundRect((RectangleF)rcBorder, m_lRadius, m_lRadius, 0, 0); break; case XBorderType.Inclinated: m_BorderShape = createInclinatedBorderPath(rcBorder); break; } return(m_BorderShape); }
private void FillMenuIconGradient( GraphicsPath XFillPath, Graphics g, List <Color> mix ) { using (XAntiAlias xaa = new XAntiAlias(g)) { using (LinearGradientBrush lgb = new LinearGradientBrush (XFillPath.GetBounds(), mix[0], mix[4], LinearGradientMode.Vertical)) { lgb.InterpolationColors = XCoolFormHelper.ColorMix(mix, false); g.FillPath( lgb, XFillPath ); } } }
/// <summary> /// Draws inner & outer 3D borders. /// </summary> /// <param name="g"> Graphics object</param> /// <param name="XBorderPath"> Border path</param> /// <param name="rcBorder"> Border bounds</param> /// <param name="lCorner"> Radius of a rounded rectangle</param> /// <param name="bFlat"> Controls border type mode</param> private void DrawBorderLine( Graphics g, GraphicsPath XBorderPath, Rectangle rcBorder, int lCorner, bool bFlat ) { int lC = lCorner; #region Draw outer border if (bFlat) { switch (m_eBorderType) { case XBorderType.Rectangular: XBorderPath = XCoolFormHelper.RoundRect((RectangleF)rcBorder, lC, lC, lC, lC); break; case XBorderType.Rounded: XBorderPath = XCoolFormHelper.RoundRect((RectangleF)rcBorder, lC, lC, 0, 0); break; case XBorderType.Inclinated: XBorderPath = createInclinatedBorderPath(rcBorder); break; } using (Pen pFlat = new Pen(m_clrFlatBorder)) { g.DrawPath(pFlat, XBorderPath); } } else { for (int o = 0; o < m_clrOuterBorder.Length; o++) { switch (m_eBorderType) { case XBorderType.Rectangular: XBorderPath = XCoolFormHelper.RoundRect((RectangleF)rcBorder, lC, lC, lC, lC); break; case XBorderType.Rounded: XBorderPath = XCoolFormHelper.RoundRect((RectangleF)rcBorder, lC, lC, 0, 0); break; case XBorderType.Inclinated: XBorderPath = createInclinatedBorderPath(rcBorder); break; } Pen pen = new Pen(m_clrOuterBorder[o]); g.DrawPath( pen, XBorderPath ); DeflateRect(ref rcBorder); if (m_eBorderType != XBorderType.Rectangular) { lC--; } } #endregion #region Draw inner border rcBorder.Y += m_lTitleBarHeight; rcBorder.Height -= m_lTitleBarHeight; for (int i = 0; i < m_clrInnerBorder.Length; i++) { Pen penInner = new Pen(m_clrInnerBorder[i]); g.DrawRectangle( penInner, rcBorder ); DeflateRect(ref rcBorder); } } #endregion }
/// <summary> /// Fills titlebar button. /// </summary> /// <param name="rcBtn"> Button bounding rectangle.</param> /// <param name="g"> Graphics object.</param> /// <param name="clrStart"> Color used to fill the button.</param> /// <param name="clrEnd"> Color used to fill the outer glow.</param> /// <param name="XBoxClip"> Path to perform clipping tasks.</param> private void FillButton( Rectangle rcBtn, Graphics g, Color clrStart, Color clrEnd, GraphicsPath XBoxClip ) { switch (m_eFillMode) { case XButtonFillMode.UpperGlow: rcBtn.Height = 3; using (LinearGradientBrush lgb = new LinearGradientBrush( rcBtn, clrStart, clrEnd, LinearGradientMode.Vertical)) { g.FillRectangle( lgb, rcBtn ); } break; case XButtonFillMode.FullFill: // restrict drawing inside button box / rectangle: g.SetClip(XBoxClip); g.SetClip(rcBtn, CombineMode.Intersect); #region Fill button using (SolidBrush sb = new SolidBrush(clrStart)) { g.FillRectangle( sb, rcBtn ); } #endregion using (XAntiAlias xaa = new XAntiAlias(g)) { #region Fill shine using (GraphicsPath XBtnGlow = new GraphicsPath()) { XBtnGlow.AddEllipse(rcBtn.Left - 5, rcBtn.Bottom - rcBtn.Height / 2 + 3, rcBtn.Width + 11, rcBtn.Height + 11); using (PathGradientBrush pgb = new PathGradientBrush(XBtnGlow)) { pgb.CenterColor = Color.FromArgb(235, Color.White); pgb.SurroundColors = new Color[] { Color.FromArgb(0, clrEnd) }; pgb.SetSigmaBellShape(0.8f); g.FillPath( pgb, XBtnGlow ); } } #endregion #region Fill upper glow rcBtn.Height = rcBtn.Height / 2 - 2; using (LinearGradientBrush lgb = new LinearGradientBrush( rcBtn, Color.FromArgb(80, Color.White), Color.FromArgb(140, Color.White), LinearGradientMode.Vertical)) { using (GraphicsPath XGlowPath = XCoolFormHelper.RoundRect((RectangleF)rcBtn, 0, 0, 4, 4)) { lgb.WrapMode = WrapMode.TileFlipXY; g.FillPath( lgb, XGlowPath ); } } #endregion } // reset clipping back: g.ResetClip(); break; } }
public void RenderTitleBarButtonsBox( Rectangle rcBox, Graphics g, int lSinglePosX, int lSinglePosY ) { using (XAntiAlias xaa = new XAntiAlias(g)) { int lBtnWidth = 0; int lBtnHeight = 0; foreach (XTitleBarButton btn in m_xtbButtons) { if (btn.ButtonStyle == XTitleBarButton.XTitleBarButtonStyle.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 XButtonBoxFill.ColorMix: using (LinearGradientBrush lgb = new LinearGradientBrush( rcBox, m_ButtonBoxColors[0], m_ButtonBoxColors[4], LinearGradientMode.Vertical)) { lgb.InterpolationColors = XCoolFormHelper.ColorMix ( m_ButtonBoxColors, false ); g.FillPath( lgb, XButtonBox ); } break; case XButtonBoxFill.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 (XTitleBarButton 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 (XTitleBarButton 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 XTitleBarPath = new GraphicsPath(); XTitleBarPath = BuildTitleBarShape(rcTitleBar); using (XAntiAlias xaa = new XAntiAlias(g)) { #region Fill titlebar switch (m_eTitleBarFill) { case XTitleBarFill.AdvancedRendering: using (LinearGradientBrush lgb = new LinearGradientBrush( rcTitleBar, m_TitleBarMix[0], m_TitleBarMix[4], LinearGradientMode.Vertical)) { lgb.InterpolationColors = XCoolFormHelper.ColorMix( m_TitleBarMix, true ); g.FillPath( lgb, XTitleBarPath ); } #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(XTitleBarPath); g.FillPath( pgb, XGlow ); g.ResetClip(); } } #endregion break; case XTitleBarFill.Texture: if (m_TitleBarTexture != null) { using (TextureBrush tb = new TextureBrush(m_TitleBarTexture)) { g.FillPath( tb, XTitleBarPath ); } } break; case XTitleBarFill.LinearRendering: RectangleF rcLinearFill = XTitleBarPath.GetBounds(); g.SetClip(XTitleBarPath); using (LinearGradientBrush lgbLinearFill = new LinearGradientBrush( rcLinearFill, m_clrFillStart, m_clrFillEnd, LinearGradientMode.Vertical )) { g.FillRectangle( lgbLinearFill, rcLinearFill ); } g.ResetClip(); break; case XTitleBarFill.UpperGlow: RectangleF rcGlow = XTitleBarPath.GetBounds(); g.SetClip(XTitleBarPath); rcGlow.Height /= 2; using (LinearGradientBrush lgbUpperGlow = new LinearGradientBrush( rcGlow, m_clrUpperFillStart, m_clrUpperFillEnd, LinearGradientMode.Vertical )) { g.FillRectangle( lgbUpperGlow, rcGlow ); } g.ResetClip(); break; case XTitleBarFill.RectangleRendering: RectangleF rcDownRect = XTitleBarPath.GetBounds(); RectangleF rcUpRect = XTitleBarPath.GetBounds(); g.SetClip(XTitleBarPath); 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, XTitleBarPath); #endregion DrawOuterTitleBarBorder(g, rcTitleBar, m_clrOuterTitleBarColor); DrawInnerTitleBarBorder(g, rcTitleBar, m_clrInnerTitleBarColor); } XTitleBarPath.Dispose(); }