コード例 #1
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (host == null)
            {
                return;
            }
            var snapshot = isParentSnapshot ? host.SnapshotParent : host.Snapshot;

            if (snapshot == null)
            {
                return;
            }

            foreach (var v in textView.VisualLines)
            {
                var rc      = BackgroundGeometryBuilder.GetRectsFromVisualSegment(textView, v, 0, 1000).First();
                var linenum = v.FirstDocumentLine.LineNumber - 1;
                if (linenum >= snapshot.FileDetails.Count)
                {
                    continue;
                }

                drawingContext.DrawRectangle(GetLineBackgroundBrush(snapshot, linenum), pen, new Rect(0, rc.Top, textView.ActualWidth, rc.Height));
            }
        }
コード例 #2
0
            private void DrawSegment(DiffSegment segment, TextView textView, DrawingContext drawingContext)
            {
                BackgroundGeometryBuilder geoBuilder = new BackgroundGeometryBuilder
                {
                    AlignToWholePixels = true,
                    BorderThickness    = 0,
                    CornerRadius       = 3,
                };

                Brush markerBrush;

                switch (segment.type)
                {
                case DiffItem.DiffType.Deleted:
                    markerBrush = deletedBrush;
                    geoBuilder.AddSegment(textView, segment);
                    break;

                case DiffItem.DiffType.Inserted:
                    markerBrush = addedBrush;
                    geoBuilder.AddSegment(textView, segment);
                    break;

                default:
                    markerBrush = null;
                    break;
                }

                Geometry geometry = geoBuilder.CreateGeometry();

                if (geometry != null)
                {
                    drawingContext.DrawGeometry(markerBrush, null, geometry);
                }
            }
コード例 #3
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (this.openBracketOffset == null || this.closeBracketOffset == null)
            {
                return;
            }

            BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();

            builder.CornerRadius          = 1;
            builder.AlignToMiddleOfPixels = true;

            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = openBracketOffset, Length = 1
            });
            builder.CloseFigure();             // prevent connecting the two segments
            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = closeBracketOffset, Length = 1
            });

            Geometry geometry = builder.CreateGeometry();

            if (geometry != null)
            {
                drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
            }
        }
コード例 #4
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            textView.EnsureVisualLines();
            var color = new SolidColorBrush(ConfigHost.Coloring.BreakPoint.TextHighlightColor);

            color.Freeze();
            var invalidBps = new List <DataContext.BreakpointsPaneUtil.Breakpoint>();

            foreach (var bp in this.SolutionFileRef.BreakPoints)
            {
                if (bp.Line < 0)
                {
                    Logger.Log(NLog.LogLevel.Warn, $"Removed invalid breakpoint in file '{this.SolutionFileRef.FileName}'.");
                    invalidBps.Add(bp);
                    continue;
                }
                var line    = this.Document.GetLineByNumber(bp.Line);
                var segment = new TextSegment {
                    StartOffset = line.Offset, EndOffset = line.EndOffset
                };
                foreach (var rect in BackgroundGeometryBuilder.GetRectsForSegment(textView, segment))
                {
                    drawingContext.DrawRectangle(color, null, new Rect(rect.Location, new Size(textView.ActualWidth, rect.Height)));
                }
            }
            foreach (var bp in invalidBps)
            {
                this.SolutionFileRef.BreakPoints.Remove(bp);
            }
        }
コード例 #5
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (result == null)
            {
                return;
            }

            var builder = new BackgroundGeometryBuilder
            {
                CornerRadius       = 1,
                AlignToWholePixels = true,
                BorderThickness    = 0.0
            };

            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = result.OpeningBracketOffset, Length = result.OpeningBracketLength
            });
            builder.CloseFigure();
            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = result.ClosingBracketOffset, Length = result.ClosingBracketLength
            });

            var geometry = builder.CreateGeometry();

            if (geometry != null)
            {
                drawingContext.DrawGeometry(backgroundBrush, null, geometry);
            }
        }
