示例#1
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);
            }
        }
示例#2
0
        private void Draw(AM.DrawingContext context, DrawCommand command, Stack <Stack <IDisposable> > pushedStates)
        {
            switch (command)
            {
            case GeometryClipDrawCommand geometryClipDrawCommand:
            {
                var geometryPushedState = context.PushGeometryClip(geometryClipDrawCommand.Clip);
                var currentPushedStates = pushedStates.Peek();
                currentPushedStates.Push(geometryPushedState);
            }
            break;

            case ClipDrawCommand clipDrawCommand:
            {
                var clipPushedState     = context.PushClip(clipDrawCommand.Clip);
                var currentPushedStates = pushedStates.Peek();
                currentPushedStates.Push(clipPushedState);
            }
            break;

            case SaveDrawCommand _:
            {
                pushedStates.Push(new Stack <IDisposable>());
            }
            break;

            case RestoreDrawCommand _:
            {
                var currentPushedStates = pushedStates.Pop();
                while (currentPushedStates.Count > 0)
                {
                    var pushedState = currentPushedStates.Pop();
                    pushedState.Dispose();
                }
            }
            break;

            case SetTransformDrawCommand setTransformDrawCommand:
            {
                var transformPreTransform = context.PushSetTransform(setTransformDrawCommand.Matrix);
                var currentPushedStates   = pushedStates.Peek();
                currentPushedStates.Push(transformPreTransform);
            }
            break;

            case SaveLayerDrawCommand saveLayerDrawCommand:
            {
                pushedStates.Push(new Stack <IDisposable>());
            }
            break;

            case ImageDrawCommand imageDrawCommand:
            {
                context.DrawImage(
                    imageDrawCommand.Source,
                    imageDrawCommand.SourceRect,
                    imageDrawCommand.DestRect,
                    imageDrawCommand.BitmapInterpolationMode);
            }
            break;

            case GeometryDrawCommand geometryDrawCommand:
            {
                context.DrawGeometry(
                    geometryDrawCommand.Brush,
                    geometryDrawCommand.Pen,
                    geometryDrawCommand.Geometry);
            }
            break;

            case LineDrawCommand lineDrawCommand:
            {
                context.DrawLine(
                    lineDrawCommand.Pen,
                    lineDrawCommand.P1,
                    lineDrawCommand.P2);
            }
            break;

            case RectangleDrawCommand rectangleDrawCommand:
            {
                context.DrawRectangle(
                    rectangleDrawCommand.Brush,
                    rectangleDrawCommand.Pen,
                    rectangleDrawCommand.Rect,
                    rectangleDrawCommand.RadiusX,
                    rectangleDrawCommand.RadiusY);
            }
            break;

            case TextDrawCommand textDrawCommand:
            {
                context.DrawText(
                    textDrawCommand.Brush,
                    textDrawCommand.Origin,
                    textDrawCommand.FormattedText);
            }
            break;
            }
        }
示例#3
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);
            }
        }
示例#4
0
        protected internal override void OnRender(DrawingContext drawingContext)
        {
            Rect rect = new Rect(new Size(this.ActualWidth, this.ActualHeight));

            if (this.formattedText == null)
            {
                this.formattedText = this.CreateFormattedText();
            }

            drawingContext.DrawRectangle(
                this.Background,
                null,
                rect);

            drawingContext.DrawText(this.formattedText, new Point());
        }
示例#5
0
        protected internal override void OnRender(DrawingContext drawingContext)
        {
            Rect brushRect = new Rect(new Size(this.ActualWidth, this.ActualHeight));
            Rect penRect = brushRect;
            Pen pen = null;

            if (this.BorderBrush != null && !this.BorderThickness.IsEmpty)
            {
                pen = new Pen(this.BorderBrush, this.BorderThickness.Left);

                double penOffset = -(pen.Thickness / 2);
                brushRect.Inflate(-pen.Thickness, -pen.Thickness);
                penRect.Inflate(penOffset, penOffset);
            }

            if (this.CornerRadius.TopLeft > 0 || this.CornerRadius.BottomLeft > 0)
            {
                drawingContext.DrawRoundedRectangle(
                    this.Background,
                    pen,
                    brushRect,
                    this.CornerRadius.TopLeft,
                    this.CornerRadius.BottomLeft);
            }
            else
            {
                if (this.Background != null)
                {
                    drawingContext.DrawRectangle(this.Background, null, brushRect);
                }

                if (pen != null)
                {
                    drawingContext.DrawRectangle(null, pen, penRect);
                }
            }
        }