Beispiel #1
0
        private void CheckOrientation(Simple3DVector filteredAcceleration)
        {
            DeviceOrientation deviceOrientation1 = DeviceOrientation.Unknown;
            double            x    = filteredAcceleration.X;
            double            y    = filteredAcceleration.Y;
            double            z    = filteredAcceleration.Z;
            double            num1 = Math.Sqrt(x * x + y * y + z * z);
            double            num2 = x / num1;
            double            num3 = y / num1;
            double            num4 = z / num1;

            if (this._currentOrientation == DeviceOrientation.Unknown)
            {
                deviceOrientation1 = num4 >= 0.0 ? DeviceOrientation.ScreenSideDown : DeviceOrientation.ScreenSideUp;
            }
            if (num3 < -0.8)
            {
                deviceOrientation1 = DeviceOrientation.PortraitRightSideUp;
            }
            else if (num3 > 0.8)
            {
                deviceOrientation1 = DeviceOrientation.PortraitUpSideDown;
            }
            else if (num2 < -0.8)
            {
                deviceOrientation1 = DeviceOrientation.LandscapeLeft;
            }
            else if (num2 > 0.8)
            {
                deviceOrientation1 = DeviceOrientation.LandscapeRight;
            }
            else if (num4 < -0.8)
            {
                deviceOrientation1 = DeviceOrientation.ScreenSideUp;
            }
            else if (num4 > 0.8)
            {
                deviceOrientation1 = DeviceOrientation.ScreenSideDown;
            }
            DeviceOrientation deviceOrientation2 = DeviceOrientation.Unknown;
            bool flag = false;

            if (deviceOrientation1 != DeviceOrientation.Unknown)
            {
                lock (this)
                {
                    this._currentOrientation = deviceOrientation1;
                    if (this._previousOrientation != this._currentOrientation)
                    {
                        deviceOrientation2        = this._previousOrientation;
                        this._previousOrientation = this._currentOrientation;
                        flag = true;
                    }
                }
            }
            if (!flag)
            {
                return;
            }
            DeviceOrientationChangedEventArgs e = new DeviceOrientationChangedEventArgs();

            e.CurrentOrientation  = deviceOrientation1;
            e.PreviousOrientation = deviceOrientation2;
            // ISSUE: reference to a compiler-generated field
            if (this.OrientationChanged == null)
            {
                return;
            }
            // ISSUE: reference to a compiler-generated field
            this.OrientationChanged(this, e);
        }
        /// <summary>
        /// Main orientation change detection logic
        /// </summary>
        /// <param name="filteredAcceleration">current filtered acceleration</param>
        private void CheckOrientation(Simple3DVector filteredAcceleration)
        {
            DeviceOrientation currentOrientation = DeviceOrientation.Unknown;

            double xAcceleration = filteredAcceleration.X;
            double yAcceleration = filteredAcceleration.Y;
            double zAcceleration = filteredAcceleration.Z;

            // Normalize acceleration to 1g
            double magnitudeXYZ = Math.Sqrt(xAcceleration * xAcceleration + yAcceleration * yAcceleration + zAcceleration * zAcceleration);
            xAcceleration = xAcceleration / magnitudeXYZ;
            yAcceleration = yAcceleration / magnitudeXYZ;
            zAcceleration = zAcceleration / magnitudeXYZ;

            if (_currentOrientation == DeviceOrientation.Unknown)
            { // No pre-existing orientation: default is flat 
                if (zAcceleration < 0)
                {
                    currentOrientation = DeviceOrientation.ScreenSideUp;
                }
                else
                {
                    currentOrientation = DeviceOrientation.ScreenSideDown;
                }
            }

            if (yAcceleration < -tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.PortraitRightSideUp;
            }
            else if (yAcceleration > tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.PortraitUpSideDown;
            }
            else if (xAcceleration < -tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.LandscapeLeft;
            }
            else if (xAcceleration > tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.LandscapeRight;
            }
            else if (zAcceleration < -tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.ScreenSideUp;
            }
            else if (zAcceleration > tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.ScreenSideDown;
            }

            DeviceOrientation previousOrientation = DeviceOrientation.Unknown;
            bool fireEvent = false;

            if (currentOrientation != DeviceOrientation.Unknown)
            {
                lock (this) // Keep the lock as brief as posible
                {
                    _currentOrientation = currentOrientation;
                    if (_previousOrientation != _currentOrientation)
                    {
                        previousOrientation = _previousOrientation;
                        _previousOrientation = _currentOrientation;
                        fireEvent = true;
                    }
                }
            }

            if (fireEvent)
            {
                DeviceOrientationChangedEventArgs orientationEventArgs = new DeviceOrientationChangedEventArgs();
                orientationEventArgs.CurrentOrientation = currentOrientation;
                orientationEventArgs.PreviousOrientation = previousOrientation;
                if (OrientationChanged != null)
                {
                    OrientationChanged(this, orientationEventArgs);
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Main orientation change detection logic
        /// </summary>
        /// <param name="filteredAcceleration">current filtered acceleration</param>
        private void CheckOrientation(Simple3DVector filteredAcceleration)
        {
            DeviceOrientation currentOrientation = DeviceOrientation.Unknown;

            double xAcceleration = filteredAcceleration.X;
            double yAcceleration = filteredAcceleration.Y;
            double zAcceleration = filteredAcceleration.Z;

            // Normalize acceleration to 1g
            double magnitudeXYZ = Math.Sqrt(xAcceleration * xAcceleration + yAcceleration * yAcceleration + zAcceleration * zAcceleration);

            xAcceleration = xAcceleration / magnitudeXYZ;
            yAcceleration = yAcceleration / magnitudeXYZ;
            zAcceleration = zAcceleration / magnitudeXYZ;

            if (_currentOrientation == DeviceOrientation.Unknown)
            { // No pre-existing orientation: default is flat
                if (zAcceleration < 0)
                {
                    currentOrientation = DeviceOrientation.ScreenSideUp;
                }
                else
                {
                    currentOrientation = DeviceOrientation.ScreenSideDown;
                }
            }

            if (yAcceleration < -tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.PortraitRightSideUp;
            }
            else if (yAcceleration > tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.PortraitUpSideDown;
            }
            else if (xAcceleration < -tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.LandscapeLeft;
            }
            else if (xAcceleration > tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.LandscapeRight;
            }
            else if (zAcceleration < -tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.ScreenSideUp;
            }
            else if (zAcceleration > tiltAccelerationThreshold)
            {
                currentOrientation = DeviceOrientation.ScreenSideDown;
            }

            DeviceOrientation previousOrientation = DeviceOrientation.Unknown;
            bool fireEvent = false;

            if (currentOrientation != DeviceOrientation.Unknown)
            {
                lock (this) // Keep the lock as brief as posible
                {
                    _currentOrientation = currentOrientation;
                    if (_previousOrientation != _currentOrientation)
                    {
                        previousOrientation  = _previousOrientation;
                        _previousOrientation = _currentOrientation;
                        fireEvent            = true;
                    }
                }
            }

            if (fireEvent)
            {
                DeviceOrientationChangedEventArgs orientationEventArgs = new DeviceOrientationChangedEventArgs();
                orientationEventArgs.CurrentOrientation  = currentOrientation;
                orientationEventArgs.PreviousOrientation = previousOrientation;
                if (OrientationChanged != null)
                {
                    OrientationChanged(this, orientationEventArgs);
                }
            }
        }