コード例 #6
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (_editor.Document == null || _offsetsToMark.Count == 0)
            {
                return;
            }

            textView.EnsureVisualLines();

            foreach (var mark in _offsetsToMark)
            {
                foreach (Rect r in BackgroundGeometryBuilder.GetRectsForSegment(
                             textView, new TextSegment {
                    StartOffset = mark.Offset, Length = mark.Length
                }))
                {
                    drawingContext.DrawRoundedRectangle(
                        mark.Brush,
                        null,
                        new Rect(r.Location, r.Size),
                        3, 3
                        );
                }
            }

            //http://danielgrunwald.de/coding/AvalonEdit/rendering.php
            //http://stackoverflow.com/questions/5072761/avalonedit-highlight-current-line-even-when-not-focused
            //DocumentLine currentLine = _editor.Document.GetLineByOffset((int)_offsetToMark);
            //foreach (Rect rect in BackgroundGeometryBuilder.GetRectsForSegment(textView, currentLine))
            //{
            //    drawingContext.DrawRectangle(
            //        new SolidColorBrush(Color.FromArgb(0x40, 0, 0, 0xFF)), null,
            //        new Rect(rect.Location, new Size(textView.ActualWidth - 32, rect.Height)));
            //}
        }
コード例 #7
0
        /// <summary>
        /// Draw the background line highlighting of the current line.
        /// </summary>
        /// <param name="textView"></param>
        /// <param name="drawingContext"></param>
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (this._Editor == null)
            {
                return;
            }

            if (this._Editor.Document == null)
            {
                return;
            }

            if (_Editor.EditorCurrentLineBorderThickness == 0 && _Editor.EditorCurrentLineBackground == null)
            {
                return;
            }

            Pen borderPen = null;

            if (_Editor.EditorCurrentLineBorder != null)
            {
                borderPen = new Pen(_Editor.EditorCurrentLineBorder, _Editor.EditorCurrentLineBorderThickness);
                borderPen.Freeze();
            }

            textView.EnsureVisualLines();
            var currentLine = _Editor.Document.GetLineByOffset(_Editor.CaretOffset);

            foreach (var rect in BackgroundGeometryBuilder.GetRectsForSegment(textView, currentLine))
            {
                drawingContext.DrawRectangle(_Editor.EditorCurrentLineBackground, borderPen,
                                             new Rect(rect.Location, new Size(textView.ActualWidth, rect.Height)));
            }
        }
コード例 #8
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (_textEditor.SelectionLength == 0 && _textEditor.CaretOffset != -1 &&
                _textEditor.CaretOffset <= textView.Document.TextLength)
            {
                var currentLine = textView.Document.GetLocation(_textEditor.CaretOffset).Line;

                var visualLine = textView.GetVisualLine(currentLine);
                if (visualLine == null)
                {
                    return;
                }

                BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();

                var linePosY   = visualLine.VisualTop - textView.ScrollOffset.Y;
                var lineBottom = linePosY + visualLine.Height;

                Size pixelSize = PixelSnapHelpers.GetPixelSize(textView);


                double x  = PixelSnapHelpers.PixelAlign(0, pixelSize.Width);
                double y  = PixelSnapHelpers.PixelAlign(linePosY, pixelSize.Height);
                var    x2 = PixelSnapHelpers.PixelAlign(textView.Bounds.Width, pixelSize.Width);
                var    y2 = PixelSnapHelpers.PixelAlign(lineBottom, pixelSize.Height);

                builder.AddRectangle(textView, new Rect(new Point(x, y), new Point(x2, y2)));

                Geometry geometry = builder.CreateGeometry();
                if (geometry != null)
                {
                    drawingContext.DrawGeometry(BackgroundBrush, BorderPen, geometry);
                }
            }
        }
