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; }
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; }
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; }