public static void ComputePointsFromTop(double controlWidth, double controlHeight, double x, double y, double r1, double r2, CornerOrigin fromCorner, out Point startPoint, out Point endPoint)
        {
            double num = x;
            double num2 = -num / y;
            double num3 = -num2;
            double num4 = num / (1.0 - (num2 * num3));
            double num5 = num3 * num4;
            double num6 = Math.Sqrt((num4 * num4) + (num5 * num5));
            double num7 = num4 - ((num4 * (r1 + r2)) / num6);
            double num8 = num5 - ((num5 * (r1 + r2)) / num6);
            switch (fromCorner)
            {
                case CornerOrigin.TopRight:
                    num4 = controlWidth - num4;
                    num7 = controlWidth - num7;
                    break;

                case CornerOrigin.BottomLeft:
                    num5 = controlHeight - num5;
                    num8 = controlHeight - num8;
                    break;

                case CornerOrigin.BottomRight:
                    num4 = controlWidth - num4;
                    num7 = controlWidth - num7;
                    num5 = controlHeight - num5;
                    num8 = controlHeight - num8;
                    break;
            }
            startPoint = new Point(num4 / controlWidth, num5 / controlHeight);
            endPoint = new Point(num7 / controlWidth, num8 / controlHeight);
        }
Exemple #2
0
 public static PageParameters ResetPage(BookPage source, CornerOrigin origin)
 {
     return(new PageParameters(source.RenderSize)
     {
         Page0ShadowOpacity = 0.0, Page1ClippingFigure = new PathFigure(), Page1ReflectionStartPoint = new Point(0.0, 0.0), Page1ReflectionEndPoint = new Point(0.0, 0.0), Page1RotateAngle = 0.0, Page1RotateCenterX = 0.0, Page1RotateCenterY = 0.0, Page1TranslateX = 0.0, Page1TranslateY = 0.0, Page2ClippingFigure = new PathFigure(), Page0ShadowStartPoint = new Point(0.0, 0.0), Page0ShadowEndPoint = new Point(0.0, 0.0)
     });
 }
Exemple #3
0
        public void InitPage(CornerOrigin origin)
        {
            Point p = new Point(0, 0);

            switch (origin)
            {
            case CornerOrigin.BottomLeft:
                p = new Point(0, ActualHeight);
                break;

            case CornerOrigin.BottomRight:
                p = new Point(ActualWidth, ActualHeight);
                break;

            case CornerOrigin.TopLeft:
                p = new Point(0, 0);
                break;

            case CornerOrigin.TopRight:
                p = new Point(ActualWidth, 0);
                break;
            }
            CornerPoint = p;
            CornerPointRefreshed();
        }
Exemple #4
0
        private void OnMouseDown(object sender, MouseButtonEventArgs args)
        {
            if ((Status == PageStatus.DropAnimation) || (Status == PageStatus.TurnAnimation))
            {
                return;
            }

            UIElement source = sender as UIElement;
            Point     p      = args.GetPosition(source);

            CornerOrigin?tmp  = GetCorner(source, p);
            int?         side = GetSide(source, p);


            if (side.HasValue && side == 1)
            {
                TurnPage();
                return;
            }

            if (tmp.HasValue)
            {
                origin = tmp.Value;
                this.CaptureMouse();
            }
            else
            {
                return;
            }

            Status = PageStatus.Dragging;
        }
Exemple #5
0
 public static double ComputeProgressRatio(BookPage source, Point p, CornerOrigin origin)
 {
     if ((origin != CornerOrigin.BottomLeft) && (origin != CornerOrigin.TopLeft))
     {
         return((source.RenderSize.Width - p.X) / source.RenderSize.Width);
     }
     return(p.X / source.RenderSize.Width);
 }
Exemple #6
0
 private static double ComputeProgressRatio(UIElement source, Point p, CornerOrigin origin)
 {
     if ((origin == CornerOrigin.BottomLeft) || (origin == CornerOrigin.TopLeft))
     {
         return(p.X / source.RenderSize.Width);
     }
     else
     {
         return((source.RenderSize.Width - p.X) / source.RenderSize.Width);
     }
 }
Exemple #7
0
        public static int ComputeAnimationDuration(BookPage source, Point p, CornerOrigin origin)
        {
            double num  = ComputeProgressRatio(source, p, origin);
            int    num2 = Convert.ToInt32((double)(s_nANIMATION_DURATION * ((num / 2.0) + 0.5)));

            if (num2 <= 10)
            {
                num2 = 10;
            }
            return(num2);
        }
Exemple #8
0
        private bool IsOnNextPage(Point p, UIElement source, CornerOrigin origin)
        {
            switch (origin)
            {
            case CornerOrigin.BottomLeft:
            case CornerOrigin.TopLeft:
                return(p.X > source.RenderSize.Width);

            default:
                return(p.X < 0);
            }
        }
Exemple #9
0
        private Point OriginToOppositePoint(UIElement source, CornerOrigin origin)
        {
            switch (origin)
            {
            case CornerOrigin.BottomLeft:
                return(new Point(source.RenderSize.Width * 2, source.RenderSize.Height));

            case CornerOrigin.BottomRight:
                return(new Point(-source.RenderSize.Width, source.RenderSize.Height));

            case CornerOrigin.TopRight:
                return(new Point(-source.RenderSize.Width, 0));

            default:
                return(new Point(source.RenderSize.Width * 2, 0));
            }
        }
        private static PageParameters ResetPage(UIElement source, CornerOrigin origin) {
            PageParameters _parameters = new PageParameters(source.RenderSize);
            _parameters.Page0ShadowOpacity = 0;
            _parameters.Page1ClippingFigure = new PathFigure();
            _parameters.Page1ReflectionStartPoint = new Point(0, 0);
            _parameters.Page1ReflectionEndPoint = new Point(0, 0);
            _parameters.Page1RotateAngle = 0;
            _parameters.Page1RotateCenterX = 0;
            _parameters.Page1RotateCenterY = 0;
            _parameters.Page1TranslateX = 0;
            _parameters.Page1TranslateY = 0;
            _parameters.Page2ClippingFigure = new PathFigure();
            _parameters.Page0ShadowStartPoint = new Point(0, 0);
            _parameters.Page0ShadowEndPoint = new Point(0, 0);

            return _parameters;
        }
        public void AutoTurnPage(CornerOrigin fromCorner, int duration)
        {
            if (Status != PageStatus.None)
            {
                return;
            }
            if (duration <= 0)
            {
                return;
            }
            Status = PageStatus.TurnAnimation;

            UIElement source = this as UIElement;

            this.BeginAnimation(BookPage.CornerPointProperty, null);

            Point startPoint = OriginToPoint(this, fromCorner);
            Point endPoint   = OriginToOppositePoint(this, fromCorner);

            CornerPoint = startPoint;
            origin      = fromCorner;

            BezierSegment bs =
                new BezierSegment(startPoint, new Point(endPoint.X + (startPoint.X - endPoint.X) / 3, 250), endPoint, true);

            PathGeometry path   = new PathGeometry();
            PathFigure   figure = new PathFigure();

            figure.StartPoint = startPoint;
            figure.Segments.Add(bs);
            figure.IsClosed = false;
            path.Figures.Add(figure);

            PointAnimationUsingPath anim =
                new PointAnimationUsingPath();

            anim.PathGeometry      = path;
            anim.Duration          = new Duration(TimeSpan.FromMilliseconds(duration));
            anim.AccelerationRatio = 0.6;

            anim.CurrentTimeInvalidated += anim_CurrentTimeInvalidated;
            anim.Completed += anim_Completed;
            this.BeginAnimation(BookPage.CornerPointProperty, anim);
        }
Exemple #12
0
        private static PageParameters ResetPage(UIElement source, CornerOrigin origin)
        {
            PageParameters _parameters = new PageParameters(source.RenderSize);

            _parameters.Page0ShadowOpacity        = 0;
            _parameters.Page1ClippingFigure       = new PathFigure();
            _parameters.Page1ReflectionStartPoint = new Point(0, 0);
            _parameters.Page1ReflectionEndPoint   = new Point(0, 0);
            _parameters.Page1RotateAngle          = 0;
            _parameters.Page1RotateCenterX        = 0;
            _parameters.Page1RotateCenterY        = 0;
            _parameters.Page1TranslateX           = 0;
            _parameters.Page1TranslateY           = 0;
            _parameters.Page2ClippingFigure       = new PathFigure();
            _parameters.Page0ShadowStartPoint     = new Point(0, 0);
            _parameters.Page0ShadowEndPoint       = new Point(0, 0);

            return(_parameters);
        }
Exemple #13
0
        private void OnMouseMove(object sender, MouseEventArgs args)
        {
            UIElement source = sender as UIElement;
            Point     p      = args.GetPosition(source);

            DropPage(ComputeAnimationDuration(source, p, origin));
            if ((Status == PageStatus.DropAnimation) || (Status == PageStatus.TurnAnimation))
            {
                return;
            }

            //Application.Current.MainWindow.Title += "M";



            if (!(sender as UIElement).IsMouseCaptured)
            {
                CornerOrigin?tmp = GetCorner(source, p);

                if (tmp.HasValue)
                {
                    origin = tmp.Value;
                }
                else
                {
                    //if (Status == PageStatus.DraggingWithoutCapture)
                    //{
                    DropPage(ComputeAnimationDuration(source, p, origin));
                    //}
                    return;
                }
                Status = PageStatus.DraggingWithoutCapture;
            }

            PageParameters?parameters = ComputePage(source, p, origin);

            _cornerPoint = p;
            if (parameters != null)
            {
                ApplyParameters(parameters.Value);
            }
        }
