public static void DrawAdorner(DrawingContext drawingContext, Point anchorPoint, EdgeFlags edgeFlags, Matrix matrix, Brush brush)
        {
            Vector transformedXAxis = new Vector(1.0, 0.0) * matrix;
            Vector transformedYAxis = new Vector(0.0, 1.0) * matrix;

            transformedXAxis.Normalize();
            transformedYAxis.Normalize();
            System.Windows.Media.Geometry geometry;
            Transform transform;

            if (Math.Abs(transformedXAxis * transformedYAxis) < 0.01)
            {
                if (!RotateAdornerHelper.sharedGeometries.TryGetValue(edgeFlags, out geometry))
                {
                    geometry = RotateAdornerHelper.GetGeometry(edgeFlags, new Vector(1.0, 0.0), new Vector(0.0, 1.0), false);
                    RotateAdornerHelper.sharedGeometries.Add(edgeFlags, geometry);
                }
                transform = (Transform) new MatrixTransform(transformedXAxis.X, transformedXAxis.Y, transformedYAxis.X, transformedYAxis.Y, anchorPoint.X, anchorPoint.Y);
            }
            else
            {
                bool isFlipped = matrix.Determinant < 0.0;
                geometry  = RotateAdornerHelper.GetGeometry(edgeFlags, transformedXAxis, transformedYAxis, isFlipped);
                transform = (Transform) new TranslateTransform(anchorPoint.X, anchorPoint.Y);
            }
            transform.Freeze();
            drawingContext.PushTransform(transform);
            drawingContext.DrawGeometry(brush, (Pen)null, geometry);
            drawingContext.Pop();
        }
        public static void DrawAdorner(DrawingContext drawingContext, Point anchorPoint, EdgeFlags edgeFlags, Matrix matrix, Brush brush, Rect bounds)
        {
            Size ofTransformedRect = Adorner.GetSizeOfTransformedRect(bounds, matrix);

            if ((edgeFlags == EdgeFlags.Top || edgeFlags == EdgeFlags.Bottom) && (ofTransformedRect.Width < RotateAdornerHelper.Radius * 2.0 || ofTransformedRect.Height < SizeAdorner.Size) || (edgeFlags == EdgeFlags.Left || edgeFlags == EdgeFlags.Right) && (ofTransformedRect.Height < RotateAdornerHelper.Radius * 2.0 || ofTransformedRect.Width < SizeAdorner.Size) || (edgeFlags == EdgeFlags.TopLeft || edgeFlags == EdgeFlags.TopRight || (edgeFlags == EdgeFlags.BottomLeft || edgeFlags == EdgeFlags.BottomRight)) && (ofTransformedRect.Width < SizeAdorner.Size && ofTransformedRect.Height < SizeAdorner.Size))
            {
                return;
            }
            RotateAdornerHelper.DrawAdorner(drawingContext, anchorPoint, edgeFlags, matrix, brush);
        }
        public override void Draw(DrawingContext ctx, Matrix matrix)
        {
            if (!this.ShouldDraw || PlatformTypes.IsInstance(this.PlatformBrush, PlatformTypes.LinearGradientBrush, (ITypeResolver)this.Element.ProjectContext) && this.AdornerSet.Behavior.Tool is GradientBrushTool)
            {
                return;
            }
            Rect brushBounds = this.BrushBounds;

            if (brushBounds.Width > 0.0 && brushBounds.Height > 0.0)
            {
                Point  anchorPoint = this.GetAnchorPoint(matrix);
                Matrix matrix1     = this.GetCompleteBrushTransformMatrix(true) * matrix;
                RotateAdornerHelper.DrawAdorner(ctx, anchorPoint, this.EdgeFlags, matrix1, (Brush)Brushes.Transparent);
            }
            else
            {
                if (brushBounds.Width <= 0.0 && brushBounds.Height <= 0.0 || this.EdgeFlags != EdgeFlags.TopLeft && this.EdgeFlags != EdgeFlags.BottomRight)
                {
                    return;
                }
                Point anchorPoint = this.GetAnchorPoint(matrix);
                ctx.DrawEllipse((Brush)Brushes.Transparent, (Pen)null, anchorPoint, RotateAdornerHelper.Radius, RotateAdornerHelper.Radius);
            }
        }