private static void ApplyHighlight(VisualLineElement element, Highlight highlight, double magnify)
        {
            var trp = element.TextRunProperties;

            var foregroundBrush = ColorBrush(highlight.Foreground);
            if (foregroundBrush != null) trp.SetForegroundBrush(foregroundBrush);

            // Block background highlighting handled by BlockBackgroundRenderer
            // Otherwise selection highlight does not work as expected
            if (!highlight.Name.Contains("Block"))
            {
                var backgroundBrush = ColorBrush(highlight.Background);
                if (backgroundBrush != null) trp.SetBackgroundBrush(backgroundBrush);
            }

            if (!string.IsNullOrWhiteSpace(highlight.FontWeight) || !string.IsNullOrWhiteSpace(highlight.FontStyle))
            {
                var tf = trp.Typeface;
                var weight = ConvertFontWeight(highlight.FontWeight) ?? tf.Weight;
                var style = ConvertFontStyle(highlight.FontStyle) ?? tf.Style;
                var typeFace = new Typeface(tf.FontFamily, style, weight, tf.Stretch);
                trp.SetTypeface(typeFace);
            }

            if (highlight.Underline) trp.SetTextDecorations(TextDecorations.Underline);
            if (double.IsNaN(magnify) == false) trp.SetFontRenderingEmSize(trp.FontRenderingEmSize*magnify);
        }
        private static void ApplyHighlight(VisualLineElement element, Highlight highlight, double magnify)
        {
            var trp = element.TextRunProperties;

            var foregroundBrush = ColorBrush(highlight.Foreground);

            if (foregroundBrush != null)
            {
                trp.SetForegroundBrush(foregroundBrush);
            }

            var backgroundBrush = ColorBrush(highlight.Background);

            if (backgroundBrush != null)
            {
                trp.SetBackgroundBrush(backgroundBrush);
            }

            if (!string.IsNullOrWhiteSpace(highlight.FontWeight) || !string.IsNullOrWhiteSpace(highlight.FontStyle))
            {
                var tf       = element.TextRunProperties.Typeface;
                var weight   = ConvertFontWeight(highlight.FontWeight) ?? tf.Weight;
                var style    = ConvertFontStyle(highlight.FontStyle) ?? tf.Style;
                var typeFace = new Typeface(tf.FontFamily, style, weight, tf.Stretch);
                trp.SetTypeface(typeFace);
            }

            if (highlight.Underline)
            {
                trp.SetTextDecorations(TextDecorations.Underline);
            }
            if (double.IsNaN(magnify) == false)
            {
                trp.SetFontRenderingEmSize(trp.FontRenderingEmSize * magnify);
            }
        }
 private void ApplyLinePart(Highlight highlight, int sourceStart, int sourceLength, int lineStart, int lineEnd, int leadingSpaces, double magnify)
 {
     var start = Math.Max(sourceStart, lineStart + leadingSpaces);
     var end = Math.Min(lineEnd, sourceStart + sourceLength);
     if (start < end) ChangeLinePart(start, end, element => ApplyHighlight(element, highlight, magnify));
 }
예제 #4
0
 private static void UpdateHilightingColor(HighlightingColor highlightingColor, Highlight highlight)
 {
     highlightingColor.Foreground = new HighlightBrush(highlight.Foreground);
     highlightingColor.Background = new HighlightBrush(highlight.Background);
     highlightingColor.FontStyle  = ConvertFontStyle(highlight.FontStyle);
     highlightingColor.FontWeight = ConvertFontWeight(highlight.FontWeight);
     highlightingColor.Underline  = highlight.Underline;
 }