Exemple #14
0
        public void GrabPage(UIElement source, Point p)
        {
            if ((Status == PageStatus.DropAnimation) || (Status == PageStatus.TurnAnimation))
            {
                return;
            }

            CornerOrigin?tmp = GetCorner(source, p);

            if (tmp.HasValue)
            {
                origin = tmp.Value;
                Status = PageStatus.Dragging;
            }
            else
            {
                Status = PageStatus.None;
                return;
            }
        }
Exemple #15
0
        public void AutoTurnPage(CornerOrigin fromCorner, int duration)
        {
            if (Status != PageStatus.None)
            {
                return;
            }

            Status = PageStatus.TurnAnimation;

            UIElement source = this as UIElement;

            Point startPoint = OriginToPoint(this, fromCorner);
            Point endPoint   = OriginToOppositePoint(this, fromCorner);

            origin      = fromCorner;
            CornerPoint = startPoint;

            //BezierSegment bs =
            //    new BezierSegment { Point1 = startPoint, Point2 = new Point(endPoint.X + (startPoint.X - endPoint.X) / 3, 250), Point3 = endPoint };

            //PathGeometry path = new PathGeometry();
            //PathFigure figure = new PathFigure();
            //figure.StartPoint = startPoint;
            //figure.Segments.Add(bs);
            //figure.IsClosed = false;
            //path.Figures.Add(figure);

            //PointAnimationUsingPath anim =
            //    new PointAnimationUsingPath();
            //anim.PathGeometry = path;
            //anim.Duration = new Duration(TimeSpan.FromMilliseconds(duration));
            //anim.AccelerationRatio = 0.6;

            //anim.CurrentTimeInvalidated += new EventHandler(anim_CurrentTimeInvalidated);
            var anim = new TimerAnimation <Point>(this, UCPage.CornerPointProperty,
                                                  endPoint, new Duration(TimeSpan.FromMilliseconds(duration)),
                                                  (from, to, percent) => ComputeAutoAnimationPoints(from, to, percent));

            anim.Completed += new EventHandler(anim_Completed);
            anim.Begin();
        }
        public static void ComputePointsFromTop(double controlWidth, double controlHeight,
            double x, double y, double r1, double r2, CornerOrigin fromCorner,
            out Point startPoint, out Point endPoint)
        {
            double b = x;
            double a = -b / y;
            double a2 = -a;

            //double xc1 = b / 2;
            //double yc1 = -b / (2 * a);

            double xc1 = b / (1 - a * a2);
            double yc1 = a2 * xc1;

            double OC1 = Math.Sqrt(xc1 * xc1 + yc1 * yc1);

            double xc2 = xc1 - (xc1 * (r1 + r2)) / OC1;
            double yc2 = yc1 - (yc1 * (r1 + r2)) / OC1;

            switch (fromCorner)
            {
                case CornerOrigin.TopRight:
                    xc1 = controlWidth - xc1;
                    xc2 = controlWidth - xc2;
                    break;
                case CornerOrigin.BottomLeft:
                    yc1 = controlHeight - yc1;
                    yc2 = controlHeight - yc2;
                    break;
                case CornerOrigin.BottomRight:
                    xc1 = controlWidth - xc1;
                    xc2 = controlWidth - xc2;
                    yc1 = controlHeight - yc1;
                    yc2 = controlHeight - yc2;
                    break;
            }

            startPoint = new Point(xc1 / controlWidth, yc1 / controlHeight);
            endPoint = new Point(xc2 / controlWidth, yc2 / controlHeight);
        }
Exemple #17
0
        public static void ComputePoints(double controlWidth, double controlHeight,
                                         double x, double y, double r1, double r2, CornerOrigin fromCorner,
                                         out Point startPoint, out Point endPoint)
        {
            double b  = x;
            double a  = -b / y;
            double a2 = -a;

            double xc1 = b / (1 - a * a2);
            double yc1 = a2 * xc1;

            double OC1 = Math.Sqrt(xc1 * xc1 + yc1 * yc1);

            double xc2 = (xc1 * (r1 + r2)) / OC1 + xc1;
            double yc2 = (yc1 * (r1 + r2)) / OC1 + yc1;

            switch (fromCorner)
            {
            case CornerOrigin.TopRight:
                xc1 = controlWidth - xc1;
                xc2 = controlWidth - xc2;
                break;

            case CornerOrigin.BottomLeft:
                yc1 = controlHeight - yc1;
                yc2 = controlHeight - yc2;
                break;

            case CornerOrigin.BottomRight:
                xc1 = controlWidth - xc1;
                xc2 = controlWidth - xc2;
                yc1 = controlHeight - yc1;
                yc2 = controlHeight - yc2;
                break;
            }

            startPoint = new Point(xc1 / controlWidth, yc1 / controlHeight);
            endPoint   = new Point(xc2 / controlWidth, yc2 / controlHeight);
        }
Exemple #18
0
        private void ContentControl_GotStylusCapture(object sender, StylusEventArgs e)
        {
            if ((Status == PageStatus.DropAnimation) || (Status == PageStatus.TurnAnimation))
            {
                return;
            }

            UIElement source = sender as UIElement;
            Point     p      = e.GetPosition(source);

            CornerOrigin?tmp  = GetCorner(source, p);
            int?         side = GetSide(source, p);

            if (side.HasValue && side == 1 && IsBottomRightCornerEnabled)
            {
                AutoTurnPage(CornerOrigin.BottomRight, 500);
                return;
            }

            if (side.HasValue && side == 0 && IsBottomLeftCornerEnabled)
            {
                AutoTurnPage(CornerOrigin.BottomLeft, 500);
                return;
            }

            if (tmp.HasValue)
            {
                origin = tmp.Value;
                this.CaptureMouse();
            }
            else
            {
                return;
            }

            Status = PageStatus.Dragging;
        }
