internal static Transform CloneTransform()

in src/Microsoft.Xaml.Behaviors/Layout/MouseDragElementBehavior.cs [347:418]


        internal static Transform CloneTransform(Transform transform)
        {
            ScaleTransform scaleTransform = null;
            RotateTransform rotateTransform = null;
            SkewTransform skewTransform = null;
            TranslateTransform translateTransform = null;
            MatrixTransform matrixTransform = null;
            TransformGroup transformGroup = null;

            if (transform == null)
            {
                return null;
            }

            Type transformType = transform.GetType();
            if ((scaleTransform = transform as ScaleTransform) != null)
            {
                return new ScaleTransform()
                {
                    CenterX = scaleTransform.CenterX,
                    CenterY = scaleTransform.CenterY,
                    ScaleX = scaleTransform.ScaleX,
                    ScaleY = scaleTransform.ScaleY,
                };
            }
            else if ((rotateTransform = transform as RotateTransform) != null)
            {
                return new RotateTransform()
                {
                    Angle = rotateTransform.Angle,
                    CenterX = rotateTransform.CenterX,
                    CenterY = rotateTransform.CenterY,
                };
            }
            else if ((skewTransform = transform as SkewTransform) != null)
            {
                return new SkewTransform()
                {
                    AngleX = skewTransform.AngleX,
                    AngleY = skewTransform.AngleY,
                    CenterX = skewTransform.CenterX,
                    CenterY = skewTransform.CenterY,
                };
            }
            else if ((translateTransform = transform as TranslateTransform) != null)
            {
                return new TranslateTransform()
                {
                    X = translateTransform.X,
                    Y = translateTransform.Y,
                };
            }
            else if ((matrixTransform = transform as MatrixTransform) != null)
            {
                return new MatrixTransform()
                {
                    Matrix = matrixTransform.Matrix,
                };
            }
            else if ((transformGroup = transform as TransformGroup) != null)
            {
                TransformGroup group = new TransformGroup();
                foreach (Transform childTransform in transformGroup.Children)
                {
                    group.Children.Add(CloneTransform(childTransform));
                }
                return group;
            }

            Debug.Assert(false, "Unexpected Transform type encountered");
            return null;
        }