コード例 #9
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            _owner = textView;

            if (textView.VisualLinesValid && textView.Document != null)
            {
                if (_line > 0 && _line < textView.Document.LineCount)
                {
                    var currentLine = textView.Document.GetLineByNumber(_line);

                    var segment = new TextSegment();
                    segment.StartOffset = currentLine.Offset;
                    segment.EndOffset   = currentLine.EndOffset;

                    if (_startColumn != -1 && _endColumn != -1)
                    {
                        segment.StartOffset = textView.Document.GetOffset(_line, _startColumn);
                        segment.EndOffset   = textView.Document.GetOffset(_line, _endColumn);
                    }
                    else
                    {
                        _startColumn = textView.Document.GetLocation(segment.StartOffset).Column;
                        _endColumn   = textView.Document.GetLocation(segment.EndOffset).Column;
                    }

                    var rects = BackgroundGeometryBuilder.GetRectsForSegment(textView, segment);

                    foreach (var rect in rects)
                    {
                        var drawRect = new Rect(rect.TopLeft.X - 1, rect.TopLeft.Y - 1, rect.Width + 2, rect.Height + 2);
                        drawingContext.FillRectangle(selectedLineBg, drawRect);
                    }
                }
            }
        }
コード例 #10
0
ファイル: WPFUtils.cs プロジェクト: Doom2fan/EchelonScript
    void IBackgroundRenderer.Draw(TextView textView, DrawingContext drawingContext)
    {
        if (markers == null || !textView.VisualLinesValid)
        {
            return;
        }
        var visualLines = textView.VisualLines;

        if (visualLines.Count == 0)
        {
            return;
        }

        var viewStart = visualLines.First().FirstDocumentLine.Offset;
        var viewEnd   = visualLines.Last().LastDocumentLine.EndOffset;

        foreach (var marker in markers.FindOverlappingSegments(viewStart, viewEnd - viewStart))
        {
            if (marker.BackgroundColor != null)
            {
                var geoBuilder = new BackgroundGeometryBuilder {
                    AlignToWholePixels = true, CornerRadius = 3
                };
                geoBuilder.AddSegment(textView, marker);

                var geometry = geoBuilder.CreateGeometry();
                if (geometry != null)
                {
                    var color = marker.BackgroundColor.Value;
                    var brush = new SolidColorBrush(color);
                    brush.Freeze();
                    drawingContext.DrawGeometry(brush, null, geometry);
                }
            }

            foreach (var r in BackgroundGeometryBuilder.GetRectsForSegment(textView, marker))
            {
                var startPoint = r.BottomLeft;
                var endPoint   = r.BottomRight;

                var usedPen = new Pen(new SolidColorBrush(marker.MarkerColor), 1);
                usedPen.Freeze();
                const double offset = 2.5;

                var count = Math.Max((int)((endPoint.X - startPoint.X) / offset) + 1, 4);

                var geometry = new StreamGeometry();

                using (var ctx = geometry.Open()) {
                    ctx.BeginFigure(startPoint, false, false);
                    ctx.PolyLineTo(CreatePoints(startPoint, endPoint, offset, count).ToArray(), true, false);
                }

                geometry.Freeze();

                drawingContext.DrawGeometry(Brushes.Transparent, usedPen, geometry);
                break;
            }
        }
    }
コード例 #11
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (result.HasValue)
            {
                var match = result.Value;

                var builder = new BackgroundGeometryBuilder
                {
                    CornerRadius          = 1,
                    AlignToMiddleOfPixels = true
                };

                builder.AddSegment(textView, new TextSegment()
                {
                    StartOffset = match.LeftSpan.Start, Length = match.LeftSpan.Length
                });
                builder.CloseFigure(); // prevent connecting the two segments
                builder.AddSegment(textView, new TextSegment()
                {
                    StartOffset = match.RightSpan.Start, Length = match.RightSpan.Length
                });

                Geometry geometry = builder.CreateGeometry();
                if (geometry != null)
                {
                    drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
                }
            }
        }