Exemple #19
0
        private static PageParameters? ComputePage(UIElement source, Point p, CornerOrigin origin)
        {
            CheckParams(ref source, ref p, origin);

            PageParameters _parameters = new PageParameters(source.RenderSize);

            double ratio = 0; // = ComputeProgressRatio(source, p, origin);
            if (ratio > 1.5)
                ratio = (2 - ratio) / 0.5;
            else
                ratio = 1;
            _parameters.Page0ShadowOpacity = ratio;

            double xc = source.RenderSize.Width;
            double yc = source.RenderSize.Height;//5_1_a_s_p_x

            switch (origin)
            {
                case CornerOrigin.TopLeft:
                    p.X = xc - p.X;
                    p.Y = yc - p.Y;
                    break;
                case CornerOrigin.TopRight:
                    p.Y = yc - p.Y;
                    break;
                case CornerOrigin.BottomLeft:
                    p.X = xc - p.X;
                    break;
            }

            if (p.X >= xc)
                return null;

            // x = a * y + b
            double a = -(p.Y - yc) / (p.X - xc);
            double b = (xc + p.X) / 2 - a * ((yc + p.Y) / 2);

            double h1 = (xc - b) / a;
            double l1 = a * yc + b;

            double angle = (Math.Atan((xc - p.X) / (h1 - p.Y))) * 180 / Math.PI;
            if ((a < 0) && (p.Y < h1))
                angle = angle - 180;

            switch (origin)
            {
                case CornerOrigin.BottomRight:
                    _parameters.Page1RotateAngle = -angle;
                    _parameters.Page1RotateCenterX = p.X;
                    _parameters.Page1RotateCenterY = p.Y;
                    _parameters.Page1TranslateX = p.X;
                    _parameters.Page1TranslateY = p.Y - yc;
                    break;
                case CornerOrigin.TopLeft:
                    _parameters.Page1RotateAngle = -angle;
                    _parameters.Page1RotateCenterX = xc - p.X;
                    _parameters.Page1RotateCenterY = yc - p.Y;
                    _parameters.Page1TranslateX = -p.X;
                    _parameters.Page1TranslateY = yc - p.Y;
                    break;
                case CornerOrigin.TopRight:
                    _parameters.Page1RotateAngle = angle;
                    _parameters.Page1RotateCenterX = p.X;
                    _parameters.Page1RotateCenterY = yc - p.Y;
                    _parameters.Page1TranslateX = p.X;
                    _parameters.Page1TranslateY = yc - p.Y;
                    break;
                case CornerOrigin.BottomLeft:
                    _parameters.Page1RotateAngle = angle;
                    _parameters.Page1RotateCenterX = xc - p.X;
                    _parameters.Page1RotateCenterY = p.Y;
                    _parameters.Page1TranslateX = -p.X;
                    _parameters.Page1TranslateY = p.Y - yc;
                    break;
            }

            switch (origin)
            {
                case CornerOrigin.BottomRight:
                    if (angle < 0)
                    {
                        _parameters.Page1ClippingFigure.StartPoint = new Point(0, yc);
                        _parameters.Page1ClippingFigure.Segments.Clear();
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(xc - l1, yc) });
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(0, h1) });
                    }
                    else
                    {
                        _parameters.Page1ClippingFigure.StartPoint = new Point(0, 0);
                        _parameters.Page1ClippingFigure.Segments.Clear();
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(xc - b, 0) });
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(0, h1) });
                    }
                    break;
                case CornerOrigin.TopLeft:
                    if (angle < 0)
                    {
                        _parameters.Page1ClippingFigure.StartPoint = new Point(xc, 0);
                        _parameters.Page1ClippingFigure.Segments.Clear();
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(l1, 0) });
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(xc, yc - h1) });
                    }
                    else
                    {
                        _parameters.Page1ClippingFigure.StartPoint = new Point(xc, yc);
                        _parameters.Page1ClippingFigure.Segments.Clear();
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(b, yc) });
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(xc, yc - h1) });
                    }
                    break;
                case CornerOrigin.BottomLeft:
                    if (angle < 0)
                    {
                        _parameters.Page1ClippingFigure.StartPoint = new Point(xc, yc);
                        _parameters.Page1ClippingFigure.Segments.Clear();
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(l1, yc) });
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(xc, h1) });
                    }
                    else
                    {
                        _parameters.Page1ClippingFigure.StartPoint = new Point(xc, 0);
                        _parameters.Page1ClippingFigure.Segments.Clear();
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(b, 0) });
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(xc, h1) });
                    }
                    break;
                case CornerOrigin.TopRight:
                    if (angle < 0)
                    {
                        _parameters.Page1ClippingFigure.StartPoint = new Point(0, 0);
                        _parameters.Page1ClippingFigure.Segments.Clear();
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(xc - l1, 0) });
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(0, yc - h1) });
                    }
                    else
                    {
                        _parameters.Page1ClippingFigure.StartPoint = new Point(0, yc);
                        _parameters.Page1ClippingFigure.Segments.Clear();
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(xc - b, yc) });
                        _parameters.Page1ClippingFigure.Segments.Add(new LineSegment { Point = new Point(0, yc - h1) });
                    }
                    break;
            }

            _parameters.Page2ClippingFigure.StartPoint = new Point(xc - _parameters.Page1ClippingFigure.StartPoint.X, _parameters.Page1ClippingFigure.StartPoint.Y);

            _parameters.Page2ClippingFigure.Segments = _parameters.Page1ClippingFigure.Segments.Clone();
            ((LineSegment)_parameters.Page2ClippingFigure.Segments[0]).Point
                = new Point(xc - ((LineSegment)_parameters.Page2ClippingFigure.Segments[0]).Point.X,
                    ((LineSegment)_parameters.Page2ClippingFigure.Segments[0]).Point.Y);
            ((LineSegment)_parameters.Page2ClippingFigure.Segments[1]).Point
                = new Point(xc - ((LineSegment)_parameters.Page2ClippingFigure.Segments[1]).Point.X,
                    ((LineSegment)_parameters.Page2ClippingFigure.Segments[1]).Point.Y);

            Point refletStartPoint;
            Point refletEndPoint;

            CornerOrigin oppositeOrigin = CornerOrigin.TopLeft;
            switch (origin)
            {
                case CornerOrigin.BottomLeft:
                    oppositeOrigin = CornerOrigin.BottomRight;
                    break;
                case CornerOrigin.BottomRight:
                    oppositeOrigin = CornerOrigin.BottomLeft;
                    break;
                case CornerOrigin.TopLeft:
                    oppositeOrigin = CornerOrigin.TopRight;
                    break;
                case CornerOrigin.TopRight:
                    oppositeOrigin = CornerOrigin.TopLeft;
                    break;
            }

            LinearGradientHelper.ComputePointsFromTop(xc, yc, xc - l1, yc - h1, 20, 20,
                oppositeOrigin,
                out refletStartPoint,
                out refletEndPoint);

            _parameters.Page1ReflectionStartPoint = refletStartPoint;
            _parameters.Page1ReflectionEndPoint = refletEndPoint; //new Point(1, 1 / Math.Tan((90 - angleClipping) * Math.PI / 180));

            Point startPoint;
            Point endPoint;

            double d = Math.Sqrt(Math.Pow(p.X - xc, 2) + Math.Pow(p.Y - yc, 2));

            double r1 = d / 10;
            double r2 = d / 10;

            LinearGradientHelper.ComputePoints(xc, yc, xc - l1, yc - h1, r1, r2,
                origin, out startPoint, out endPoint);

            _parameters.Page0ShadowStartPoint = startPoint;
            _parameters.Page0ShadowEndPoint = endPoint;

            return _parameters;
        }
Exemple #20
0
 public void TurnPageFromCorner(CornerOrigin refStarterCornerOrigin, int nAnimationDuration)
 {
     if (this.Status != PageStatus.Idle)
         return;
     this.SetValue(BookPage.StatusPropertyKey, (object)PageStatus.TurnAnimation);
     this.BeginAnimation(BookPage.CornerPointProperty, (AnimationTimeline)null);
     this.DisableManipulation();
     Point point1 = this.OriginToPoint(refStarterCornerOrigin);
     if (refStarterCornerOrigin == CornerOrigin.BottomRight || refStarterCornerOrigin == CornerOrigin.BottomLeft)
         point1.Y -= BookPage.s_dOFFSET_TO_AVOID_GLITCH;
     Point point3 = this.OriginToOppositePoint(refStarterCornerOrigin);
     this.m_ptCornerPoint = this.CornerPoint = point1;
     this.m_refCornerOrigin = refStarterCornerOrigin;
     BezierSegment bezierSegment = new BezierSegment(point1, new Point(point3.X + (point1.X - point3.X) / 3.0, 250.0), point3, true);
     PathGeometry pathGeometry = new PathGeometry();
     pathGeometry.Figures.Add(new PathFigure()
     {
         StartPoint = point1,
         Segments = {
       (PathSegment) bezierSegment
     },
         IsClosed = false
     });
     if (this.m_refAnimation != null)
     {
         this.m_refAnimation.CurrentTimeInvalidated -= new EventHandler(this.OnAnimationCurrentTimeInvalidated);
         this.m_refAnimation.CurrentStateInvalidated -= new EventHandler(this.OnAnimationCurrentStateInvalidated);
     }
     this.m_refAnimation = (PointAnimationBase)new PointAnimationUsingPath();
     (this.m_refAnimation as PointAnimationUsingPath).PathGeometry = pathGeometry;
     this.m_refAnimation.Duration = new Duration(TimeSpan.FromMilliseconds((double)nAnimationDuration));
     this.m_refAnimation.AccelerationRatio = 0.6;
     this.m_refAnimation.CurrentTimeInvalidated += new EventHandler(this.OnAnimationCurrentTimeInvalidated);
     this.m_refAnimation.CurrentStateInvalidated += new EventHandler(this.OnAnimationCurrentStateInvalidated);
     this.BeginAnimation(BookPage.CornerPointProperty, (AnimationTimeline)this.m_refAnimation);
 }
Exemple #21
0
 protected virtual void OnCornerInputDeviceDown(InputEventArgs e)
 {
     Rectangle rctCorner = e.Source as Rectangle;
     if (rctCorner == null || rctCorner.AreAnyTouchesCaptured || (!this.m_bCanStarNanipulation || !this.m_bDraggingEnabled))
         return;
     e.Handled = true;
     if (this.Status == Enums.PageStatus.DropAnimation || this.Status == Enums.PageStatus.Dragging)
         return;
     if (this.Status == Enums.PageStatus.TurnAnimation)
     {
         this.BeginAnimation(BookPage.CornerPointProperty, (AnimationTimeline)null);
         this.RaisePageTurnedEvent();
     }
     TouchExtensions.Capture(e.Device, (IInputElement)rctCorner);
     this.m_ptTapPoint = TouchExtensions.GetPosition(e.Device, (IInputElement)this);
     this.m_refTapTimer.Start();
     this.m_refFlickTimer.Start();
     this.m_dateStartFlick = DateTime.Now;
     Point position = TouchExtensions.GetPosition(e.Device, (IInputElement)this);
     CornerOrigin cornerOrigin = this.GetCornerOrigin(rctCorner, position);
     this.m_refCornerOrigin = cornerOrigin;
     if (this.IsInsideBoundingBox(position))
     {
         this.m_bContactAlreadyInsidePage = true;
         Point p = position;
         if (this.m_rctSideLeft != null && rctCorner == this.m_rctSideLeft || this.m_rctSideRight != null && rctCorner == this.m_rctSideRight)
             p.Y = this.OriginToPoint(cornerOrigin).Y;
         PageParameters? page = BookPageComputeHelper.ComputePage(this, p, cornerOrigin);
         this.CornerPoint = this.m_ptCornerPoint = p;
         if (page.HasValue)
             this.ApplyParameters(page.Value);
         this.SetValue(BookPage.StatusPropertyKey, (object)PageStatus.Dragging);
     }
     else
     {
         this.m_ptCornerPoint = position;
         if (this.IsRightPage && this.m_ptCornerPoint.X > this.ActualWidth)
             this.m_ptCornerPoint.X = this.ActualWidth;
         if (this.IsLeftPage && this.m_ptCornerPoint.X < 0.0)
             this.m_ptCornerPoint.X = 0.0;
         if (this.m_ptCornerPoint.Y > this.ActualHeight)
             this.m_ptCornerPoint.Y = this.ActualHeight;
         if (this.m_ptCornerPoint.Y < 0.0)
             this.m_ptCornerPoint.Y = 0.0;
         this.CornerPoint = this.m_ptCornerPoint;
     }
 }
