Exemplo n.º 1
0
        private async void Control_PointerWheelChanged(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
        {
            //Debug.WriteLine("Control_PointerWheelChanged");
            var pointer = e.GetCurrentPoint(Control).Properties;

            if (!pointer.IsLeftButtonPressed && !pointer.IsRightButtonPressed)
            {
                double oldScale = Element.ViewScale;
                int    delta    = pointer.MouseWheelDelta;
                if (delta > 0)
                {
                    Element.ViewScale = Element.ViewScale * (0.2 * delta / 120 + 1);
                }
                else if (delta < 0)
                {
                    Element.ViewScale = Element.ViewScale / (0.2 * -delta / 120 + 1);
                }

                Point oldPoint = Element.ViewPoint.Offset(pointer.ContactRect.X / oldScale, pointer.ContactRect.Y / oldScale);
                Point newPoint = Element.ViewPoint.Offset(pointer.ContactRect.X / Element.ViewScale, pointer.ContactRect.Y / Element.ViewScale);
                Element.ViewPoint = Element.ViewPoint.Offset(oldPoint.X - newPoint.X, oldPoint.Y - newPoint.Y);

                DrawImage = await Element.DrawImmageRequestAsync(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale));

                Control.Invalidate();
            }
        }
Exemplo n.º 2
0
        public bool OnFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
        {
            var x = e2.GetX();
            var y = e2.GetY();

            Scroller.Fling((int)x, (int)y, (int)velocityX / 4, (int)velocityY / 4, 0, Width * 5, 0, Height * 5);

            Device.StartTimer(new TimeSpan(1), () => {
                if (Scroller.ComputeScrollOffset())
                {
                    var xx = Scroller.CurrX;
                    var yy = Scroller.CurrY;

                    Element.ViewPoint = Element.ViewPoint.Offset(-(xx - x) / Element.ViewScale, -(yy - y) / Element.ViewScale);

                    DrawImage = Element.DrawImmageRequest(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale));

                    Invalidate();
                }
                return(!Scroller.IsFinished);
            });


            return(true);
        }
Exemplo n.º 3
0
        public bool OnScale(ScaleGestureDetector detector)
        {
            //Debug.WriteLine("Control_PointerWheelChanged");

            if (detector.PreviousSpan != detector.CurrentSpan)
            {
                double oldScale = Element.ViewScale;
                // UWP delta とは逆値
                double sclae = detector.PreviousSpan / detector.CurrentSpan;
                if (sclae < 1)
                {
                    Element.ViewScale = Element.ViewScale * (sclae * 1.1);
                }
                else if (sclae > 1)
                {
                    Element.ViewScale = Element.ViewScale * (sclae / 1.1);
                }

                Xamarin.Forms.Point oldPoint = Element.ViewPoint.Offset(detector.FocusX / oldScale, detector.FocusY / oldScale);
                Xamarin.Forms.Point newPoint = Element.ViewPoint.Offset(detector.FocusX / Element.ViewScale, detector.FocusY / Element.ViewScale);
                Element.ViewPoint = Element.ViewPoint.Offset(oldPoint.X - newPoint.X, oldPoint.Y - newPoint.Y);

                DrawImage = Element.DrawImmageRequest(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale));

                Invalidate();
            }
            return(true);
        }
Exemplo n.º 4
0
        private async void Control_SizeChanged(object sender, Windows.UI.Xaml.SizeChangedEventArgs e)
        {
            //Debug.WriteLine("Control_SizeChanged");

            DrawImage = await Element.DrawImmageRequestAsync(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale));

            Control.Invalidate();
        }
Exemplo n.º 5
0
        private void Control_LayoutChange(object sender, LayoutChangeEventArgs e)
        {
            //Debug.WriteLine("Control_SizeChanged");

            DrawImage = Element.DrawImmageRequest(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale));

            Invalidate();
        }
Exemplo n.º 6
0
        private async void Control_ManipulationDelta(object sender, Windows.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs e)
        {
            //Debug.WriteLine("Control_ManipulationDelta");

            Element.ViewPoint = Element.ViewPoint.Offset(-e.Delta.Translation.X / Element.ViewScale, -e.Delta.Translation.Y / Element.ViewScale);

            DrawImage = await Element.DrawImmageRequestAsync(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale));

            Control.Invalidate();
        }
Exemplo n.º 7
0
        protected override async void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            if (e.PropertyName == "DeviceImage")
            {
                DrawImage = await Element.DrawImmageRequestAsync(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale));

                Control.Invalidate();
            }
        }
Exemplo n.º 8
0
        public bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
        {
            //Debug.WriteLine("Control_ManipulationDelta");

            // UWP delta とは逆値
            Element.ViewPoint = Element.ViewPoint.Offset(distanceX / Element.ViewScale, distanceY / Element.ViewScale);

            DrawImage = Element.DrawImmageRequest(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale));

            Invalidate();
            return(true);
        }
Exemplo n.º 9
0
        private void Control_Draw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            args.DrawingSession.FillRectangle(GetDeviceRect(new Rectangle(Point.Zero, ViewSize)), Windows.UI.Color.FromArgb((byte)(Element.BackgroundColor.A * 255d), (byte)(Element.BackgroundColor.R * 255d), (byte)(Element.BackgroundColor.G * 255d), (byte)(Element.BackgroundColor.B * 255d)));

            if (DrawImage != null && DrawImage.Image != null)
            {
                Rectangle viewRect = new Rectangle
                {
                    Location = Matrix2.Enlargement(DrawImage.DrawRect.Location.Offset(-Element.ViewPoint.X, -Element.ViewPoint.Y), Element.ViewScale, Element.ViewScale),
                    Size     = Matrix2.Enlargement(DrawImage.DrawRect.Size, Element.ViewScale, Element.ViewScale)
                };

                args.DrawingSession.DrawImage(DrawImage.Image as ICanvasImage, GetDeviceRect(viewRect), GetDeviceRect(DrawImage.DrawRect), 1f, CanvasImageInterpolation.HighQualityCubic);
            }
        }
Exemplo n.º 10
0
        protected override void OnDraw(Canvas canvas)
        {
            base.OnDraw(canvas);

            Paint paint = new Paint(PaintFlags.AntiAlias);

            paint.Color = new Android.Graphics.Color((byte)(Element.BackgroundColor.A * 255d), (byte)(Element.BackgroundColor.R * 255d), (byte)(Element.BackgroundColor.G * 255d), (byte)(Element.BackgroundColor.B * 255d));
            //paint.Color = Android.Graphics.Color.Honeydew;
            paint.SetStyle(Paint.Style.Fill);
            canvas.DrawRect(new Rect(0, 0, Width, Height), paint);


            if (DrawImage != null && DrawImage.Image != null)
            {
                Rectangle viewRect = new Rectangle
                {
                    Location = Matrix2.Enlargement(DrawImage.DrawRect.Location.Offset(-Element.ViewPoint.X, -Element.ViewPoint.Y), Element.ViewScale, Element.ViewScale),
                    Size     = Matrix2.Enlargement(DrawImage.DrawRect.Size, Element.ViewScale, Element.ViewScale)
                };

                canvas.DrawBitmap(DrawImage.Image as Bitmap, GetDeviceRect(DrawImage.DrawRect), GetDeviceRect(viewRect), null);
                //canvas.DrawBitmap(DrawImage.Image as Bitmap, GetDeviceRect(viewRect), GetDeviceRect(DrawImage.DrawRect), null);
            }
        }