private void Highlight(DrawingContext drawingContext, IEnumerable<Rect> rects)
		{
			foreach (var rect in rects)
			{
				drawingContext.FillRectangle(bracketHighlightBrush, rect);
			}
		}
		public void TransformLine(TextView textView, DrawingContext drawingContext, VisualLine line)
		{
			if (!string.IsNullOrEmpty(SelectedWord) && line.RenderedText.Text.Contains(SelectedWord))
			{
				var startIndex = 0;

				while (startIndex != -1)
				{
					startIndex = line.RenderedText.Text.IndexOf(SelectedWord, startIndex);

					if (startIndex != -1)
					{
						var rect =
							VisualLineGeometryBuilder.GetRectsForSegment(textView,
								new TextSegment
								{
									StartOffset = startIndex + line.Offset,
									EndOffset = startIndex + line.Offset + SelectedWord.Length
								}).First();

						drawingContext.FillRectangle(highlightBrush, rect);

						startIndex += SelectedWord.Length;
					}
				}
			}
		}
示例#3
0
 public void RenderScene(bool fast)
 {
     m_Context.FillRectangle(new SolidColorBrush(m_Scene.Document.BackColor.Argb),
                             new A.Rect(new A.Point(0, 0), new A.Size(m_Scene.Width, m_Scene.Height)));
     RenderGroup(m_Scene.Document, fast);
     m_Scene.Drawn = true;
 }
示例#4
0
            protected override void OnRender(DrawingContext ctx)
            {
                ctx.FillRectangle(Brushes.Green, new Rect(0, 0, Width, Height));

                var rc = new Rect(0, 0, Width/3, Height/3);
                using (ctx.PushPostTransform(
                    Avalonia.Matrix.CreateTranslation(-Width/6, -Width/6)*
                    Avalonia.Matrix.CreateRotation(_radians)*
                                             Avalonia.Matrix.CreateTranslation(Width/2, Height/2)))
                {
                    ctx.FillRectangle(new LinearGradientBrush()
                    {
                        GradientStops =
                        {
                            new GradientStop() {Color = Colors.Blue},
                            new GradientStop(Colors.Red, 1)
                        }
                    }, rc, 5);
                }


            }
		public void Draw(TextView textView, DrawingContext drawingContext)
		{
			if (line > 0 && line < textView.TextDocument.LineCount)
			{
				var currentLine = textView.TextDocument.GetLineByNumber(line);

				var rects = VisualLineGeometryBuilder.GetRectsForSegment(textView, currentLine);

				foreach (var rect in rects)
				{
					var drawRect = new Rect(rect.TopLeft.X, rect.TopLeft.Y, textView.Bounds.Width, rect.Height);
					drawingContext.FillRectangle(selectedLineBg, drawRect);
				}
			}
		}
        public void Draw(TextView textView, DrawingContext drawingContext)
		{
			if (textView.SelectionStart == textView.SelectionEnd && textView.CaretIndex != -1 &&
				textView.CaretIndex <= textView.TextDocument.TextLength)
			{
				var currentLine = textView.TextDocument.GetLineByOffset(textView.CaretIndex);

				var rects = VisualLineGeometryBuilder.GetRectsForSegment(textView, currentLine);

				foreach (var rect in rects)
				{
					var drawRect = new Rect(rect.TopLeft.X, rect.TopLeft.Y, textView.Bounds.Width, rect.Height);
					drawingContext.FillRectangle(selectedLineBg, drawRect);
				}
			}
		}
示例#7
0
        private static void DrawRectangleInternal(AM.DrawingContext dc, AM.IBrush brush, AM.Pen pen, bool isStroked, bool isFilled, ref Rect2 rect)
        {
            if (!isStroked && !isFilled)
            {
                return;
            }

            var r = new A.Rect(rect.X, rect.Y, rect.Width, rect.Height);

            if (isFilled)
            {
                dc.FillRectangle(brush, r);
            }

            if (isStroked)
            {
                dc.DrawRectangle(pen, r);
            }
        }
示例#8
0
        public override void Render(DrawingContext context)
        {
            var selectionStart = SelectionStart;
            var selectionEnd = SelectionEnd;

            if (selectionStart != selectionEnd)
            {
                var start = Math.Min(selectionStart, selectionEnd);
                var length = Math.Max(selectionStart, selectionEnd) - start;

                // issue #600: set constaint before any FormattedText manipulation
                //             see base.Render(...) implementation
                FormattedText.Constraint = Bounds.Size;

                var rects = FormattedText.HitTestTextRange(start, length);

                if (_highlightBrush == null)
                {
                    _highlightBrush = (IBrush)this.FindStyleResource("HighlightBrush");
                }

                foreach (var rect in rects)
                {
                    context.FillRectangle(_highlightBrush, rect);
                }
            }

            base.Render(context);

            if (selectionStart == selectionEnd)
            {                
                var backgroundColor = (((Control)TemplatedParent).GetValue(BackgroundProperty) as SolidColorBrush)?.Color;
                var caretBrush = Brushes.Black;

                if(backgroundColor.HasValue)
                {
                    byte red = (byte)~(backgroundColor.Value.R);
                    byte green = (byte)~(backgroundColor.Value.G);
                    byte blue = (byte)~(backgroundColor.Value.B);

                    caretBrush = new SolidColorBrush(Color.FromRgb(red, green, blue));
                }
                
                if (_caretBlink)
                {
                    var charPos = FormattedText.HitTestTextPosition(CaretIndex);
                    var x = Math.Floor(charPos.X) + 0.5;
                    var y = Math.Floor(charPos.Y) + 0.5;
                    var b = Math.Ceiling(charPos.Bottom) - 0.5;

                    context.DrawLine(
                        new Pen(caretBrush, 1),
                        new Point(x, y),
                        new Point(x, b));
                }
            }
        }
