1 | // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
---|
2 | // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
---|
3 | |
---|
4 | using System; |
---|
5 | using System.Windows; |
---|
6 | using System.Windows.Media; |
---|
7 | |
---|
8 | using ICSharpCode.AvalonEdit.Rendering; |
---|
9 | |
---|
10 | namespace ICSharpCode.AvalonEdit.Rendering |
---|
11 | { |
---|
12 | sealed class CurrentLineHighlightRenderer : IBackgroundRenderer |
---|
13 | { |
---|
14 | #region Fields |
---|
15 | |
---|
16 | int line; |
---|
17 | TextView textView; |
---|
18 | |
---|
19 | public static readonly Color DefaultBackground = Color.FromArgb(22, 20, 220, 224); |
---|
20 | public static readonly Color DefaultBorder = Color.FromArgb(52, 0, 255, 110); |
---|
21 | |
---|
22 | #endregion |
---|
23 | |
---|
24 | #region Properties |
---|
25 | |
---|
26 | public int Line { |
---|
27 | get { return this.Line; } |
---|
28 | set { |
---|
29 | if (this.line != value) { |
---|
30 | this.line = value; |
---|
31 | this.textView.InvalidateLayer(this.Layer); |
---|
32 | } |
---|
33 | } |
---|
34 | } |
---|
35 | |
---|
36 | public KnownLayer Layer |
---|
37 | { |
---|
38 | get { return KnownLayer.Selection; } |
---|
39 | } |
---|
40 | |
---|
41 | public Brush BackgroundBrush { |
---|
42 | get; set; |
---|
43 | } |
---|
44 | |
---|
45 | public Pen BorderPen { |
---|
46 | get; set; |
---|
47 | } |
---|
48 | |
---|
49 | #endregion |
---|
50 | |
---|
51 | public CurrentLineHighlightRenderer(TextView textView) |
---|
52 | { |
---|
53 | if (textView == null) |
---|
54 | throw new ArgumentNullException("textView"); |
---|
55 | |
---|
56 | this.BorderPen = new Pen(new SolidColorBrush(DefaultBorder), 1); |
---|
57 | this.BorderPen.Freeze(); |
---|
58 | |
---|
59 | this.BackgroundBrush = new SolidColorBrush(DefaultBackground); |
---|
60 | this.BackgroundBrush.Freeze(); |
---|
61 | |
---|
62 | this.textView = textView; |
---|
63 | this.textView.BackgroundRenderers.Add(this); |
---|
64 | |
---|
65 | this.line = 0; |
---|
66 | } |
---|
67 | |
---|
68 | public void Draw(TextView textView, DrawingContext drawingContext) |
---|
69 | { |
---|
70 | if(!this.textView.Options.HighlightCurrentLine) |
---|
71 | return; |
---|
72 | |
---|
73 | BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder(); |
---|
74 | |
---|
75 | var visualLine = this.textView.GetVisualLine(line); |
---|
76 | if (visualLine == null) return; |
---|
77 | |
---|
78 | var linePosY = visualLine.VisualTop - this.textView.ScrollOffset.Y; |
---|
79 | |
---|
80 | builder.AddRectangle(textView, new Rect(0, linePosY, textView.ActualWidth, visualLine.Height)); |
---|
81 | |
---|
82 | Geometry geometry = builder.CreateGeometry(); |
---|
83 | if (geometry != null) { |
---|
84 | drawingContext.DrawGeometry(this.BackgroundBrush, this.BorderPen, geometry); |
---|
85 | } |
---|
86 | } |
---|
87 | } |
---|
88 | } |
---|