Beispiel #1
0
        private static void OnTiltChanged(DependencyObject d, DependencyPropertyChangedEventArgs args)
        {
            FrameworkElement   targetElement  = d as FrameworkElement;
            double             tiltFactor     = MetroInMotion.GetTilt(d);
            PlaneProjection    projection     = new PlaneProjection();
            ScaleTransform     scale          = new ScaleTransform();
            TranslateTransform translate      = new TranslateTransform();
            TransformGroup     transformGroup = new TransformGroup();

            transformGroup.Children.Add((Transform)scale);
            transformGroup.Children.Add((Transform)translate);
            targetElement.Projection            = (Projection)projection;
            targetElement.RenderTransform       = (Transform)transformGroup;
            targetElement.RenderTransformOrigin = new Point(0.5, 0.5);
            MouseButtonEventHandler buttonEventHandler = (MouseButtonEventHandler)((s, e) =>
            {
                Point position = e.GetPosition((UIElement)targetElement);
                double num1 = Math.Max(targetElement.ActualWidth, targetElement.ActualHeight);
                if (num1 == 0.0)
                {
                    return;
                }
                double num2 = 2.0 * (targetElement.ActualWidth / 2.0 - position.X) / num1;
                projection.RotationY = num2 * MetroInMotion.TiltAngleFactor * tiltFactor;
                double num3 = 2.0 * (targetElement.ActualHeight / 2.0 - position.Y) / num1;
                projection.RotationX = -num3 * MetroInMotion.TiltAngleFactor * tiltFactor;
                double num4 = tiltFactor * (1.0 - Math.Sqrt(num2 * num2 + num3 * num3)) / MetroInMotion.ScaleFactor;
                scale.ScaleX = 1.0 - num4;
                scale.ScaleY = 1.0 - num4;
                FrameworkElement frameworkElement = Application.Current.RootVisual as FrameworkElement;
                double num5 = (targetElement.GetRelativePosition((UIElement)frameworkElement).Y - frameworkElement.ActualHeight / 2.0) / 2.0;
                translate.Y = -num5;
                projection.LocalOffsetY = num5;
            });
            EventHandler <ManipulationCompletedEventArgs> eventHandler = (EventHandler <ManipulationCompletedEventArgs>)((s, e) =>
            {
                new Storyboard()
                {
                    Children =
                    {
                        (Timeline)MetroInMotion.CreateAnimation(new double?(), new double?(0.0), 0.1, "RotationY", (DependencyObject)projection),
                        (Timeline)MetroInMotion.CreateAnimation(new double?(), new double?(0.0), 0.1, "RotationX", (DependencyObject)projection),
                        (Timeline)MetroInMotion.CreateAnimation(new double?(), new double?(1.0), 0.1, "ScaleX",    (DependencyObject)scale),
                        (Timeline)MetroInMotion.CreateAnimation(new double?(), new double?(1.0), 0.1, "ScaleY",    (DependencyObject)scale)
                    }
                }.Begin();
                translate.Y             = 0.0;
                projection.LocalOffsetY = 0.0;
            });

            targetElement.MouseLeftButtonDown   -= buttonEventHandler;
            targetElement.ManipulationCompleted -= eventHandler;
            if (tiltFactor <= 0.0)
            {
                return;
            }
            targetElement.MouseLeftButtonDown   += buttonEventHandler;
            targetElement.ManipulationCompleted += eventHandler;
        }
Beispiel #2
0
        private static Storyboard GetSlideAnimation(FrameworkElement element, bool fromRight)
        {
            double             num1 = fromRight ? 80.0 : -80.0;
            double             num2 = (double)MetroInMotion.GetAnimationLevel((DependencyObject)element) * 0.1 + 0.1;
            TranslateTransform translateTransform = new TranslateTransform()
            {
                X = num1
            };

            element.RenderTransform = (Transform)translateTransform;
            Storyboard storyboard = new Storyboard();
            TimeSpan?  nullable   = new TimeSpan?(TimeSpan.FromSeconds(num2));

            storyboard.BeginTime = nullable;
            storyboard.Children.Add((Timeline)MetroInMotion.CreateAnimation(new double?(num1), new double?(0.0), 0.8, "X", (DependencyObject)translateTransform));
            return(storyboard);
        }
