// Token: 0x06002D38 RID: 11576 RVA: 0x000CC2B3 File Offset: 0x000CA4B3 internal FixedHighlight(UIElement element, int beginOffset, int endOffset, FixedHighlightType t, Brush foreground, Brush background) { this._element = element; this._gBeginOffset = beginOffset; this._gEndOffset = endOffset; this._type = t; this._foregroundBrush = foreground; this._backgroundBrush = background; }
//------------------------------------------------------------------- // // Connstructors // //---------------------------------------------------------------------- #region Constructors /// <summary> /// Create a new FixedHighlight for a Glyphs with character offset of /// beginOffset to endOffset, to be rendered with a given brush. /// </summary> internal FixedHighlight(UIElement element, int beginOffset, int endOffset, FixedHighlightType t, Brush foreground, Brush background) { Debug.Assert(element != null && beginOffset >= 0 && endOffset >= 0); _element = element; _gBeginOffset = beginOffset; _gEndOffset = endOffset; _type = t; _foregroundBrush = foreground; _backgroundBrush = background; }
//-------------------------------------------------------------------- // // Connstructors // //--------------------------------------------------------------------- #region Constructors /// <summary> /// Create a new FixedHighlight for a Glyphs with character offset of /// beginOffset to endOffset, to be rendered with a given brush. /// </summary> internal FixedHighlight(UIElement element, int beginOffset, int endOffset, FixedHighlightType t, Brush foreground, Brush background) { Debug.Assert(element != null && beginOffset >= 0 && endOffset >= 0); _element = element; _gBeginOffset = beginOffset; _gEndOffset = endOffset; _type = t; _foregroundBrush = foreground; _backgroundBrush = background; }
// Get the highlights, in Glyphs granularity, that covers this range internal void GetMultiHighlights(FixedTextPointer start, FixedTextPointer end, Dictionary<FixedPage, ArrayList> highlights, FixedHighlightType t, Brush foregroundBrush, Brush backgroundBrush) { Debug.Assert(highlights != null); if (start.CompareTo(end) > 0) { // make sure start <= end FixedTextPointer temp = start; start = end; end = temp; } FixedSOMElement[] elements; //Start and end indices in selection for first and last FixedSOMElements respectively int startIndex = 0; int endIndex = 0; if (_GetFixedNodesForFlowRange(start, end, out elements, out startIndex, out endIndex)) { for(int i=0; i<elements.Length; i++) { FixedSOMElement elem = elements[i]; FixedNode fn = elem.FixedNode; // Get the FixedPage if possible FixedPage page = this.FixedDocument.SyncGetPageWithCheck(fn.Page); if (page == null) { continue; } DependencyObject o = page.GetElement(fn); if (o == null) { continue; } int beginOffset = 0; int endOffset; UIElement e; if (o is Image || o is Path) { e = (UIElement)o; endOffset = 1; } else { Glyphs g = o as Glyphs; if (g == null) { continue; } e = (UIElement)o; beginOffset = elem.StartIndex; endOffset = elem.EndIndex; } if (i == 0) { beginOffset = startIndex; } if (i == elements.Length - 1) { endOffset = endIndex; } ArrayList lfs; if (highlights.ContainsKey(page)) { lfs = highlights[page]; } else { lfs = new ArrayList(); highlights.Add(page, lfs); } FixedSOMTextRun textRun = elem as FixedSOMTextRun; if (textRun != null && textRun.IsReversed) { int oldBeginOffset = beginOffset; beginOffset = elem.EndIndex - endOffset; endOffset = elem.EndIndex - oldBeginOffset; } FixedHighlight fh = new FixedHighlight(e, beginOffset, endOffset, t, foregroundBrush, backgroundBrush); lfs.Add(fh); } } }
// Token: 0x06002EA1 RID: 11937 RVA: 0x000D2BCC File Offset: 0x000D0DCC internal void GetMultiHighlights(FixedTextPointer start, FixedTextPointer end, Dictionary <FixedPage, ArrayList> highlights, FixedHighlightType t, Brush foregroundBrush, Brush backgroundBrush) { if (start.CompareTo(end) > 0) { FixedTextPointer fixedTextPointer = start; start = end; end = fixedTextPointer; } int num = 0; int num2 = 0; FixedSOMElement[] array; if (this._GetFixedNodesForFlowRange(start, end, out array, out num, out num2)) { for (int i = 0; i < array.Length; i++) { FixedSOMElement fixedSOMElement = array[i]; FixedNode fixedNode = fixedSOMElement.FixedNode; FixedPage fixedPage = this.FixedDocument.SyncGetPageWithCheck(fixedNode.Page); if (fixedPage != null) { DependencyObject element = fixedPage.GetElement(fixedNode); if (element != null) { int num3 = 0; UIElement element2; int num4; if (element is Image || element is Path) { element2 = (UIElement)element; num4 = 1; } else { Glyphs glyphs = element as Glyphs; if (glyphs == null) { goto IL_144; } element2 = (UIElement)element; num3 = fixedSOMElement.StartIndex; num4 = fixedSOMElement.EndIndex; } if (i == 0) { num3 = num; } if (i == array.Length - 1) { num4 = num2; } ArrayList arrayList; if (highlights.ContainsKey(fixedPage)) { arrayList = highlights[fixedPage]; } else { arrayList = new ArrayList(); highlights.Add(fixedPage, arrayList); } FixedSOMTextRun fixedSOMTextRun = fixedSOMElement as FixedSOMTextRun; if (fixedSOMTextRun != null && fixedSOMTextRun.IsReversed) { int num5 = num3; num3 = fixedSOMElement.EndIndex - num4; num4 = fixedSOMElement.EndIndex - num5; } FixedHighlight value = new FixedHighlight(element2, num3, num4, t, foregroundBrush, backgroundBrush); arrayList.Add(value); } } IL_144 :; } } }
// Token: 0x06002CE0 RID: 11488 RVA: 0x000CA4F8 File Offset: 0x000C86F8 private void OnHighlightChanged(object sender, HighlightChangedEventArgs args) { ITextContainer fixedContainer = this.FixedContainer; Highlights highlights = null; FixedDocumentSequence fixedDocumentSequence = base.Parent as FixedDocumentSequence; if (fixedDocumentSequence != null) { highlights = fixedDocumentSequence.TextContainer.Highlights; } else { highlights = this.FixedContainer.Highlights; } List <FixedPage> list = new List <FixedPage>(); foreach (FixedPage item in this._highlights.Keys) { list.Add(item); } this._highlights.Clear(); StaticTextPointer staticTextPointer = fixedContainer.CreateStaticPointerAtOffset(0); for (;;) { if (!highlights.IsContentHighlighted(staticTextPointer, LogicalDirection.Forward)) { staticTextPointer = highlights.GetNextHighlightChangePosition(staticTextPointer, LogicalDirection.Forward); if (staticTextPointer.IsNull) { break; } } object highlightValue = highlights.GetHighlightValue(staticTextPointer, LogicalDirection.Forward, typeof(TextSelection)); StaticTextPointer textPosition = staticTextPointer; FixedHighlightType fixedHighlightType = FixedHighlightType.None; Brush foregroundBrush = null; Brush backgroundBrush = null; if (highlightValue != DependencyProperty.UnsetValue) { do { staticTextPointer = highlights.GetNextHighlightChangePosition(staticTextPointer, LogicalDirection.Forward); }while (highlights.GetHighlightValue(staticTextPointer, LogicalDirection.Forward, typeof(TextSelection)) != DependencyProperty.UnsetValue); fixedHighlightType = FixedHighlightType.TextSelection; foregroundBrush = null; backgroundBrush = null; } else { AnnotationHighlightLayer.HighlightSegment highlightSegment = highlights.GetHighlightValue(textPosition, LogicalDirection.Forward, typeof(HighlightComponent)) as AnnotationHighlightLayer.HighlightSegment; if (highlightSegment != null) { staticTextPointer = highlights.GetNextHighlightChangePosition(staticTextPointer, LogicalDirection.Forward); fixedHighlightType = FixedHighlightType.AnnotationHighlight; backgroundBrush = highlightSegment.Fill; } } if (fixedHighlightType != FixedHighlightType.None) { this.FixedContainer.GetMultiHighlights((FixedTextPointer)textPosition.CreateDynamicTextPointer(LogicalDirection.Forward), (FixedTextPointer)staticTextPointer.CreateDynamicTextPointer(LogicalDirection.Forward), this._highlights, fixedHighlightType, foregroundBrush, backgroundBrush); } } ArrayList arrayList = new ArrayList(); IList ranges = args.Ranges; for (int i = 0; i < ranges.Count; i++) { TextSegment textSegment = (TextSegment)ranges[i]; int pageNumber = this.FixedContainer.GetPageNumber(textSegment.Start); int pageNumber2 = this.FixedContainer.GetPageNumber(textSegment.End); for (int j = pageNumber; j <= pageNumber2; j++) { if (arrayList.IndexOf(j) < 0) { arrayList.Add(j); } } } ICollection <FixedPage> keys = this._highlights.Keys; foreach (FixedPage fixedPage in list) { if (!keys.Contains(fixedPage)) { int indexOfPage = this.GetIndexOfPage(fixedPage); if (indexOfPage >= 0 && indexOfPage < this.PageCount && arrayList.IndexOf(indexOfPage) < 0) { arrayList.Add(indexOfPage); } } } arrayList.Sort(); foreach (object obj in arrayList) { int index = (int)obj; HighlightVisual highlightVisual = HighlightVisual.GetHighlightVisual(this.SyncGetPage(index, false)); if (highlightVisual != null) { highlightVisual.InvalidateHighlights(); } } }
// Get the highlights, in Glyphs granularity, that covers this range internal void GetMultiHighlights(FixedTextPointer start, FixedTextPointer end, Dictionary <FixedPage, ArrayList> highlights, FixedHighlightType t, Brush foregroundBrush, Brush backgroundBrush) { Debug.Assert(highlights != null); if (start.CompareTo(end) > 0) { // make sure start <= end FixedTextPointer temp = start; start = end; end = temp; } FixedSOMElement[] elements; //Start and end indices in selection for first and last FixedSOMElements respectively int startIndex = 0; int endIndex = 0; if (_GetFixedNodesForFlowRange(start, end, out elements, out startIndex, out endIndex)) { for (int i = 0; i < elements.Length; i++) { FixedSOMElement elem = elements[i]; FixedNode fn = elem.FixedNode; // Get the FixedPage if possible FixedPage page = this.FixedDocument.SyncGetPageWithCheck(fn.Page); if (page == null) { continue; } DependencyObject o = page.GetElement(fn); if (o == null) { continue; } int beginOffset = 0; int endOffset; UIElement e; if (o is Image || o is Path) { e = (UIElement)o; endOffset = 1; } else { Glyphs g = o as Glyphs; if (g == null) { continue; } e = (UIElement)o; beginOffset = elem.StartIndex; endOffset = elem.EndIndex; } if (i == 0) { beginOffset = startIndex; } if (i == elements.Length - 1) { endOffset = endIndex; } ArrayList lfs; if (highlights.ContainsKey(page)) { lfs = highlights[page]; } else { lfs = new ArrayList(); highlights.Add(page, lfs); } FixedSOMTextRun textRun = elem as FixedSOMTextRun; if (textRun != null && textRun.IsReversed) { int oldBeginOffset = beginOffset; beginOffset = elem.EndIndex - endOffset; endOffset = elem.EndIndex - oldBeginOffset; } FixedHighlight fh = new FixedHighlight(e, beginOffset, endOffset, t, foregroundBrush, backgroundBrush); lfs.Add(fh); } } }