Exemple #22
0
 private bool IsOnNextPage(Point p, UIElement source, CornerOrigin origin)
 {
     switch (origin)
     {
         case CornerOrigin.BottomLeft:
         case CornerOrigin.TopLeft:
             return p.X > source.RenderSize.Width;
         default:
             return p.X < 0;
     }
 }
Exemple #23
0
        private static int ComputeAnimationDuration(UIElement source, Point p, CornerOrigin origin)
        {
            double ratio = ComputeProgressRatio(source, p, origin);

            return Convert.ToInt32(animationDuration * (ratio / 2 + 0.5));
        }
        public void GrabPage(UIElement source, Point p)
        {
            if ((Status == PageStatus.DropAnimation) || (Status == PageStatus.TurnAnimation))
                return;

            CornerOrigin? tmp = GetCorner(source, p);

            if (tmp.HasValue)
            {
                origin = tmp.Value;
                Status = PageStatus.Dragging;
            }
            else
            {
                Status = PageStatus.None;
                return;
            }

            
        }
Exemple #25
0
        private static void CheckParams(ref UIElement source, ref Point p, CornerOrigin origin)
        {
            switch (origin)
            {
            case CornerOrigin.TopRight:
                if (origin == CornerOrigin.TopRight)
                {
                    if (p.Y == 0)
                    {
                        p.Y = epsilon;
                    }
                    if (p.X == 0)
                    {
                        p.X = epsilon;
                    }
                    if (p.Y > 0)
                    {
                        double d = Math.Sqrt(p.X * p.X + p.Y * p.Y);
                        if (d > source.RenderSize.Width)
                        {
                            double x = p.X * source.RenderSize.Width / d;
                            double y = p.Y * source.RenderSize.Width / d;
                            p.X = x;
                            p.Y = y;
                        }
                    }
                    else
                    {
                        double d = Math.Sqrt(p.X * p.X + p.Y * p.Y);
                        double R = Math.Sqrt(source.RenderSize.Width * source.RenderSize.Width + source.RenderSize.Height * source.RenderSize.Height);

                        double a     = (p.Y * p.Y) / (p.X * p.X) + 1;
                        double b     = -2 * p.Y * source.RenderSize.Height / p.X;
                        double c     = source.RenderSize.Height * source.RenderSize.Height - R * R;
                        double delta = b * b - 4 * a * c;

                        double x = 0;
                        if (p.X > 0)
                        {
                            x = (-b + Math.Sqrt(delta)) / (2 * a);
                        }
                        else
                        {
                            x = (-b - Math.Sqrt(delta)) / (2 * a);
                        }

                        double y = p.Y * x / p.X;

                        if (Math.Abs(x) < Math.Abs(p.X))
                        {
                            p.X = x;
                            p.Y = y;
                        }
                    }
                    if (source.RenderSize.Width - p.X == p.Y)
                    {
                        p.X += epsilon;
                    }
                }
                break;

            case CornerOrigin.TopLeft:
                p.X = source.RenderSize.Width - p.X;
                CheckParams(ref source, ref p, CornerOrigin.TopRight);
                p.X = source.RenderSize.Width - p.X;
                break;

            case CornerOrigin.BottomRight:
                p.Y = source.RenderSize.Height - p.Y;
                CheckParams(ref source, ref p, CornerOrigin.TopRight);
                p.Y = source.RenderSize.Height - p.Y;
                break;

            case CornerOrigin.BottomLeft:
                p.Y = source.RenderSize.Height - p.Y;
                p.X = source.RenderSize.Width - p.X;
                CheckParams(ref source, ref p, CornerOrigin.TopRight);
                p.Y = source.RenderSize.Height - p.Y;
                p.X = source.RenderSize.Width - p.X;
                break;
            }
        }
Exemple #26
0
        private static void CheckParams(ref UIElement source, ref Point p, CornerOrigin origin)
        {
            switch (origin)
            {
                case CornerOrigin.TopRight:
                    if (origin == CornerOrigin.TopRight)
                    {
                        if (p.Y == 0)
                            p.Y = epsilon;
                        if (p.X == 0)
                            p.X = epsilon;
                        if (p.Y > 0)
                        {
                            double d = Math.Sqrt(p.X * p.X + p.Y * p.Y);
                            if (d > source.RenderSize.Width)
                            {
                                double x = p.X * source.RenderSize.Width / d;
                                double y = p.Y * source.RenderSize.Width / d;
                                p.X = x;
                                p.Y = y;
                            }
                        }
                        else
                        {
                            double d = Math.Sqrt(p.X * p.X + p.Y * p.Y);
                            double R = Math.Sqrt(source.RenderSize.Width * source.RenderSize.Width + source.RenderSize.Height * source.RenderSize.Height);

                            double a = (p.Y * p.Y) / (p.X * p.X) + 1;
                            double b = -2 * p.Y * source.RenderSize.Height / p.X;
                            double c = source.RenderSize.Height * source.RenderSize.Height - R * R;
                            double delta = b * b - 4 * a * c;

                            double x = 0;
                            if (p.X > 0)
                                x = (-b + Math.Sqrt(delta)) / (2 * a);
                            else
                                x = (-b - Math.Sqrt(delta)) / (2 * a);

                            double y = p.Y * x / p.X;

                            if (Math.Abs(x) < Math.Abs(p.X))
                            {
                                p.X = x;
                                p.Y = y;
                            }
                        }
                        if (source.RenderSize.Width - p.X == p.Y)
                            p.X += epsilon;
                    }
                    break;

                case CornerOrigin.TopLeft:
                    p.X = source.RenderSize.Width - p.X;
                    CheckParams(ref source, ref p, CornerOrigin.TopRight);
                    p.X = source.RenderSize.Width - p.X;
                    break;
                case CornerOrigin.BottomRight:
                    p.Y = source.RenderSize.Height - p.Y;
                    CheckParams(ref source, ref p, CornerOrigin.TopRight);
                    p.Y = source.RenderSize.Height - p.Y;
                    break;
                case CornerOrigin.BottomLeft:
                    p.Y = source.RenderSize.Height - p.Y;
                    p.X = source.RenderSize.Width - p.X;
                    CheckParams(ref source, ref p, CornerOrigin.TopRight);
                    p.Y = source.RenderSize.Height - p.Y;
                    p.X = source.RenderSize.Width - p.X;
                    break;
            }
        }
Exemple #27
0
        private static int ComputeAnimationDuration(UIElement source, Point p, CornerOrigin origin)
        {
            double ratio = ComputeProgressRatio(source, p, origin);

            return(Convert.ToInt32(animationDuration * (ratio / 2 + 0.5)));
        }
Exemple #28
0
        private void OnMouseMove(object sender, MouseEventArgs args)
        {
            if ((Status == PageStatus.DropAnimation) || (Status == PageStatus.TurnAnimation))
                return;

            //Application.Current.MainWindow.Title += "M";

            UIElement source = sender as UIElement;
            Point p = args.GetPosition(source);

            if (!(sender as UIElement).IsMouseCaptured)
            {
                CornerOrigin? tmp = GetCorner(source, p);

                if (tmp.HasValue)
                    origin = tmp.Value;
                else
                {
                    if (Status == PageStatus.DraggingWithoutCapture)
                    {
                        DropPage(ComputeAnimationDuration(source, p, origin));
                    }
                    return;
                }
                Status = PageStatus.DraggingWithoutCapture;
            }

            PageParameters? parameters = ComputePage(source, p, origin);
            _cornerPoint = p;
            if (parameters != null)
                ApplyParameters(parameters.Value);
        }
