Exemplo n.º 1
0
            public Form1()
            {
                InitializeSurfaceInput();

                Affine2DManipulations supportedManipulations =
                    Affine2DManipulations.TranslateX | Affine2DManipulations.TranslateY | Affine2DManipulations.Scale;

                manipulationProcessor = new Affine2DManipulationProcessor(supportedManipulations);
                manipulationProcessor.Affine2DManipulationStarted += OnAffine2DManipulationStarted;
                manipulationProcessor.Affine2DManipulationDelta += OnAffine2DDelta;
                manipulationProcessor.Affine2DManipulationCompleted += OnAffine2DManipulationCompleted;

                inertiaProcessor = new Affine2DInertiaProcessor();
                inertiaProcessor.Affine2DInertiaCompleted += OnAffine2DInertiaCompleted;
                inertiaProcessor.Affine2DInertiaDelta += OnAffine2DDelta;

                Visible = true;
                InteractiveSurface interactiveSurface = InteractiveSurface.DefaultInteractiveSurface;
                if (interactiveSurface != null)
                {
                    FormBorderStyle = FormBorderStyle.None;
                }
                UpdateWindowPosition();

                // Set the application's orientation based on the current launcher orientation
                //currentOrientation = ApplicationLauncher.Orientation;

                // Subscribe to surface application activation events
                ApplicationLauncher.ApplicationActivated += OnApplicationActivated;
                ApplicationLauncher.ApplicationPreviewed += OnApplicationPreviewed;
                ApplicationLauncher.ApplicationDeactivated += OnApplicationDeactivated;
            }
Exemplo n.º 2
0
            public Form1()
            {
                InitializeSurfaceInput();

                Affine2DManipulations supportedManipulations =
                    Affine2DManipulations.TranslateX | Affine2DManipulations.TranslateY | Affine2DManipulations.Scale;

                manipulationProcessor = new Affine2DManipulationProcessor(supportedManipulations);
                manipulationProcessor.Affine2DManipulationStarted   += OnAffine2DManipulationStarted;
                manipulationProcessor.Affine2DManipulationDelta     += OnAffine2DDelta;
                manipulationProcessor.Affine2DManipulationCompleted += OnAffine2DManipulationCompleted;

                inertiaProcessor = new Affine2DInertiaProcessor();
                inertiaProcessor.Affine2DInertiaCompleted += OnAffine2DInertiaCompleted;
                inertiaProcessor.Affine2DInertiaDelta     += OnAffine2DDelta;

                Visible = true;
                InteractiveSurface interactiveSurface = InteractiveSurface.DefaultInteractiveSurface;

                if (interactiveSurface != null)
                {
                    FormBorderStyle = FormBorderStyle.None;
                }
                UpdateWindowPosition();

                // Set the application's orientation based on the current launcher orientation
                //currentOrientation = ApplicationLauncher.Orientation;

                // Subscribe to surface application activation events
                ApplicationLauncher.ApplicationActivated   += OnApplicationActivated;
                ApplicationLauncher.ApplicationPreviewed   += OnApplicationPreviewed;
                ApplicationLauncher.ApplicationDeactivated += OnApplicationDeactivated;
            }