示例#9
0
        /// <summary>
        /// Renders the <see cref="TextBlock"/> to a drawing context.
        /// </summary>
        /// <param name="context">The drawing context.</param>
        public override void Render(DrawingContext context)
        {
            var background = Background;

            if (background != null)
            {
                context.FillRectangle(background, new Rect(Bounds.Size));
            }

            FormattedText.Constraint = Bounds.Size;
            context.DrawText(Foreground, new Point(), FormattedText);
        }
示例#10
0
        /// <summary>
        /// Renders the control.
        /// </summary>
        /// <param name="context">The drawing context.</param>
        public override void Render(DrawingContext context)
        {
            var background = Background;
            var borderBrush = BorderBrush;
            var borderThickness = BorderThickness;
            var cornerRadius = CornerRadius;
            var rect = new Rect(Bounds.Size).Deflate(BorderThickness);

            if (background != null)
            {
                context.FillRectangle(background, rect, cornerRadius);
            }

            if (borderBrush != null && borderThickness > 0)
            {
                context.DrawRectangle(new Pen(borderBrush, borderThickness), rect, cornerRadius);
            }
        }
示例#11
0
 private void DrawSpiroPoint(DrawingContext dc, IBrush brush, Pen pen, SpiroControlPoint point)
 {
     switch (point.Type)
     {
         case SpiroPointType.Corner:
             dc.FillRectangle(brush, new Rect(point.X - 3.5, point.Y - 3.5, 7, 7));
             break;
         case SpiroPointType.G4:
         case SpiroPointType.G2:
         case SpiroPointType.Left:
         case SpiroPointType.Right:
         case SpiroPointType.End:
         case SpiroPointType.OpenContour:
         case SpiroPointType.EndOpenContour:
             var tm = Translate(point.X, point.Y);
             var tt = dc.PushPreTransform(tm);
             dc.DrawGeometry(null, pen, EndKnot);
             tt.Dispose();
             break;
     }
 }
示例#12
0
 private void DrawSpiroKnot(DrawingContext dc, IBrush brush, Pen pen, SpiroKnot knot)
 {
     switch (knot.Type)
     {
         case SpiroPointType.Corner:
             dc.FillRectangle(brush, new Rect(knot.X - 3.5, knot.Y - 3.5, 7, 7));
             break;
         case SpiroPointType.G4:
             FillEllipse(dc, brush, new GuidePoint(knot.X, knot.Y), 3.5, 3.5);
             break;
         case SpiroPointType.G2:
             {
                 var rm = Rotation(ToRadians(knot.Theta), new Vector(knot.X, knot.Y));
                 var rt = dc.PushPreTransform(rm);
                 dc.FillRectangle(brush, new Rect(knot.X - 1.5, knot.Y - 3.5, 3, 7));
                 rt.Dispose();
             }
             break;
         case SpiroPointType.Left:
             {
                 var rm = Rotation(ToRadians(knot.Theta), new Vector(knot.X, knot.Y));
                 var tm = Translate(knot.X, knot.Y);
                 var rt = dc.PushPreTransform(rm);
                 var tt = dc.PushPreTransform(tm);
                 dc.DrawGeometry(brush, null, LeftKnot);
                 tt.Dispose();
                 rt.Dispose();
             }
             break;
         case SpiroPointType.Right:
             {
                 var rm = Rotation(ToRadians(knot.Theta), new Vector(knot.X, knot.Y));
                 var tm = Translate(knot.X, knot.Y);
                 var rt = dc.PushPreTransform(rm);
                 var tt = dc.PushPreTransform(tm);
                 dc.DrawGeometry(brush, null, RightKnot);
                 tt.Dispose();
                 rt.Dispose();
             }
             break;
         case SpiroPointType.End:
             {
                 var rm = Rotation(ToRadians(knot.Theta), new Vector(knot.X, knot.Y));
                 var tm = Translate(knot.X, knot.Y);
                 var rt = dc.PushPreTransform(rm);
                 var tt = dc.PushPreTransform(tm);
                 dc.DrawGeometry(null, pen, EndKnot);
                 tt.Dispose();
                 rt.Dispose();
             }
             break;
         case SpiroPointType.OpenContour:
             {
                 var rm = Rotation(ToRadians(knot.Theta), new Vector(knot.X, knot.Y));
                 var tm = Translate(knot.X, knot.Y);
                 var rt = dc.PushPreTransform(rm);
                 var tt = dc.PushPreTransform(tm);
                 dc.DrawGeometry(null, pen, OpenContourKnot);
                 tt.Dispose();
                 rt.Dispose();
             }
             break;
         case SpiroPointType.EndOpenContour:
             {
                 var rm = Rotation(ToRadians(knot.Theta), new Vector(knot.X, knot.Y));
                 var tm = Translate(knot.X, knot.Y);
                 var rt = dc.PushPreTransform(rm);
                 var tt = dc.PushPreTransform(tm);
                 dc.DrawGeometry(null, pen, EndOpenContourKnot);
                 tt.Dispose();
                 rt.Dispose();
             }
             break;
     }
 }
示例#13
0
        /// <summary>
        /// Renders the visual to a <see cref="DrawingContext"/>.
        /// </summary>
        /// <param name="context">The drawing context.</param>
        public override void Render(DrawingContext context)
        {
            var background = Background;
            if (background != null)
            {
                var renderSize = Bounds.Size;
                context.FillRectangle(background, new Rect(renderSize));
            }

            base.Render(context);
        }