コード例 #12
0
 public void Draw(TextView textView, DrawingContext drawingContext)
 {
     foreach (TextSegment current in this.SearchHitsSegments)
     {
         foreach (Rect current2 in BackgroundGeometryBuilder.GetRectsForSegment(textView, current))
         {
             Point bottomLeft  = current2.BottomLeft;
             Point bottomRight = current2.BottomRight;
             Pen   pen         = new Pen(new SolidColorBrush(Colors.OrangeRed), 1);
             pen.Freeze();
             double         num            = 2.5;
             int            count          = System.Math.Max((int)((bottomRight.X - bottomLeft.X) / num) + 1, 4);
             StreamGeometry streamGeometry = new StreamGeometry();
             using (StreamGeometryContext streamGeometryContext = streamGeometry.Open())
             {
                 streamGeometryContext.BeginFigure(bottomLeft, true, true);
                 streamGeometryContext.LineTo(current2.TopLeft, true, false);
                 streamGeometryContext.LineTo(current2.TopRight, true, false);
                 streamGeometryContext.LineTo(current2.BottomRight, true, false);
             }
             streamGeometry.Freeze();
             drawingContext.DrawGeometry(Brushes.Transparent, pen, streamGeometry);
         }
     }
 }
コード例 #13
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (BraceMatchingResult == null)
            {
                return;
            }

            BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();

            builder.CornerRadius       = 1;
            builder.AlignToWholePixels = true;

            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = BraceMatchingResult.Value.LeftSpan.Start, Length = BraceMatchingResult.Value.LeftSpan.Length
            });
            builder.CloseFigure(); // prevent connecting the two segments
            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = BraceMatchingResult.Value.RightSpan.Start, Length = BraceMatchingResult.Value.RightSpan.Length
            });

            Geometry geometry = builder.CreateGeometry();

            drawingContext.DrawGeometry(_backgroundBrush, _borderPen, geometry);
        }
コード例 #14
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (this.result == null)
            {
                return;
            }

            BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();

            builder.CornerRadius          = 1;
            builder.AlignToMiddleOfPixels = true;

            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = result.OpeningBracketOffset, Length = result.OpeningBracketLength
            });
            builder.CloseFigure(); // prevent connecting the two segments
            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = result.ClosingBracketOffset, Length = result.ClosingBracketLength
            });

            Geometry geometry = builder.CreateGeometry();

            if (borderPen == null)
            {
                this.UpdateColors(DefaultBackground, DefaultBackground);
            }

            if (geometry != null)
            {
                drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
            }
        }
コード例 #15
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (!Enabled)
            {
                return;
            }
            BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();

            builder.CornerRadius       = 1;
            builder.AlignToWholePixels = true;

            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = Begin, Length = 1
            });
            builder.CloseFigure();
            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = End, Length = 1
            });

            Geometry geometry = builder.CreateGeometry();

            if (geometry != null)
            {
                drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
            }
        }
コード例 #16
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (this.FileFolderRef == null)
            {
                return;
            }
            textView.EnsureVisualLines();
            var color = new SolidColorBrush(ConfigHost.Coloring.BreakPoint.TextHighlightColor);

            color.Freeze();
            foreach (var bp in Workspace.Instance.BreakpointManager[this.FileFolderRef])
            {
                if (!bp.IsEnabled)
                {
                    continue;
                }
                if (bp.Line >= this.Document.LineCount)
                {
                    Workspace.Instance.BreakpointManager.RemoveBreakpoint(bp);
                    continue;
                }
                var line    = this.Document.GetLineByNumber(bp.Line);
                var segment = new TextSegment {
                    StartOffset = line.Offset, EndOffset = line.EndOffset
                };
                foreach (var rect in BackgroundGeometryBuilder.GetRectsForSegment(textView, segment))
                {
                    drawingContext.DrawRectangle(color, null, new Rect(rect.Location, new Size(textView.ActualWidth, rect.Height)));
                }
            }
        }
コード例 #17
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (result == null)
            {
                return;
            }

            var builder = new BackgroundGeometryBuilder();

            builder.AlignToWholePixels = true;
            builder.AddSegment(textView, new TextSegment {
                StartOffset = result.OpeningOffset, Length = 1
            });
            builder.CloseFigure(); // prevent connecting the two segments
            builder.AddSegment(textView, new TextSegment {
                StartOffset = result.ClosingOffset, Length = 1
            });

            var geometry = builder.CreateGeometry();

            if (geometry != null)
            {
                drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
            }
        }
