Free cookie consent management tool by TermsFeed Policy Generator

source: branches/CodeEditor/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/Search/SearchResultBackgroundRenderer.cs @ 11700

Last change on this file since 11700 was 11700, checked in by jkarder, 9 years ago

#2077: created branch and added first version

File size: 3.1 KB
Line 
1// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
2//
3// Permission is hereby granted, free of charge, to any person obtaining a copy of this
4// software and associated documentation files (the "Software"), to deal in the Software
5// without restriction, including without limitation the rights to use, copy, modify, merge,
6// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
7// to whom the Software is furnished to do so, subject to the following conditions:
8//
9// The above copyright notice and this permission notice shall be included in all copies or
10// substantial portions of the Software.
11//
12// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
13// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
15// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17// DEALINGS IN THE SOFTWARE.
18
19using System;
20using System.Linq;
21using System.Windows;
22using System.Windows.Controls;
23using System.Windows.Input;
24using System.Windows.Media;
25
26using ICSharpCode.AvalonEdit.Document;
27using ICSharpCode.AvalonEdit.Editing;
28using ICSharpCode.AvalonEdit.Rendering;
29
30namespace ICSharpCode.AvalonEdit.Search
31{
32  class SearchResultBackgroundRenderer : IBackgroundRenderer
33  {
34    TextSegmentCollection<SearchResult> currentResults = new TextSegmentCollection<SearchResult>();
35   
36    public TextSegmentCollection<SearchResult> CurrentResults {
37      get { return currentResults; }
38    }
39   
40    public KnownLayer Layer {
41      get {
42        // draw behind selection
43        return KnownLayer.Selection;
44      }
45    }
46   
47    public SearchResultBackgroundRenderer()
48    {
49      markerBrush = Brushes.LightGreen;
50      markerPen = new Pen(markerBrush, 1);
51    }
52   
53    Brush markerBrush;
54    Pen markerPen;
55   
56    public Brush MarkerBrush {
57      get { return markerBrush; }
58      set {
59        this.markerBrush = value;
60        markerPen = new Pen(markerBrush, 1);
61      }
62    }
63   
64    public void Draw(TextView textView, DrawingContext drawingContext)
65    {
66      if (textView == null)
67        throw new ArgumentNullException("textView");
68      if (drawingContext == null)
69        throw new ArgumentNullException("drawingContext");
70     
71      if (currentResults == null || !textView.VisualLinesValid)
72        return;
73     
74      var visualLines = textView.VisualLines;
75      if (visualLines.Count == 0)
76        return;
77     
78      int viewStart = visualLines.First().FirstDocumentLine.Offset;
79      int viewEnd = visualLines.Last().LastDocumentLine.EndOffset;
80     
81      foreach (SearchResult result in currentResults.FindOverlappingSegments(viewStart, viewEnd - viewStart)) {
82        BackgroundGeometryBuilder geoBuilder = new BackgroundGeometryBuilder();
83        geoBuilder.AlignToMiddleOfPixels = true;
84        geoBuilder.CornerRadius = 3;
85        geoBuilder.AddSegment(textView, result);
86        Geometry geometry = geoBuilder.CreateGeometry();
87        if (geometry != null) {
88          drawingContext.DrawGeometry(markerBrush, markerPen, geometry);
89        }
90      }
91    }
92  }
93}
Note: See TracBrowser for help on using the repository browser.