Beispiel #3
0
        private static Storyboard GetPeelAnimation(FrameworkElement element, double delay)
        {
            PlaneProjection planeProjection = new PlaneProjection()
            {
                CenterOfRotationX = -0.1
            };

            element.Projection = (Projection)planeProjection;
            double     num        = Math.Atan(1000.0 / (element.ActualWidth / 2.0)) * 180.0 / Math.PI;
            Storyboard storyboard = new Storyboard();
            TimeSpan?  nullable   = new TimeSpan?(TimeSpan.FromMilliseconds(delay));

            storyboard.BeginTime = nullable;
            storyboard.Children.Add((Timeline)MetroInMotion.CreateAnimation(new double?(0.0), new double?(-(180.0 - num)), 0.3, "RotationY", (DependencyObject)planeProjection));
            storyboard.Children.Add((Timeline)MetroInMotion.CreateAnimation(new double?(0.0), new double?(23.0), 0.3, "RotationZ", (DependencyObject)planeProjection));
            storyboard.Children.Add((Timeline)MetroInMotion.CreateAnimation(new double?(0.0), new double?(-23.0), 0.3, "GlobalOffsetZ", (DependencyObject)planeProjection));
            return(storyboard);
        }
Beispiel #4
0
        private static Storyboard GetSlideAnimation(FrameworkElement element, bool fromRight)
        {
            double             num1 = fromRight ? 80.0 : -80.0;
            double             num2 = (double)MetroInMotion.GetAnimationLevel((DependencyObject)element) * 0.1 + 0.1;
            TranslateTransform translateTransform1 = new TranslateTransform();
            double             num3 = num1;

            translateTransform1.X = num3;
            TranslateTransform translateTransform2 = translateTransform1;

            ((UIElement)element).RenderTransform = ((Transform)translateTransform2);
            Storyboard storyboard = new Storyboard();
            TimeSpan?  nullable   = new TimeSpan?(TimeSpan.FromSeconds(num2));

            ((Timeline)storyboard).BeginTime = nullable;
            ((PresentationFrameworkCollection <Timeline>)storyboard.Children).Add((Timeline)MetroInMotion.CreateAnimation(new double?(num1), new double?(0.0), 0.8, "X", (DependencyObject)translateTransform2));
            return(storyboard);
        }
Beispiel #5
0
        private static Storyboard GetPeelAnimation(FrameworkElement element, double delay)
        {
            PlaneProjection planeProjection1 = new PlaneProjection();
            double          num1             = -0.1;

            planeProjection1.CenterOfRotationX = num1;
            PlaneProjection planeProjection2 = planeProjection1;

            ((UIElement)element).Projection = ((Projection)planeProjection2);
            double     num2       = Math.Atan(1000.0 / (element.ActualWidth / 2.0)) * 180.0 / Math.PI;
            Storyboard storyboard = new Storyboard();
            TimeSpan?  nullable   = new TimeSpan?(TimeSpan.FromMilliseconds(delay));

            ((Timeline)storyboard).BeginTime = nullable;
            ((PresentationFrameworkCollection <Timeline>)storyboard.Children).Add((Timeline)MetroInMotion.CreateAnimation(new double?(0.0), new double?(-(180.0 - num2)), 0.3, "RotationY", (DependencyObject)planeProjection2));
            ((PresentationFrameworkCollection <Timeline>)storyboard.Children).Add((Timeline)MetroInMotion.CreateAnimation(new double?(0.0), new double?(23.0), 0.3, "RotationZ", (DependencyObject)planeProjection2));
            ((PresentationFrameworkCollection <Timeline>)storyboard.Children).Add((Timeline)MetroInMotion.CreateAnimation(new double?(0.0), new double?(-23.0), 0.3, "GlobalOffsetZ", (DependencyObject)planeProjection2));
            return(storyboard);
        }