public void Draw(TextView textView, DrawingContext dc) { var messages = BuildDetailMessages.ToLookup(x => x.StartLine); var pen = Caches.GetPen(ByteColor.Tomato, 2); var lineNo = 0; foreach (var visualLine in textView.VisualLines) { if (messages.Contains(lineNo)) { foreach (var message in messages[lineNo]) { var end = message.EndCharacter; if (end == message.StartCharacter) { ++end; } var segments = BackgroundGeometryBuilder.GetRectsFromVisualSegment( textView, visualLine, message.StartCharacter, end); foreach (var segment in segments) { dc.DrawLine( pen, new Point(segment.Left, segment.Bottom - 1), new Point(segment.Right, segment.Bottom - 1)); } } } ++lineNo; } }
internal static Pen GetBorderPen(this FrameworkElement self, ByteColor color) => Caches.GetPen(color, self.RoundLayoutValue(BorderWidth));