protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); // wpf generates to many events if mouse is over some visual // and OnMouseUp is fired, wtf, anyway... // http://greatmaps.codeplex.com/workitem/16013 if ((e.Timestamp & Int32.MaxValue) - onMouseUpTimestamp < 55) { Debug.WriteLine("OnMouseMove skipped: " + ((e.Timestamp & Int32.MaxValue) - onMouseUpTimestamp) + "ms"); return; } if (!Core.IsDragging && !Core.mouseDown.IsEmpty) { Point p = e.GetPosition(this); if (MapScaleTransform != null) { p = MapScaleTransform.Inverse.Transform(p); } p = ApplyRotationInversion(p.X, p.Y); // cursor has moved beyond drag tolerance if (Math.Abs(p.X - Core.mouseDown.X) * 2 >= SystemParameters.MinimumHorizontalDragDistance || Math.Abs(p.Y - Core.mouseDown.Y) * 2 >= SystemParameters.MinimumVerticalDragDistance) { Core.BeginDrag(Core.mouseDown); } } if (Core.IsDragging) { if (!isDragging) { isDragging = true; Debug.WriteLine("IsDragging = " + isDragging); cursorBefore = Cursor; Cursor = Cursors.SizeAll; Mouse.Capture(this); } if (BoundsOfMap.HasValue && !BoundsOfMap.Value.Contains(Position)) { // ... } else { Point p = e.GetPosition(this); if (MapScaleTransform != null) { p = MapScaleTransform.Inverse.Transform(p); } p = ApplyRotationInversion(p.X, p.Y); Core.mouseCurrent.X = (int)p.X; Core.mouseCurrent.Y = (int)p.Y; { Core.Drag(Core.mouseCurrent); } if (IsRotated || scaleMode != ScaleModes.Integer) { ForceUpdateOverlays(); } else { UpdateMarkersOffset(); } } InvalidateVisual(true); } else { if (isSelected && !selectionStart.IsEmpty && (Keyboard.Modifiers == ModifierKeys.Shift || Keyboard.Modifiers == ModifierKeys.Alt || DisableAltForSelection)) { System.Windows.Point p = e.GetPosition(this); selectionEnd = FromLocalToLatLng((int)p.X, (int)p.Y); { PointLatLng p1 = selectionStart; PointLatLng p2 = selectionEnd; double x1 = Math.Min(p1.Lng, p2.Lng); double y1 = Math.Max(p1.Lat, p2.Lat); double x2 = Math.Max(p1.Lng, p2.Lng); double y2 = Math.Min(p1.Lat, p2.Lat); SelectedArea = new RectLatLng(y1, x1, x2 - x1, y1 - y2); } } if (renderHelperLine) { InvalidateVisual(true); } } }