Exemple #29
0
        public static PageParameters?ComputePage(BookPage source, Point p, CornerOrigin origin)
        {
            Point point;
            Point point2;
            Point point3;
            Point point4;

            CheckParams(ref source, ref p, origin);
            PageParameters parameters = new PageParameters(source.RenderSize);
            double         num        = ComputeProgressRatio(source, p, origin);

            if (num > 1.5)
            {
                num = (2.0 - num) / 0.5;
            }
            else
            {
                num = 1.0;
            }
            parameters.Page0ShadowOpacity = num;
            double width  = source.RenderSize.Width;
            double height = source.RenderSize.Height;

            switch (origin)
            {
            case CornerOrigin.TopLeft:
                p.X = width - p.X;
                p.Y = height - p.Y;
                break;

            case CornerOrigin.TopRight:
                p.Y = height - p.Y;
                break;

            case CornerOrigin.BottomLeft:
                p.X = width - p.X;
                break;
            }
            if (p.X >= width)
            {
                return(null);
            }
            double num4 = -(p.Y - height) / (p.X - width);
            double x    = ((width + p.X) / 2.0) - (num4 * ((height + p.Y) / 2.0));
            double y    = (width - x) / num4;
            double num7 = (num4 * height) + x;
            double num8 = (Math.Atan((width - p.X) / (y - p.Y)) * 180.0) / 3.1415926535897931;

            if ((num4 < 0.0) && (p.Y < y))
            {
                num8 -= 180.0;
            }
            switch (origin)
            {
            case CornerOrigin.TopLeft:
                parameters.Page1RotateAngle   = -num8;
                parameters.Page1RotateCenterX = width - p.X;
                parameters.Page1RotateCenterY = height - p.Y;
                parameters.Page1TranslateX    = -p.X;
                parameters.Page1TranslateY    = height - p.Y;
                break;

            case CornerOrigin.TopRight:
                parameters.Page1RotateAngle   = num8;
                parameters.Page1RotateCenterX = p.X;
                parameters.Page1RotateCenterY = height - p.Y;
                parameters.Page1TranslateX    = p.X;
                parameters.Page1TranslateY    = height - p.Y;
                break;

            case CornerOrigin.BottomLeft:
                parameters.Page1RotateAngle   = num8;
                parameters.Page1RotateCenterX = width - p.X;
                parameters.Page1RotateCenterY = p.Y;
                parameters.Page1TranslateX    = -p.X;
                parameters.Page1TranslateY    = p.Y - height;
                break;

            case CornerOrigin.BottomRight:
                parameters.Page1RotateAngle   = -num8;
                parameters.Page1RotateCenterX = p.X;
                parameters.Page1RotateCenterY = p.Y;
                parameters.Page1TranslateX    = p.X;
                parameters.Page1TranslateY    = p.Y - height;
                break;
            }
            switch (origin)
            {
            case CornerOrigin.TopLeft:
                if (num8 >= 0.0)
                {
                    parameters.Page1ClippingFigure.StartPoint = new Point(width, height);
                    parameters.Page1ClippingFigure.Segments.Clear();
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(x, height), false));
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width, height - y), false));
                    break;
                }
                parameters.Page1ClippingFigure.StartPoint = new Point(width, 0.0);
                parameters.Page1ClippingFigure.Segments.Clear();
                parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(num7, 0.0), false));
                parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width, height - y), false));
                break;

            case CornerOrigin.TopRight:
                if (num8 >= 0.0)
                {
                    parameters.Page1ClippingFigure.StartPoint = new Point(0.0, height);
                    parameters.Page1ClippingFigure.Segments.Clear();
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width - x, height), false));
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0.0, height - y), false));
                    break;
                }
                parameters.Page1ClippingFigure.StartPoint = new Point(0.0, 0.0);
                parameters.Page1ClippingFigure.Segments.Clear();
                parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width - num7, 0.0), false));
                parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0.0, height - y), false));
                break;

            case CornerOrigin.BottomLeft:
                if (num8 >= 0.0)
                {
                    parameters.Page1ClippingFigure.StartPoint = new Point(width, 0.0);
                    parameters.Page1ClippingFigure.Segments.Clear();
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(x, 0.0), false));
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width, y), false));
                    break;
                }
                parameters.Page1ClippingFigure.StartPoint = new Point(width, height);
                parameters.Page1ClippingFigure.Segments.Clear();
                parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(num7, height), false));
                parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width, y), false));
                break;

            case CornerOrigin.BottomRight:
                if (num8 >= 0.0)
                {
                    parameters.Page1ClippingFigure.StartPoint = new Point(0.0, 0.0);
                    parameters.Page1ClippingFigure.Segments.Clear();
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width - x, 0.0), false));
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0.0, y), false));
                    break;
                }
                parameters.Page1ClippingFigure.StartPoint = new Point(0.0, height);
                parameters.Page1ClippingFigure.Segments.Clear();
                parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width - num7, height), false));
                parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0.0, y), false));
                break;
            }
            parameters.Page2ClippingFigure.StartPoint = new Point(width - parameters.Page1ClippingFigure.StartPoint.X, parameters.Page1ClippingFigure.StartPoint.Y);
            parameters.Page2ClippingFigure.Segments   = parameters.Page1ClippingFigure.Segments.Clone();
            ((LineSegment)parameters.Page2ClippingFigure.Segments[0]).Point = new Point(width - ((LineSegment)parameters.Page2ClippingFigure.Segments[0]).Point.X, ((LineSegment)parameters.Page2ClippingFigure.Segments[0]).Point.Y);
            ((LineSegment)parameters.Page2ClippingFigure.Segments[1]).Point = new Point(width - ((LineSegment)parameters.Page2ClippingFigure.Segments[1]).Point.X, ((LineSegment)parameters.Page2ClippingFigure.Segments[1]).Point.Y);
            CornerOrigin topLeft = CornerOrigin.TopLeft;

            switch (origin)
            {
            case CornerOrigin.TopLeft:
                topLeft = CornerOrigin.TopRight;
                break;

            case CornerOrigin.TopRight:
                topLeft = CornerOrigin.TopLeft;
                break;

            case CornerOrigin.BottomLeft:
                topLeft = CornerOrigin.BottomRight;
                break;

            case CornerOrigin.BottomRight:
                topLeft = CornerOrigin.BottomLeft;
                break;
            }
            NLinearGradientHelper.ComputePointsFromTop(width, height, width - num7, height - y, 20.0, 20.0, topLeft, out point, out point2);
            parameters.Page1ReflectionStartPoint = point;
            parameters.Page1ReflectionEndPoint   = point2;
            double num9  = Math.Sqrt(Math.Pow(p.X - width, 2.0) + Math.Pow(p.Y - height, 2.0));
            double num10 = num9 / 10.0;
            double num11 = num9 / 10.0;

            NLinearGradientHelper.ComputePoints(width, height, width - num7, height - y, num10, num11, origin, out point3, out point4);
            parameters.Page0ShadowStartPoint = point3;
            parameters.Page0ShadowEndPoint   = point4;
            return(new PageParameters?(parameters));
        }
Exemple #30
0
 public void ExecuteIdleAnimation(int corner)
 {
     Path path = (Path)null;
     switch (corner)
     {
         case 1:
             if (this.IsRightPage)
             {
                 path = this.m_refPART_IdleAnimationPathTopRight;
                 this.m_refCornerOrigin = CornerOrigin.TopRight;
                 break;
             }
             else
             {
                 path = this.m_refPART_IdleAnimationPathTopLeft;
                 this.m_refCornerOrigin = CornerOrigin.TopLeft;
                 break;
             }
         case 2:
             if (this.IsRightPage)
             {
                 path = this.m_refPART_IdleAnimationPathBottomRight;
                 this.m_refCornerOrigin = CornerOrigin.BottomRight;
                 break;
             }
             else
             {
                 path = this.m_refPART_IdleAnimationPathBottomLeft;
                 this.m_refCornerOrigin = CornerOrigin.BottomLeft;
                 break;
             }
     }
     if (this.Status != PageStatus.Idle || path == null)
         return;
     Geometry renderedGeometry = path.RenderedGeometry;
     if (renderedGeometry == null)
         return;
     if (this.m_refPART_ShadowCanvas != null)
         this.m_refPART_ShadowCanvas.Visibility = Visibility.Visible;
     if (this.m_refPART_ReflectionCanvas != null)
         this.m_refPART_ReflectionCanvas.Visibility = Visibility.Visible;
     this.m_ptCornerPoint = this.CornerPoint = this.OriginToPoint(this.m_refCornerOrigin);
     PageParameters? page = BookPageComputeHelper.ComputePage(this, this.m_ptCornerPoint, this.m_refCornerOrigin);
     if (page.HasValue)
         this.ApplyParameters(page.Value);
     this.BeginAnimation(BookPage.CornerPointProperty, (AnimationTimeline)null);
     if (this.m_refAnimation != null)
     {
         this.m_refAnimation.CurrentTimeInvalidated -= new EventHandler(this.OnAnimationCurrentTimeInvalidated);
         this.m_refAnimation.CurrentStateInvalidated -= new EventHandler(this.OnAnimationCurrentStateInvalidated);
     }
     this.m_refAnimation = (PointAnimationBase)new PointAnimationUsingPath();
     this.m_refAnimation.AccelerationRatio = 0.1;
     this.m_refAnimation.DecelerationRatio = 0.9;
     this.m_refAnimation.Duration = (Duration)TimeSpan.FromMilliseconds((double)BookPage.s_nIDLE_ANIMATION_DURATION);
     PathGeometry pathGeometry = new PathGeometry((IEnumerable<PathFigure>)PathFigureCollection.Parse(new GeometryValueSerializer().ConvertToString((object)renderedGeometry, (IValueSerializerContext)null)));
     pathGeometry.Transform = (Transform)this.TransformToVisual((Visual)path).Inverse;
     pathGeometry.Freeze();
     (this.m_refAnimation as PointAnimationUsingPath).PathGeometry = pathGeometry;
     this.m_refAnimation.CurrentTimeInvalidated += new EventHandler(this.OnIdleAnimationCurrentTimeInvalidated);
     this.m_refAnimation.CurrentStateInvalidated += new EventHandler(this.OnIdleAnimationCurrentStateInvalidated);
     this.BeginAnimation(BookPage.CornerPointProperty, (AnimationTimeline)this.m_refAnimation);
 }