コード例 #18
0
            public void Draw(TextView textView, DrawingContext drawingContext)
            {
                var s = Element.Segment;

                if (s != null)
                {
                    var geoBuilder = new BackgroundGeometryBuilder
                    {
                        AlignToWholePixels = true,
                        BorderThickness    = ActiveBorderPen?.Thickness ?? 0
                    };
                    if (Layer == KnownLayer.Background)
                    {
                        geoBuilder.AddSegment(textView, s);
                        drawingContext.DrawGeometry(BackgroundBrush, null, geoBuilder.CreateGeometry());
                    }
                    else
                    {
                        // draw foreground only if active
                        if (Element._isCaretInside)
                        {
                            geoBuilder.AddSegment(textView, s);
                            foreach (var boundElement in Element._context.ActiveElements.OfType <BoundActiveElement>())
                            {
                                if (boundElement.TargetElement == Element)
                                {
                                    geoBuilder.AddSegment(textView, boundElement.Segment);
                                    geoBuilder.CloseFigure();
                                }
                            }
                            drawingContext.DrawGeometry(null, ActiveBorderPen, geoBuilder.CreateGeometry());
                        }
                    }
                }
            }
コード例 #19
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (currentReferences == null)
            {
                var start = textView.VisualLines.First().FirstDocumentLine.LineNumber;
                var end   = textView.VisualLines.Last().LastDocumentLine.LineNumber;
                currentReferences = new List <ISegment>();
                FindCurrentReferences(start, end);
            }
            if (currentReferences.Count == 0)
            {
                return;
            }
            BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();

            builder.CornerRadius          = cornerRadius;
            builder.AlignToMiddleOfPixels = true;
            foreach (var reference in this.currentReferences)
            {
                builder.AddSegment(textView, new TextSegment()
                {
                    StartOffset = reference.Offset,
                    Length      = reference.Length
                });
                builder.CloseFigure();
            }
            Geometry geometry = builder.CreateGeometry();

            if (geometry != null)
            {
                drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
            }
        }
コード例 #20
0
ファイル: CodeEditor.xaml.cs プロジェクト: yarwelp/tooll
            public void Draw(TextView textView, DrawingContext drawingContext)
            {
                if (_editor.Document == null || CurrentCodeSectionManager == null || CurrentCodeSectionManager.CompilerErrorCollection == null)
                {
                    return;
                }

                textView.EnsureVisualLines();
                for (int i = 0; i < CurrentCodeSectionManager.CompilerErrorCollection.Count; ++i)
                {
                    var error      = CurrentCodeSectionManager.CompilerErrorCollection[i];
                    int lineNumber = error.Line - CurrentCodeSectionStartLine;
                    if (lineNumber > 0 && lineNumber < _editor.LineCount)
                    {
                        var line = _editor.Document.GetLineByNumber(lineNumber);
                        foreach (var rect in BackgroundGeometryBuilder.GetRectsForSegment(textView, line))
                        {
                            var rect2 = new Rect(rect.Location, new Size(textView.ActualWidth, rect.Height));
                            if (rect2.Height > 1 && rect2.Width > 1)
                            {
                                drawingContext.DrawRoundedRectangle(new SolidColorBrush(Color.FromArgb(0x20, 0xff, 0, 0)), new Pen(new SolidColorBrush(Color.FromArgb(0xa0, 0xff, 0, 0)), 1), rect2, 3, 3);
                            }
                            var column = error.Column - CurrentCodeSectionManager.GetSectionIndendationSize(CurrentCodeSectionId);

                            DrawColumnIndicator(drawingContext, new Point(rect2.Left + column * 7 + 3, rect2.Top - 1));
                        }
                    }
                }
            }
