in src/MiddleClickScroll/MiddleClickScroll.cs [76:128]
public override void PreprocessMouseDown(MouseButtonEventArgs e)
{
if (_location.HasValue)
{
//The user didn't move enough so we didn't stop scrolling when they released the mouse.
//Release it now (on any mouse down).
this.StopScrolling();
e.Handled = true;
}
else if (e.ChangedButton == System.Windows.Input.MouseButton.Middle)
{
if ((!_view.IsClosed) && _view.VisualElement.IsVisible)
{
if (_view.VisualElement.CaptureMouse())
{
_oldCursor = _view.VisualElement.Cursor;
_view.VisualElement.Cursor = Cursors.ScrollAll;
Point position = e.GetPosition(_view.VisualElement);
_location = _view.VisualElement.PointToScreen(position);
if (_zeroPointImage == null)
{ //IMAGE_CURSOR LR_CREATEDDIBSECTION LR_SHARED
IntPtr hScrollAllCursor = User32.LoadImage(IntPtr.Zero, new IntPtr(32512 + 142), (uint)2, 0, 0, (uint)(0x00002000 | 0x00008000));
BitmapSource source = Imaging.CreateBitmapSourceFromHIcon(hScrollAllCursor, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
source.Freeze();
_zeroPointImage = new Image();
_zeroPointImage.Source = source;
_zeroPointImage.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
_zeroPointImage.Opacity = 0.5;
}
Canvas.SetLeft(_zeroPointImage, _view.ViewportLeft + position.X - _zeroPointImage.DesiredSize.Width * 0.5);
Canvas.SetTop(_zeroPointImage, _view.ViewportTop + position.Y - _zeroPointImage.DesiredSize.Height * 0.5);
_layer.AddAdornment(AdornmentPositioningBehavior.ViewportRelative, null, null, _zeroPointImage, null);
_lastMoveTime = DateTime.Now;
Debug.Assert(_moveTimer == null);
_moveTimer = new DispatcherTimer(new TimeSpan(0, 0, 0, 0, (int)minTime), DispatcherPriority.Normal, OnTimerElapsed, _view.VisualElement.Dispatcher);
_dismissOnMouseUp = false;
e.Handled = true;
}
}
}
}