Exemplo n.º 3
0
        public SurfaceVEMap()
            : base()
        {
            lastExpansionDelta = 0;

            downContacts = new List <Contact>();

            this.manipulationProcessor = new Affine2DManipulationProcessor(
                Affine2DManipulations.TranslateX |
                Affine2DManipulations.TranslateY |
                Affine2DManipulations.Scale |
                Affine2DManipulations.Rotate,
                this, false);

            this.manipulationProcessor.Affine2DManipulationCompleted += new EventHandler <Affine2DOperationCompletedEventArgs>(manipulationProcessor_Affine2DManipulationCompleted);
            this.manipulationProcessor.Affine2DManipulationDelta     += new EventHandler <Affine2DOperationDeltaEventArgs>(manipulationProcessor_Affine2DManipulationDelta);
            this.manipulationProcessor.Affine2DManipulationStarted   += new EventHandler <Affine2DOperationStartedEventArgs>(manipulationProcessor_Affine2DManipulationStarted);

            this.inertiaProcessor = new Affine2DInertiaProcessor();

            this.inertiaProcessor.Affine2DInertiaDelta     += new EventHandler <Affine2DOperationDeltaEventArgs>(inertiaProcessor_Affine2DInertiaDelta);
            this.inertiaProcessor.Affine2DInertiaCompleted += new EventHandler <Affine2DOperationCompletedEventArgs>(inertiaProcessor_Affine2DInertiaCompleted);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Start the flicking behavior. 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnAffine2DManipulationCompleted(object sender, Affine2DOperationCompletedEventArgs e)
        {
            if (inertiaProcessor != null)
            {
                inertiaProcessor.Affine2DInertiaDelta -= OnAffine2DInertiaDelta;
                inertiaProcessor.Affine2DInertiaCompleted -= OnAffine2DInertiaCompleted;
                inertiaProcessor = null;
            }

            // The Manipulations should all run in screen space so don't convert between spaces.
            VectorF initialVelocity;
            VectorF maxViewPortSize;
            if (Orientation == Orientation.Horizontal)
            {
                initialVelocity = new VectorF(e.VelocityX, 0);
                maxViewPortSize = new VectorF(numberOfPixelsInAxis * viewportSize, 0);
            }
            else
            {
                initialVelocity = new VectorF(0, e.VelocityY);
                maxViewPortSize = new VectorF(0, numberOfPixelsInAxis * viewportSize);
            }

            // Check velocity.
            if (initialVelocity.Length < FlickUtilities.MinimumFlickVelocity)
            {
                return;
            }

            if (initialVelocity.Length >= MaximumFlickVelocity)
            {
                // If velocity is too large, reduce it to a reasonable value.
                initialVelocity.Normalize();
                initialVelocity = MaximumFlickVelocity * initialVelocity;
            }

            VectorF flickDistance;

            if (FlickUtilities.TryGetFlickDistance(initialVelocity, out flickDistance, maxViewPortSize))
            {
                processInertia = true;
                inertiaProcessor = new Affine2DInertiaProcessor();

                inertiaProcessor.Affine2DInertiaDelta += OnAffine2DInertiaDelta;
                inertiaProcessor.Affine2DInertiaCompleted += OnAffine2DInertiaCompleted;

                float displacement = 0;

                if (flickDistance.X == 0)
                {
                    displacement = flickDistance.Y;
                }
                else if (flickDistance.Y == 0)
                {
                    displacement = flickDistance.X;
                }
                else
                {
                    displacement = Math.Min(flickDistance.X, flickDistance.Y);
                }

                inertiaProcessor.DesiredDisplacement = float.IsInfinity(displacement) ? 0 : Math.Abs(displacement);
                inertiaProcessor.InitialTimestamp = stopwatch.ElapsedTicks;
                inertiaProcessor.InitialVelocityX = initialVelocity.X;
                inertiaProcessor.InitialVelocityY = initialVelocity.Y;

                inertiaProcessor.InitialOriginX = ToScreenSpace(Value);
                inertiaProcessor.InitialOriginY = ToScreenSpace(Value);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Set the flick to completed so that it stops moving.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnAffine2DInertiaCompleted(object sender, Affine2DOperationCompletedEventArgs e)
        {
            processInertia = false;
            manipulationProcessor = null;

            if (inertiaProcessor != null)
            {
                inertiaProcessor.Affine2DInertiaDelta -= new EventHandler<Affine2DOperationDeltaEventArgs>(OnAffine2DInertiaDelta);
                inertiaProcessor.Affine2DInertiaCompleted -= new EventHandler<Affine2DOperationCompletedEventArgs>(OnAffine2DInertiaCompleted);
                inertiaProcessor = null;
            }
        }
        public override void OnApplyTemplate()
        {
            // Set up the ContentPresenter.
            _content = GetTemplateChild("PART_Content") as ContentPresenter;
            _translate = new TranslateTransform();
            _scale = new ScaleTransform();
            _content.RenderTransform = new TransformGroup
            {
                Children = new TransformCollection { _scale, _translate }
            };
            _content.RenderTransformOrigin = new Point(.5, .5);

            // Set up the spring animation.
            _spring = new Storyboard { Duration = TimeSpan.FromMilliseconds(200), FillBehavior = FillBehavior.Stop, DecelerationRatio = .6 };
            _spring.Completed += Spring_Completed;

            _springScaleX = new DoubleAnimation { Duration = _spring.Duration, To = 1, DecelerationRatio = _spring.DecelerationRatio };
            Storyboard.SetTarget(_springScaleX, _content);
            Storyboard.SetTargetProperty(_springScaleX, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));
            _spring.Children.Add(_springScaleX);

            _springScaleY = new DoubleAnimation { Duration = _spring.Duration, To = 1, DecelerationRatio = _spring.DecelerationRatio };
            Storyboard.SetTarget(_springScaleY, _content);
            Storyboard.SetTargetProperty(_springScaleY, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));
            _spring.Children.Add(_springScaleY);

            _springTranslateX = new DoubleAnimation { Duration = _spring.Duration, To = 0, DecelerationRatio = _spring.DecelerationRatio };
            Storyboard.SetTarget(_springTranslateX, _content);
            Storyboard.SetTargetProperty(_springTranslateX, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)"));
            _spring.Children.Add(_springTranslateX);

            _springTranslateY = new DoubleAnimation { Duration = _spring.Duration, To = 0, DecelerationRatio = _spring.DecelerationRatio };
            Storyboard.SetTarget(_springTranslateY, _content);
            Storyboard.SetTargetProperty(_springTranslateY, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)"));
            _spring.Children.Add(_springTranslateY);

            _spring.Begin(this, true);

            ClipToBounds = true;

            // Set up the ManipulationProcessor.
            _contentManipulationProcessor = new Affine2DManipulationProcessor(Affine2DManipulations.Scale | Affine2DManipulations.TranslateX | Affine2DManipulations.TranslateY, this);
            _contentManipulationProcessor.Affine2DManipulationStarted += ContentManipulationProcessor_Affine2DManipulationStarted;
            _contentManipulationProcessor.Affine2DManipulationDelta += ContentManipulationProcessor_Affine2DManipulationDelta;
            _contentManipulationProcessor.Affine2DManipulationCompleted += ContentManipulationProcessor_Affine2DManipulationCompleted;

            // Set up the InertiaProcessor.
            _inertiaProcessor = new Affine2DInertiaProcessor();
            _inertiaProcessor.Affine2DInertiaDelta += ContentManipulationProcessor_Affine2DManipulationDelta;
            _inertiaProcessor.DesiredDeceleration = 96 * 1.5 * .001 * .001;
            _inertiaProcessor.ElasticMargin = new Thickness(25);

            base.OnApplyTemplate();
        }
Exemplo n.º 7
0
        /// <summary>
        /// Start the inertia processor in Surface screen space.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnAffine2DManipulationCompleted(object sender, Affine2DOperationCompletedEventArgs e)
        {
            if (inertiaProcessor != null)
            {
                inertiaProcessor.Affine2DInertiaDelta -= OnAffine2DInertiaDelta;
                inertiaProcessor.Affine2DInertiaCompleted -= OnAffine2DInertiaCompleted;
                inertiaProcessor.Complete();
            }

            VectorF translation = new VectorF(e.TotalTranslationX, e.TotalTranslationY);

            // Don't start inertia if the tranlation is less than roughly 1/8" regardless of velocity.
            if (translation.Length < 96 / 8f)
            {
                return;
            }

            // Scroll in the opposite direction because a ScrollViewer moves with the contact.
            VectorF initialVelocity = new VectorF(-e.VelocityX, -e.VelocityY);

            // Check velocity.
            if (initialVelocity.Length < FlickUtilities.MinimumFlickVelocity)
            {
                // If velocity is below this threshold ignore it.
                return;
            }

            if (initialVelocity.Length >= FlickUtilities.MaximumFlickVelocity)
            {
                // If velocity is too large, reduce it to a reasonable value.
                initialVelocity.Normalize();
                initialVelocity = FlickUtilities.MaximumFlickVelocity * initialVelocity;
            }

            processInertia = true;
            inertiaProcessor = new Affine2DInertiaProcessor();

            inertiaProcessor.Affine2DInertiaDelta += OnAffine2DInertiaDelta;
            inertiaProcessor.Affine2DInertiaCompleted += OnAffine2DInertiaCompleted;
            inertiaProcessor.DesiredDisplacement = ConvertFromVerticalValueToScreenSpace(VerticalViewportSize);
            inertiaProcessor.InitialVelocityX = initialVelocity.X * HorizontalViewportSize;
            inertiaProcessor.InitialVelocityY = initialVelocity.Y * VerticalViewportSize;
            inertiaProcessor.InitialTimestamp = stopwatch.ElapsedTicks;

            inertiaProcessor.InitialOriginX = ConvertFromHorizontalValueToScreenSpace(horizontalScrollBarStateMachine.Value);
            inertiaProcessor.InitialOriginY = ConvertFromVerticalValueToScreenSpace(verticalScrollBarStateMachine.Value);
        }