コード例 #21
0
 public void Draw(TextView textview, DrawingContext drawingContext)
 {
     if (_result != null)
     {
         var backgroundGeometryBuilder = new BackgroundGeometryBuilder
         {
             CornerRadius       = 1.0,
             AlignToWholePixels = true
                                  //                    AlignToMiddleOfPixels = true
         };
         backgroundGeometryBuilder.AddSegment(textview, new TextSegment
         {
             StartOffset = _result.OpeningBracketOffset,
             Length      = _result.OpeningBracketLength
         });
         backgroundGeometryBuilder.CloseFigure();
         backgroundGeometryBuilder.AddSegment(textview, new TextSegment
         {
             StartOffset = _result.ClosingBracketOffset,
             Length      = _result.ClosingBracketLength
         });
         var geometry = backgroundGeometryBuilder.CreateGeometry();
         if (_borderPen == null)
         {
             UpdateColors(DefaultBackground, DefaultBackground);
         }
         if (geometry != null)
         {
             drawingContext.DrawGeometry(_backgroundBrush, _borderPen, geometry);
         }
     }
 }
コード例 #22
0
        public void Draw(ICSharpCode.AvalonEdit.Rendering.TextView textView, DrawingContext drawingContext)
        {
            if (this.result == null)
            {
                return;
            }

            BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();

            builder.CornerRadius = 1;

            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = result.OpeningBracketOffset, Length = result.OpeningBracketLength
            });
            builder.CloseFigure();             // prevent connecting the two segments
            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = result.ClosingBracketOffset, Length = result.ClosingBracketLength
            });

            Geometry geometry = builder.CreateGeometry();

            if (geometry != null)
            {
                drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
            }
        }
コード例 #23
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            foreach (var v in textView.VisualLines)
            {
                var rc     = BackgroundGeometryBuilder.GetRectsFromVisualSegment(textView, v, 0, 1000).First();
                int offset = v.FirstDocumentLine.Offset;
                int length = v.FirstDocumentLine.Length;
                var text   = this.host.Text.Substring(offset, length);

                Brush brush = null;
                if (text.StartsWith("+"))
                {
                    brush = addedBackground;
                }
                else if (text.StartsWith("-"))
                {
                    brush = removedBackground;
                }
                else if (text.StartsWith("@"))
                {
                    brush = headerBackground;
                }

                if (brush == null)
                {
                    continue;
                }

                drawingContext.DrawRectangle(brush, pen,
                                             new Rect(0, rc.Top, textView.ActualWidth, rc.Height));
            }
        }
コード例 #24
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (_result == null)
            {
                return;
            }

            var builder = new BackgroundGeometryBuilder();

            builder.CornerRadius          = 1;
            builder.AlignToMiddleOfPixels = true;

            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = _result.OpeningBracketOffset, Length = _result.OpeningBracketLength
            });
            builder.CloseFigure();
            builder.AddSegment(textView, new TextSegment()
            {
                StartOffset = _result.ClosingBracketOffset, Length = _result.ClosingBracketLength
            });

            var geometry = builder.CreateGeometry();

            if (geometry != null)
            {
                drawingContext.DrawGeometry(_backgroundBrush, _borderPen, geometry);
            }
        }
コード例 #25
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (_editor?.LinesHit == null ||
                !_editor.ShowLinesHit)
            {
                return;
            }

            foreach (var v in textView.VisualLines)
            {
                var rc = BackgroundGeometryBuilder.GetRectsFromVisualSegment(textView, v, 0, 1000).First();

                int linenum = v.FirstDocumentLine.LineNumber;

                bool hit;
                if (_editor.LinesHit.TryGetValue(linenum, out hit))
                {
                    Brush brush;
                    if (hit)
                    {
                        brush = Brushes.HitBackground;
                    }
                    else
                    {
                        brush = Brushes.MissedBackground;
                    }

                    drawingContext.DrawRectangle(brush, Pen,
                                                 new Rect(0, rc.Top, textView.ActualWidth, rc.Height));
                }
            }
        }
