/// <summary> /// Removes an existing underline /// </summary> public virtual void RemoveHighlight(Highlight h) { RemoveAdorner(h.BodyAdorner); if (CurrentMatch != null && h.IsBeforeOrAt(CurrentMatch)) { iteratingHighlightPtr--;//we have to move the iteratorPTR back since a highlight before it was deleted } //if startHighlightIndex is after where highlight is, then it must be decremented //eg highlight indexes:0 1 2 3 //startHighlightIndex=2 //remove highlight #1, means startHighlightIndex=>2-1=1 //but if remove highlight #3, startHighlightIndex doesnt change if (startHighlightIndex >= highlights.Count || h.IsBeforeOrAt(highlights[startHighlightIndex])) { startHighlightIndex--; } highlights.Remove(h); if (scrollBarHighlightHandler != null) { scrollBarHighlightHandler.Remove(h.ScrollBarAdorner); } }
internal void AttachTo(Highlight highlight) { highlight.ScrollBarAdorner = CreateScrollBarHighlightAdorner(highlight.BodyAdorner); Add(highlight.ScrollBarAdorner); }
/// <summary> /// Whether this Highlight is before or at the same position of <c>highlight</c>. /// </summary> internal protected virtual bool IsBeforeOrAt(Highlight highlight) { return(AbsoluteStart <= highlight.AbsoluteStart);//works because highlights are sorted }
/// <summary> /// Moves the underline due to user operations (typing) /// </summary> protected virtual void MoveHighlight(Highlight u, int start, int end) { // u.Start = start; // u.End = end; u.MoveTo(start, end); }
/// <summary> /// Determines whether a Highlight is registered. /// </summary> protected virtual bool IsRegistered(Highlight highlight) { highlights.Sort(highlightComparer); return(highlights.BinarySearch(highlight, highlightComparer) > -1); }