Exemple #31
0
 protected virtual bool IsOnNextPage(Point refPoint, CornerOrigin refCornerOrigin)
 {
     switch (refCornerOrigin)
     {
         case CornerOrigin.TopLeft:
         case CornerOrigin.BottomLeft:
             return refPoint.X > this.RenderSize.Width;
         default:
             return refPoint.X < 0.0;
     }
 }
Exemple #32
0
        // Methods
        public static void CheckParams(ref BookPage source, ref Point p, CornerOrigin origin)
        {
            switch (origin)
            {
            case CornerOrigin.TopLeft:
                p.X = source.RenderSize.Width - p.X;
                CheckParams(ref source, ref p, CornerOrigin.TopRight);
                p.X = source.RenderSize.Width - p.X;
                return;

            case CornerOrigin.TopRight:
                if (origin != CornerOrigin.TopRight)
                {
                    break;
                }
                if (p.Y == 0.0)
                {
                    p.Y = s_dEPSILON;
                }
                if (p.X == 0.0)
                {
                    p.X = s_dEPSILON;
                }
                if (p.Y > 0.0)
                {
                    double num = Math.Sqrt((p.X * p.X) + (p.Y * p.Y));
                    if (num > source.RenderSize.Width)
                    {
                        double num2 = (p.X * source.RenderSize.Width) / num;
                        double num3 = (p.Y * source.RenderSize.Width) / num;
                        p.X = num2;
                        p.Y = num3;
                    }
                }
                else
                {
                    Math.Sqrt((p.X * p.X) + (p.Y * p.Y));
                    double num4 = Math.Sqrt((source.RenderSize.Width * source.RenderSize.Width) + (source.RenderSize.Height * source.RenderSize.Height));
                    double num5 = ((p.Y * p.Y) / (p.X * p.X)) + 1.0;
                    double num6 = ((-2.0 * p.Y) * source.RenderSize.Height) / p.X;
                    double num7 = (source.RenderSize.Height * source.RenderSize.Height) - (num4 * num4);
                    double d    = (num6 * num6) - ((4.0 * num5) * num7);
                    double num9 = 0.0;
                    if (p.X > 0.0)
                    {
                        num9 = (-num6 + Math.Sqrt(d)) / (2.0 * num5);
                    }
                    else
                    {
                        num9 = (-num6 - Math.Sqrt(d)) / (2.0 * num5);
                    }
                    double num10 = (p.Y * num9) / p.X;
                    if (Math.Abs(num9) < Math.Abs(p.X))
                    {
                        p.X = num9;
                        p.Y = num10;
                    }
                }
                if ((source.RenderSize.Width - p.X) != p.Y)
                {
                    break;
                }
                p.X += s_dEPSILON;
                return;

            case CornerOrigin.BottomLeft:
                p.Y = source.RenderSize.Height - p.Y;
                p.X = source.RenderSize.Width - p.X;
                CheckParams(ref source, ref p, CornerOrigin.TopRight);
                p.Y = source.RenderSize.Height - p.Y;
                p.X = source.RenderSize.Width - p.X;
                break;

            case CornerOrigin.BottomRight:
                p.Y = source.RenderSize.Height - p.Y;
                CheckParams(ref source, ref p, CornerOrigin.TopRight);
                p.Y = source.RenderSize.Height - p.Y;
                return;

            default:
                return;
            }
        }
 public static int ComputeAnimationDuration(BookPage source, Point p, CornerOrigin origin)
 {
     double num = ComputeProgressRatio(source, p, origin);
     int num2 = Convert.ToInt32((double)(s_nANIMATION_DURATION * ((num / 2.0) + 0.5)));
     if (num2 <= 10)
     {
         num2 = 10;
     }
     return num2;
 }
Exemple #34
0
        public static void ComputePoints(double controlWidth, double controlHeight, double x, double y, double r1, double r2, CornerOrigin fromCorner, out Point startPoint, out Point endPoint)
        {
            double num  = x;
            double num2 = -num / y;
            double num3 = -num2;
            double num4 = num / (1.0 - (num2 * num3));
            double num5 = num3 * num4;
            double num6 = Math.Sqrt((num4 * num4) + (num5 * num5));
            double num7 = ((num4 * (r1 + r2)) / num6) + num4;
            double num8 = ((num5 * (r1 + r2)) / num6) + num5;

            switch (fromCorner)
            {
            case CornerOrigin.TopRight:
                num4 = controlWidth - num4;
                num7 = controlWidth - num7;
                break;

            case CornerOrigin.BottomLeft:
                num5 = controlHeight - num5;
                num8 = controlHeight - num8;
                break;

            case CornerOrigin.BottomRight:
                num4 = controlWidth - num4;
                num7 = controlWidth - num7;
                num5 = controlHeight - num5;
                num8 = controlHeight - num8;
                break;
            }
            startPoint = new Point(num4 / controlWidth, num5 / controlHeight);
            endPoint   = new Point(num7 / controlWidth, num8 / controlHeight);
        }
