public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (!markers.Any() || !textView.VisualLinesValid)
            {
                return;
            }
            var visualLines = textView.VisualLines;

            if (visualLines.Count == 0)
            {
                return;
            }

            int viewStart = visualLines.First().FirstDocumentLine.Offset;
            int viewEnd   = visualLines.Last().LastDocumentLine.EndOffset;

            foreach (ErrorTextMarker marker in markers.FindOverlappingSegments(viewStart, viewEnd - viewStart))
            {
                foreach (Rect rect in BackgroundGeometryBuilder.GetRectsForSegment(textView, marker))
                {
                    Point startPoint = rect.BottomLeft;
                    Point endPoint   = rect.BottomRight;

                    var pen = new Pen(new SolidColorBrush(marker.MarkerColor), 1);
                    pen.Freeze();

                    const double offset = 2.5;
                    int          count  = Math.Max((int)((endPoint.X - startPoint.X) / offset) + 1, 4);

                    var geometry = new StreamGeometry();
                    using (StreamGeometryContext ctx = geometry.Open())
                    {
                        ctx.BeginFigure(startPoint, false, false);
                        ctx.PolyLineTo(CreatePoints(startPoint, offset, count).ToArray(), true, false);
                    }
                    geometry.Freeze();

                    drawingContext.DrawGeometry(Brushes.Transparent, pen, geometry);
                    break;
                }
            }
        }