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; }
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); }
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); }
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); }
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); }