示例#1
0
		private static void OnDragging( object sender, PointerRoutedEventArgs e )
#endif
        {
            var obj = sender as DependencyObject;
            if (!GetIsDragging(obj))
                return;

#if WPF
            Point pos = e.GetPosition(obj as IInputElement);
#elif METRO
            Point pos = e.GetCurrentPoint(obj as UIElement).Position;
#endif
            double horizontalChange = (pos.X - GetOriginalX(obj)) * _scale.X;
            double verticalChange = (pos.Y - GetOriginalY(obj)) * _scale.Y;
            if (GetIsTagged(obj))
            {
                var vc = obj as VertexControl;
                if (vc == null)
                {
                    Debug.WriteLine("OnDragging() -> Tagged and dragged the wrong object?");
                    return;
                }
                foreach (var item in vc.RootArea.GetAllVertexControls())
                    if (GetIsTagged(item))
                        UpdateCoordinates(item, horizontalChange, verticalChange);
            }
            else UpdateCoordinates(obj, horizontalChange, verticalChange);
            e.Handled = true;
        }
示例#2
0
		private static void OnDragStarted( object sender, PointerRoutedEventArgs e )
#endif
        {
            var obj = sender as DependencyObject;
            //we are starting the drag
            SetIsDragging(obj, true);

#if WPF
            var pos = e.GetPosition(obj as IInputElement);
#elif METRO
			var pos = e.GetCurrentPoint(obj as UIElement).Position;
#endif

            //save the position of the mouse to the start position
            SetOriginalX(obj, pos.X);
            SetOriginalY(obj, pos.Y);

            //capture the mouse
#if WPF
            var element = obj as IInputElement;
            if (element != null)
            {
                element.CaptureMouse();
                element.MouseMove += OnDragging;
            }
            //else throw new GX_InvalidDataException("The control must be a descendent of the FrameworkElement or FrameworkContentElement!");
            e.Handled = false;
#elif METRO
            var element = obj as FrameworkElement;
			if ( element != null )
			{
				element.CapturePointer(e.Pointer);
				element.PointerMoved += OnDragging;
			}
            e.Handled = true;
#endif
        }
        private double? GetHorizontalPanelMousePosition(PointerRoutedEventArgs e)
#endif
        {
            // take into account the scrubber _horizontalThumb size
            double thumbWidth = (ThumbElement == null) ? 0 : ThumbElement.ActualWidth;
            double panelWidth = Panel.ActualWidth - thumbWidth;

            if (panelWidth > 0)
            {
                double range = Maximum - Minimum;

                // calculate the new newValue based on mouse position
#if SILVERLIGHT
                Point mousePosition = e.GetPosition(Panel);
#else
                Point mousePosition = e.GetCurrentPoint(Panel).Position;
#endif
                double x = mousePosition.X - thumbWidth / 2;
                x = Math.Min(Math.Max(0, x), panelWidth);
                double value = (x * range) / panelWidth;

                // offset from the min newValue
                value += Minimum;

                return value;
            }
            else return null;
        }
        private double? GetVerticalPanelMousePosition(PointerRoutedEventArgs e)
#endif
        {
            // take into account the scrubber _horizontalThumb size
            double thumbHeight = (ThumbElement == null) ? 0 : ThumbElement.ActualHeight;
            double panelHeight = Panel.ActualHeight - thumbHeight;

            if (panelHeight > 0)
            {
                double range = Maximum - Minimum;

                // calculate the new newValue based on mouse position
#if SILVERLIGHT
                Point mousePosition = e.GetPosition(Panel);
#else
                Point mousePosition = e.GetCurrentPoint(Panel).Position;
#endif
                double y = mousePosition.Y - thumbHeight / 2;
                y = Math.Min(Math.Max(0, y), panelHeight);
                double value = ((panelHeight - y) * range) / panelHeight;

                // offset from the min newValue
                value += Minimum;

                return value;
            }
            else return null;
        }
示例#5
0
        private void Foo_PointerWheelChanged(object sender, FakeMouseWheelEventArgs e)
        {
            bool isFineTune = this.fineTuneLocation.IsChecked.Value;
            FrameworkElement source = (FrameworkElement)sender;
#if !NETFX_CORE
            var point = e.GetPosition(source);
            double MouseWheelDelta = e.Delta;
#else
            var vpoint = e.GetCurrentPoint(source);
            double MouseWheelDelta = vpoint.Properties.MouseWheelDelta;
            var point = vpoint.Position;
#endif
            if (this.wheelToggle.IsChecked.Value)
            {
                double multipler = MouseWheelDelta * 0.0005;
                if (isFineTune)
                {
                    multipler *= 0.1;
                }

                double newScale = Math.Exp(multipler);
                if (isFineTune)
                {
                    view.DeltaOffsetScale(newScale);
                }
                else
                {
                    view.AddScale(newScale, point.X - source.ActualWidth / 2, point.Y - source.ActualHeight / 2);
                }
            }
            else
            {
                double multipler = MouseWheelDelta / 10;
                if (isFineTune)
                {
                    multipler *= 0.1;
                }

                double newRot = multipler * 2 * Math.PI / 360;

                if (isFineTune)
                {
                    view.DeltaOffsetRot(newRot);
                }
                else
                {
                    view.AddBaseRotation(newRot, new Point(point.X - source.ActualWidth / 2, point.Y - source.ActualHeight / 2));
                }
            }

            e.Handled = true;
        }