Exemple #35
0
        private static PageParameters?ComputePage(UIElement source, Point p, CornerOrigin origin)
        {
            CheckParams(ref source, ref p, origin);

            PageParameters _parameters = new PageParameters(source.RenderSize);

            double ratio = ComputeProgressRatio(source, p, origin);

            if (ratio > 1.5)
            {
                ratio = (2 - ratio) / 0.5;
            }
            else
            {
                ratio = 1;
            }
            _parameters.Page0ShadowOpacity = ratio;

            double xc = source.RenderSize.Width;
            double yc = source.RenderSize.Height;

            switch (origin)
            {
            case CornerOrigin.TopLeft:
                p.X = xc - p.X;
                p.Y = yc - p.Y;
                break;

            case CornerOrigin.TopRight:
                p.Y = yc - p.Y;
                break;

            case CornerOrigin.BottomLeft:
                p.X = xc - p.X;
                break;
            }

            if (p.X >= xc)
            {
                return(null);
            }

            // x = a * y + b
            double a = -(p.Y - yc) / (p.X - xc);
            double b = (xc + p.X) / 2 - a * ((yc + p.Y) / 2);

            double h1 = (xc - b) / a;
            double l1 = a * yc + b;

            double angle = (Math.Atan((xc - p.X) / (h1 - p.Y))) * 180 / Math.PI;

            if ((a < 0) && (p.Y < h1))
            {
                angle = angle - 180;
            }

            switch (origin)
            {
            case CornerOrigin.BottomRight:
                _parameters.Page1RotateAngle   = -angle;
                _parameters.Page1RotateCenterX = p.X;
                _parameters.Page1RotateCenterY = p.Y;
                _parameters.Page1TranslateX    = p.X;
                _parameters.Page1TranslateY    = p.Y - yc;
                break;

            case CornerOrigin.TopLeft:
                _parameters.Page1RotateAngle   = -angle;
                _parameters.Page1RotateCenterX = xc - p.X;
                _parameters.Page1RotateCenterY = yc - p.Y;
                _parameters.Page1TranslateX    = -p.X;
                _parameters.Page1TranslateY    = yc - p.Y;
                break;

            case CornerOrigin.TopRight:
                _parameters.Page1RotateAngle   = angle;
                _parameters.Page1RotateCenterX = p.X;
                _parameters.Page1RotateCenterY = yc - p.Y;
                _parameters.Page1TranslateX    = p.X;
                _parameters.Page1TranslateY    = yc - p.Y;
                break;

            case CornerOrigin.BottomLeft:
                _parameters.Page1RotateAngle   = angle;
                _parameters.Page1RotateCenterX = xc - p.X;
                _parameters.Page1RotateCenterY = p.Y;
                _parameters.Page1TranslateX    = -p.X;
                _parameters.Page1TranslateY    = p.Y - yc;
                break;
            }

            switch (origin)
            {
            case CornerOrigin.BottomRight:
                if (angle < 0)
                {
                    _parameters.Page1ClippingFigure.StartPoint = new Point(0, yc);
                    _parameters.Page1ClippingFigure.Segments.Clear();
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(xc - l1, yc), false));
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0, h1), false));
                }
                else
                {
                    _parameters.Page1ClippingFigure.StartPoint = new Point(0, 0);
                    _parameters.Page1ClippingFigure.Segments.Clear();
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(xc - b, 0), false));
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0, h1), false));
                }
                break;

            case CornerOrigin.TopLeft:
                if (angle < 0)
                {
                    _parameters.Page1ClippingFigure.StartPoint = new Point(xc, 0);
                    _parameters.Page1ClippingFigure.Segments.Clear();
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(l1, 0), false));
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(xc, yc - h1), false));
                }
                else
                {
                    _parameters.Page1ClippingFigure.StartPoint = new Point(xc, yc);
                    _parameters.Page1ClippingFigure.Segments.Clear();
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(b, yc), false));
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(xc, yc - h1), false));
                }
                break;

            case CornerOrigin.BottomLeft:
                if (angle < 0)
                {
                    _parameters.Page1ClippingFigure.StartPoint = new Point(xc, yc);
                    _parameters.Page1ClippingFigure.Segments.Clear();
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(l1, yc), false));
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(xc, h1), false));
                }
                else
                {
                    _parameters.Page1ClippingFigure.StartPoint = new Point(xc, 0);
                    _parameters.Page1ClippingFigure.Segments.Clear();
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(b, 0), false));
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(xc, h1), false));
                }
                break;

            case CornerOrigin.TopRight:
                if (angle < 0)
                {
                    _parameters.Page1ClippingFigure.StartPoint = new Point(0, 0);
                    _parameters.Page1ClippingFigure.Segments.Clear();
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(xc - l1, 0), false));
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0, yc - h1), false));
                }
                else
                {
                    _parameters.Page1ClippingFigure.StartPoint = new Point(0, yc);
                    _parameters.Page1ClippingFigure.Segments.Clear();
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(xc - b, yc), false));
                    _parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0, yc - h1), false));
                }
                break;
            }

            _parameters.Page2ClippingFigure.StartPoint = new Point(xc - _parameters.Page1ClippingFigure.StartPoint.X, _parameters.Page1ClippingFigure.StartPoint.Y);

            _parameters.Page2ClippingFigure.Segments = _parameters.Page1ClippingFigure.Segments.Clone();
            ((LineSegment)_parameters.Page2ClippingFigure.Segments[0]).Point
                = new Point(xc - ((LineSegment)_parameters.Page2ClippingFigure.Segments[0]).Point.X,
                            ((LineSegment)_parameters.Page2ClippingFigure.Segments[0]).Point.Y);
            ((LineSegment)_parameters.Page2ClippingFigure.Segments[1]).Point
                = new Point(xc - ((LineSegment)_parameters.Page2ClippingFigure.Segments[1]).Point.X,
                            ((LineSegment)_parameters.Page2ClippingFigure.Segments[1]).Point.Y);

            Point refletStartPoint;
            Point refletEndPoint;

            CornerOrigin oppositeOrigin = CornerOrigin.TopLeft;

            switch (origin)
            {
            case CornerOrigin.BottomLeft:
                oppositeOrigin = CornerOrigin.BottomRight;
                break;

            case CornerOrigin.BottomRight:
                oppositeOrigin = CornerOrigin.BottomLeft;
                break;

            case CornerOrigin.TopLeft:
                oppositeOrigin = CornerOrigin.TopRight;
                break;

            case CornerOrigin.TopRight:
                oppositeOrigin = CornerOrigin.TopLeft;
                break;
            }

            LinearGradientHelper.ComputePointsFromTop(xc, yc, xc - l1, yc - h1, 20, 20,
                                                      oppositeOrigin,
                                                      out refletStartPoint,
                                                      out refletEndPoint);

            _parameters.Page1ReflectionStartPoint = refletStartPoint;
            _parameters.Page1ReflectionEndPoint   = refletEndPoint; //new Point(1, 1 / Math.Tan((90 - angleClipping) * Math.PI / 180));

            Point startPoint;
            Point endPoint;

            double d = Math.Sqrt(Math.Pow(p.X - xc, 2) + Math.Pow(p.Y - yc, 2));

            double r1 = d / 10;
            double r2 = d / 10;

            LinearGradientHelper.ComputePoints(xc, yc, xc - l1, yc - h1, r1, r2,
                                               origin, out startPoint, out endPoint);

            _parameters.Page0ShadowStartPoint = startPoint;
            _parameters.Page0ShadowEndPoint   = endPoint;

            return(_parameters);
        }
        public static PageParameters? ComputePage(BookPage source, Point p, CornerOrigin origin)
        {
            Point point;
            Point point2;
            Point point3;
            Point point4;
            CheckParams(ref source, ref p, origin);
            PageParameters parameters = new PageParameters(source.RenderSize);
            double num = ComputeProgressRatio(source, p, origin);
            if (num > 1.5)
            {
                num = (2.0 - num) / 0.5;
            }
            else
            {
                num = 1.0;
            }
            parameters.Page0ShadowOpacity = num;
            double width = source.RenderSize.Width;
            double height = source.RenderSize.Height;
            switch (origin)
            {
                case CornerOrigin.TopLeft:
                    p.X = width - p.X;
                    p.Y = height - p.Y;
                    break;

                case CornerOrigin.TopRight:
                    p.Y = height - p.Y;
                    break;

                case CornerOrigin.BottomLeft:
                    p.X = width - p.X;
                    break;
            }
            if (p.X >= width)
            {
                return null;
            }
            double num4 = -(p.Y - height) / (p.X - width);
            double x = ((width + p.X) / 2.0) - (num4 * ((height + p.Y) / 2.0));
            double y = (width - x) / num4;
            double num7 = (num4 * height) + x;
            double num8 = (Math.Atan((width - p.X) / (y - p.Y)) * 180.0) / 3.1415926535897931;
            if ((num4 < 0.0) && (p.Y < y))
            {
                num8 -= 180.0;
            }
            switch (origin)
            {
                case CornerOrigin.TopLeft:
                    parameters.Page1RotateAngle = -num8;
                    parameters.Page1RotateCenterX = width - p.X;
                    parameters.Page1RotateCenterY = height - p.Y;
                    parameters.Page1TranslateX = -p.X;
                    parameters.Page1TranslateY = height - p.Y;
                    break;

                case CornerOrigin.TopRight:
                    parameters.Page1RotateAngle = num8;
                    parameters.Page1RotateCenterX = p.X;
                    parameters.Page1RotateCenterY = height - p.Y;
                    parameters.Page1TranslateX = p.X;
                    parameters.Page1TranslateY = height - p.Y;
                    break;

                case CornerOrigin.BottomLeft:
                    parameters.Page1RotateAngle = num8;
                    parameters.Page1RotateCenterX = width - p.X;
                    parameters.Page1RotateCenterY = p.Y;
                    parameters.Page1TranslateX = -p.X;
                    parameters.Page1TranslateY = p.Y - height;
                    break;

                case CornerOrigin.BottomRight:
                    parameters.Page1RotateAngle = -num8;
                    parameters.Page1RotateCenterX = p.X;
                    parameters.Page1RotateCenterY = p.Y;
                    parameters.Page1TranslateX = p.X;
                    parameters.Page1TranslateY = p.Y - height;
                    break;
            }
            switch (origin)
            {
                case CornerOrigin.TopLeft:
                    if (num8 >= 0.0)
                    {
                        parameters.Page1ClippingFigure.StartPoint = new Point(width, height);
                        parameters.Page1ClippingFigure.Segments.Clear();
                        parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(x, height), false));
                        parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width, height - y), false));
                        break;
                    }
                    parameters.Page1ClippingFigure.StartPoint = new Point(width, 0.0);
                    parameters.Page1ClippingFigure.Segments.Clear();
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(num7, 0.0), false));
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width, height - y), false));
                    break;

                case CornerOrigin.TopRight:
                    if (num8 >= 0.0)
                    {
                        parameters.Page1ClippingFigure.StartPoint = new Point(0.0, height);
                        parameters.Page1ClippingFigure.Segments.Clear();
                        parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width - x, height), false));
                        parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0.0, height - y), false));
                        break;
                    }
                    parameters.Page1ClippingFigure.StartPoint = new Point(0.0, 0.0);
                    parameters.Page1ClippingFigure.Segments.Clear();
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width - num7, 0.0), false));
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0.0, height - y), false));
                    break;

                case CornerOrigin.BottomLeft:
                    if (num8 >= 0.0)
                    {
                        parameters.Page1ClippingFigure.StartPoint = new Point(width, 0.0);
                        parameters.Page1ClippingFigure.Segments.Clear();
                        parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(x, 0.0), false));
                        parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width, y), false));
                        break;
                    }
                    parameters.Page1ClippingFigure.StartPoint = new Point(width, height);
                    parameters.Page1ClippingFigure.Segments.Clear();
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(num7, height), false));
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width, y), false));
                    break;

                case CornerOrigin.BottomRight:
                    if (num8 >= 0.0)
                    {
                        parameters.Page1ClippingFigure.StartPoint = new Point(0.0, 0.0);
                        parameters.Page1ClippingFigure.Segments.Clear();
                        parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width - x, 0.0), false));
                        parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0.0, y), false));
                        break;
                    }
                    parameters.Page1ClippingFigure.StartPoint = new Point(0.0, height);
                    parameters.Page1ClippingFigure.Segments.Clear();
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(width - num7, height), false));
                    parameters.Page1ClippingFigure.Segments.Add(new LineSegment(new Point(0.0, y), false));
                    break;
            }
            parameters.Page2ClippingFigure.StartPoint = new Point(width - parameters.Page1ClippingFigure.StartPoint.X, parameters.Page1ClippingFigure.StartPoint.Y);
            parameters.Page2ClippingFigure.Segments = parameters.Page1ClippingFigure.Segments.Clone();
            ((LineSegment)parameters.Page2ClippingFigure.Segments[0]).Point = new Point(width - ((LineSegment)parameters.Page2ClippingFigure.Segments[0]).Point.X, ((LineSegment)parameters.Page2ClippingFigure.Segments[0]).Point.Y);
            ((LineSegment)parameters.Page2ClippingFigure.Segments[1]).Point = new Point(width - ((LineSegment)parameters.Page2ClippingFigure.Segments[1]).Point.X, ((LineSegment)parameters.Page2ClippingFigure.Segments[1]).Point.Y);
            CornerOrigin topLeft = CornerOrigin.TopLeft;
            switch (origin)
            {
                case CornerOrigin.TopLeft:
                    topLeft = CornerOrigin.TopRight;
                    break;

                case CornerOrigin.TopRight:
                    topLeft = CornerOrigin.TopLeft;
                    break;

                case CornerOrigin.BottomLeft:
                    topLeft = CornerOrigin.BottomRight;
                    break;

                case CornerOrigin.BottomRight:
                    topLeft = CornerOrigin.BottomLeft;
                    break;
            }
            NLinearGradientHelper.ComputePointsFromTop(width, height, width - num7, height - y, 20.0, 20.0, topLeft, out point, out point2);
            parameters.Page1ReflectionStartPoint = point;
            parameters.Page1ReflectionEndPoint = point2;
            double num9 = Math.Sqrt(Math.Pow(p.X - width, 2.0) + Math.Pow(p.Y - height, 2.0));
            double num10 = num9 / 10.0;
            double num11 = num9 / 10.0;
            NLinearGradientHelper.ComputePoints(width, height, width - num7, height - y, num10, num11, origin, out point3, out point4);
            parameters.Page0ShadowStartPoint = point3;
            parameters.Page0ShadowEndPoint = point4;
            return new PageParameters?(parameters);
        }
