/// <summary> /// Paints the underline for the specified node /// </summary> /// <param name="oNode"></param> /// <param name="oGraphics"></param> /// <param name="nX"></param> /// <param name="nY"></param> private void PaintNodeUnderline(Node oNode, string sText, Graphics oGraphics, int nX, int nY) { UnderlineStyle oStyle = oNode.GetUnderlineStyle(); Pen oPen = new Pen(oNode.GetUnderlineColor(), 1); SizeF oSize = oGraphics.MeasureString(StringDrawUtils.GetInstance().GetTextFromFormattedString(sText), oNode.GetFont(), oNode.GetTreeView().GetDrawWidth() - nX - 8); oSize.Width += 2; if (oStyle == UnderlineStyle.Tilde) { Pen oClearPen = null; if (oNode.IsSelected == false) { if (oNode.BackgroundStyle.Visible == false) oClearPen = oNode.GetUnderlineBackColor(); else oClearPen = new Pen(oNode.BackgroundStyle.BackColor, 1); } else oClearPen = new Pen(oNode.GetSelectedBackColor(), 1); int nStep = 0; while (nX + 4 + nStep < nX + oSize.Width) { oGraphics.DrawLine(oPen, nX + 4 + nStep, nY + oSize.Height - 2, nX + 5 + nStep, nY + oSize.Height - 2); oGraphics.DrawLine(oClearPen, nX + 5 + nStep, nY + oSize.Height - 2, nX + 6 + nStep, nY + oSize.Height - 2); nStep += 4; } nStep = 0; while (nX + 4 + nStep < nX + oSize.Width) { oGraphics.DrawLine(oPen, nX + 5 + nStep, nY + oSize.Height - 1, nX + 6 + nStep, nY + oSize.Height - 1); oGraphics.DrawLine(oClearPen, nX + 6 + nStep, nY + oSize.Height - 1, nX + 7 + nStep, nY + oSize.Height - 1); nStep += 2; } nStep = 0; while (nX + 4 + nStep < nX + oSize.Width) { oGraphics.DrawLine(oPen, nX + 6 + nStep, nY + oSize.Height, nX + 7 + nStep, nY + oSize.Height); oGraphics.DrawLine(oClearPen, nX + 7 + nStep, nY + oSize.Height, nX + 8 + nStep, nY + oSize.Height); nStep += 4; } oClearPen.Dispose(); } else { if (oStyle == UnderlineStyle.Dash) oPen.DashStyle = DashStyle.Dash; if (oStyle == UnderlineStyle.Dot) oPen.DashStyle = DashStyle.Dot; oGraphics.DrawLine(oPen, nX + 4, nY + oSize.Height - 2, nX + oSize.Width, nY + oSize.Height - 2); } oPen.Dispose(); }