public GraphicsPath FindX3DBorderPrimitive(Rectangle rcBorder) { switch (m_eBorderType) { case EBorderType.Rounded: m_BorderShape = EFormHelper.RoundRect((RectangleF)rcBorder, m_lRadius, m_lRadius, 0, 0); break; case EBorderType.Inclinated: m_BorderShape = CreateInclinatedBorderPath(rcBorder); break; } return(m_BorderShape); }
/// <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 EButtonFillMode.UpperGlow: rcBtn.Height = 3; using (LinearGradientBrush lgb = new LinearGradientBrush(rcBtn, clrStart, clrEnd, LinearGradientMode.Vertical)) { g.FillRectangle(lgb, rcBtn); } break; case EButtonFillMode.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 (EAntiAlias xaa = new EAntiAlias(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 = EFormHelper.RoundRect((RectangleF)rcBtn, 0, 0, 4, 4)) { lgb.WrapMode = WrapMode.TileFlipXY; g.FillPath(lgb, XGlowPath); } } #endregion } // reset clipping back: g.ResetClip(); break; } }
/// <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 EBorderType.Rectangular: XBorderPath = EFormHelper.RoundRect((RectangleF)rcBorder, lC, lC, lC, lC); break; case EBorderType.Rounded: XBorderPath = EFormHelper.RoundRect((RectangleF)rcBorder, lC, lC, 0, 0); break; case EBorderType.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 EBorderType.Rectangular: XBorderPath = EFormHelper.RoundRect((RectangleF)rcBorder, lC, lC, lC, lC); break; case EBorderType.Rounded: XBorderPath = EFormHelper.RoundRect((RectangleF)rcBorder, lC, lC, 0, 0); break; case EBorderType.Inclinated: XBorderPath = CreateInclinatedBorderPath(rcBorder); break; } Pen pen = new Pen(m_clrOuterBorder[o]); g.DrawPath(pen, XBorderPath); DeflateRect(ref rcBorder); if (m_eBorderType != EBorderType.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 }