Exemple #37
0
        public void AutoTurnPage(CornerOrigin fromCorner, int duration)
        {
            if (Status != PageStatus.None)
                return;

            Status = PageStatus.TurnAnimation;

            UIElement source = this as UIElement;

            this.BeginAnimation(BookPage.CornerPointProperty, null);

            Point startPoint = OriginToPoint(this, fromCorner);
            Point endPoint = OriginToOppositePoint(this, fromCorner);

            CornerPoint = startPoint;
            origin = fromCorner;

            BezierSegment bs =
                new BezierSegment(startPoint, new Point(endPoint.X + (startPoint.X - endPoint.X) / 3, 250), endPoint, true);

            PathGeometry path = new PathGeometry();
            PathFigure figure = new PathFigure();
            figure.StartPoint = startPoint;
            figure.Segments.Add(bs);
            figure.IsClosed = false;
            path.Figures.Add(figure);

            PointAnimationUsingPath anim =
                new PointAnimationUsingPath();
            anim.PathGeometry = path;
            anim.Duration = new Duration(TimeSpan.FromMilliseconds(duration));
            anim.AccelerationRatio = 0.6;

            anim.CurrentTimeInvalidated += new EventHandler(anim_CurrentTimeInvalidated);
            anim.Completed += new EventHandler(anim_Completed);
            this.BeginAnimation(BookPage.CornerPointProperty, anim);
        }
        // Methods
        public static void CheckParams(ref BookPage source, ref Point p, CornerOrigin origin)
        {
            switch (origin)
            {
                case CornerOrigin.TopLeft:
                    p.X = source.RenderSize.Width - p.X;
                    CheckParams(ref source, ref p, CornerOrigin.TopRight);
                    p.X = source.RenderSize.Width - p.X;
                    return;

                case CornerOrigin.TopRight:
                    if (origin != CornerOrigin.TopRight)
                    {
                        break;
                    }
                    if (p.Y == 0.0)
                    {
                        p.Y = s_dEPSILON;
                    }
                    if (p.X == 0.0)
                    {
                        p.X = s_dEPSILON;
                    }
                    if (p.Y > 0.0)
                    {
                        double num = Math.Sqrt((p.X * p.X) + (p.Y * p.Y));
                        if (num > source.RenderSize.Width)
                        {
                            double num2 = (p.X * source.RenderSize.Width) / num;
                            double num3 = (p.Y * source.RenderSize.Width) / num;
                            p.X = num2;
                            p.Y = num3;
                        }
                    }
                    else
                    {
                        Math.Sqrt((p.X * p.X) + (p.Y * p.Y));
                        double num4 = Math.Sqrt((source.RenderSize.Width * source.RenderSize.Width) + (source.RenderSize.Height * source.RenderSize.Height));
                        double num5 = ((p.Y * p.Y) / (p.X * p.X)) + 1.0;
                        double num6 = ((-2.0 * p.Y) * source.RenderSize.Height) / p.X;
                        double num7 = (source.RenderSize.Height * source.RenderSize.Height) - (num4 * num4);
                        double d = (num6 * num6) - ((4.0 * num5) * num7);
                        double num9 = 0.0;
                        if (p.X > 0.0)
                        {
                            num9 = (-num6 + Math.Sqrt(d)) / (2.0 * num5);
                        }
                        else
                        {
                            num9 = (-num6 - Math.Sqrt(d)) / (2.0 * num5);
                        }
                        double num10 = (p.Y * num9) / p.X;
                        if (Math.Abs(num9) < Math.Abs(p.X))
                        {
                            p.X = num9;
                            p.Y = num10;
                        }
                    }
                    if ((source.RenderSize.Width - p.X) != p.Y)
                    {
                        break;
                    }
                    p.X += s_dEPSILON;
                    return;

                case CornerOrigin.BottomLeft:
                    p.Y = source.RenderSize.Height - p.Y;
                    p.X = source.RenderSize.Width - p.X;
                    CheckParams(ref source, ref p, CornerOrigin.TopRight);
                    p.Y = source.RenderSize.Height - p.Y;
                    p.X = source.RenderSize.Width - p.X;
                    break;

                case CornerOrigin.BottomRight:
                    p.Y = source.RenderSize.Height - p.Y;
                    CheckParams(ref source, ref p, CornerOrigin.TopRight);
                    p.Y = source.RenderSize.Height - p.Y;
                    return;

                default:
                    return;
            }
        }
Exemple #39
0
 private static double ComputeProgressRatio(UIElement source, Point p, CornerOrigin origin)
 {
     if ((origin == CornerOrigin.BottomLeft) || (origin == CornerOrigin.TopLeft))
         return p.X / source.RenderSize.Width;
     else
         return (source.RenderSize.Width - p.X) / source.RenderSize.Width;
 }
 public static double ComputeProgressRatio(BookPage source, Point p, CornerOrigin origin)
 {
     if ((origin != CornerOrigin.BottomLeft) && (origin != CornerOrigin.TopLeft))
     {
         return ((source.RenderSize.Width - p.X) / source.RenderSize.Width);
     }
     return (p.X / source.RenderSize.Width);
 }
Exemple #41
0
        private void OnMouseDown(object sender, MouseButtonEventArgs args)
        {
            if ((Status == PageStatus.DropAnimation) || (Status == PageStatus.TurnAnimation))
                return;

            UIElement source = sender as UIElement;
            Point p = args.GetPosition(source);

            CornerOrigin? tmp = GetCorner(source, p);

            if (tmp.HasValue)
            {
                origin = tmp.Value;
                this.CaptureMouse();
            }
            else
                return;

            Status = PageStatus.Dragging;
        }
 public static PageParameters ResetPage(BookPage source, CornerOrigin origin)
 {
     return new PageParameters(source.RenderSize) { Page0ShadowOpacity = 0.0, Page1ClippingFigure = new PathFigure(), Page1ReflectionStartPoint = new Point(0.0, 0.0), Page1ReflectionEndPoint = new Point(0.0, 0.0), Page1RotateAngle = 0.0, Page1RotateCenterX = 0.0, Page1RotateCenterY = 0.0, Page1TranslateX = 0.0, Page1TranslateY = 0.0, Page2ClippingFigure = new PathFigure(), Page0ShadowStartPoint = new Point(0.0, 0.0), Page0ShadowEndPoint = new Point(0.0, 0.0) };
 }
Exemple #43
0
 private Point OriginToPoint(UIElement source, CornerOrigin origin)
 {
     switch (origin)
     {
         case CornerOrigin.BottomLeft:
             return new Point(0, source.RenderSize.Height);
         case CornerOrigin.BottomRight:
             return new Point(source.RenderSize.Width, source.RenderSize.Height);
         case CornerOrigin.TopRight:
             return new Point(source.RenderSize.Width, 0);
         default:
             return new Point(0, 0);
     }
 }
Exemple #44
0
 protected virtual Point OriginToPoint(CornerOrigin refCornerOrigin)
 {
     switch (refCornerOrigin)
     {
         case CornerOrigin.TopRight:
             return new Point(this.RenderSize.Width, 0.0);
         case CornerOrigin.BottomLeft:
             return new Point(0.0, this.RenderSize.Height);
         case CornerOrigin.BottomRight:
             return new Point(this.RenderSize.Width, this.RenderSize.Height);
         default:
             return new Point(0.0, 0.0);
     }
 }