コード例 #26
0
        public override void Render(DrawingContext drawingContext)
        {
            base.Render(drawingContext);

            var selectionBorder = _textArea.SelectionBorder;

            var geoBuilder = new BackgroundGeometryBuilder
            {
                AlignToWholePixels         = true,
                BorderThickness            = selectionBorder?.Thickness ?? 0,
                ExtendToFullWidthAtLineEnd = _textArea.Selection.EnableVirtualSpace,
                CornerRadius = _textArea.SelectionCornerRadius
            };

            foreach (var segment in _textArea.Selection.Segments)
            {
                geoBuilder.AddSegment(TextView, segment);
            }

            var geometry = geoBuilder.CreateGeometry();

            if (geometry != null)
            {
                drawingContext.DrawGeometry(_textArea.SelectionBrush, selectionBorder, geometry);
            }
        }
コード例 #27
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (this.renderedReferences == null)
            {
                return;
            }
            BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();

            builder.CornerRadius          = cornerRadius;
            builder.AlignToMiddleOfPixels = true;
            foreach (var reference in this.renderedReferences)
            {
                builder.AddSegment(textView, new TextSegment()
                {
                    StartOffset = reference.Offset,
                    Length      = reference.Length
                });
                builder.CloseFigure();
            }
            Geometry geometry = builder.CreateGeometry();

            if (geometry != null)
            {
                drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
            }
        }
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (this._editor.Document == null)
            {
                return;
            }

            try
            {
                textView.EnsureVisualLines();
                var currentLine = this._editor.Document.GetLineByOffset(this._editor.CaretOffset);
                foreach (var rect in BackgroundGeometryBuilder.GetRectsForSegment(textView, currentLine))
                {
                    if (textView.ActualWidth - 32 > 0 && rect.Height > 0)
                    {
                        var Size = new Size(textView.ActualWidth - 32, rect.Height);
                        var Rect = new Rect(rect.Location, Size);
                        drawingContext.DrawRectangle(new SolidColorBrush(Color.FromArgb(50, 250, 250, 100)), null, Rect);
                    }
                }
            }
            catch (Exception error)
            {
                Framework.EventBus.Publish(error);
            }
        }
コード例 #29
0
            public void Draw(TextView textView, System.Windows.Media.DrawingContext drawingContext)
            {
                ISegment s = element.Segment;

                if (s != null)
                {
                    BackgroundGeometryBuilder geoBuilder = new BackgroundGeometryBuilder();
                    geoBuilder.AlignToMiddleOfPixels = true;
                    if (Layer == KnownLayer.Background)
                    {
                        geoBuilder.AddSegment(textView, s);
                        drawingContext.DrawGeometry(backgroundBrush, null, geoBuilder.CreateGeometry());
                    }
                    else
                    {
                        // draw foreground only if active
                        if (element.isCaretInside)
                        {
                            geoBuilder.AddSegment(textView, s);
                            foreach (BoundActiveElement boundElement in element.context.ActiveElements.OfType <BoundActiveElement>())
                            {
                                if (boundElement.targetElement == element)
                                {
                                    geoBuilder.AddSegment(textView, boundElement.Segment);
                                    geoBuilder.CloseFigure();
                                }
                            }
                            drawingContext.DrawGeometry(null, activeBorderPen, geoBuilder.CreateGeometry());
                        }
                    }
                }
            }
コード例 #30
0
        public void Draw(TextView textView, DrawingContext drawingContext)
        {
            if (textView.Document == null /*|| !_isFocused.Value*/)
            {
                _commentsPanel.HighlightLine(0);
                return;
            }

            DocumentLine line = _editor.Document.GetLineByOffset(_editor.CaretOffset);

            _commentsPanel.HighlightLine(line.LineNumber);

            textView.EnsureVisualLines();
            foreach (Rect r in BackgroundGeometryBuilder.GetRectsForSegment(textView, new TextSegment()
            {
                StartOffset = line.Offset
            }))
            {
                drawingContext.DrawRectangle(
                    _brush, // Строка
                    _pen,   // Рамка
                    new Rect(r.Location, new Size(Math.Max(_editor.ExtentWidth, _editor.ViewportWidth), r.Height))
                    );
            }
        }