|
|
@ -30,24 +30,34 @@ namespace ICSharpCode.AvalonEdit.Rendering |
|
|
|
this.target = target; |
|
|
|
this.target = target; |
|
|
|
this.target.MouseLeave += MouseHoverLogicMouseLeave; |
|
|
|
this.target.MouseLeave += MouseHoverLogicMouseLeave; |
|
|
|
this.target.MouseMove += MouseHoverLogicMouseMove; |
|
|
|
this.target.MouseMove += MouseHoverLogicMouseMove; |
|
|
|
|
|
|
|
this.target.MouseEnter += MouseHoverLogicMouseEnter; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void MouseHoverLogicMouseMove(object sender, MouseEventArgs e) |
|
|
|
void MouseHoverLogicMouseMove(object sender, MouseEventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Point newPosition = e.GetPosition(this.target); |
|
|
|
Vector mouseMovement = mouseHoverStartPoint - e.GetPosition(this.target); |
|
|
|
Vector mouseMovement = mouseHoverStartPoint - newPosition; |
|
|
|
|
|
|
|
if (Math.Abs(mouseMovement.X) > SystemParameters.MouseHoverWidth |
|
|
|
if (Math.Abs(mouseMovement.X) > SystemParameters.MouseHoverWidth |
|
|
|
|| Math.Abs(mouseMovement.Y) > SystemParameters.MouseHoverHeight) |
|
|
|
|| Math.Abs(mouseMovement.Y) > SystemParameters.MouseHoverHeight) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
StartHovering(e); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// do not set e.Handled - allow others to also handle MouseMove
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MouseHoverLogicMouseEnter(object sender, MouseEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
StartHovering(e); |
|
|
|
|
|
|
|
// do not set e.Handled - allow others to also handle MouseEnter
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void StartHovering(MouseEventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
|
StopHovering(); |
|
|
|
StopHovering(); |
|
|
|
mouseHoverStartPoint = newPosition; |
|
|
|
mouseHoverStartPoint = e.GetPosition(this.target); |
|
|
|
mouseHoverLastEventArgs = e; |
|
|
|
mouseHoverLastEventArgs = e; |
|
|
|
mouseHoverTimer = new DispatcherTimer(SystemParameters.MouseHoverTime, DispatcherPriority.Background, |
|
|
|
mouseHoverTimer = new DispatcherTimer(SystemParameters.MouseHoverTime, DispatcherPriority.Background, OnMouseHoverTimerElapsed, this.target.Dispatcher); |
|
|
|
OnMouseHoverTimerElapsed, this.target.Dispatcher); |
|
|
|
|
|
|
|
mouseHoverTimer.Start(); |
|
|
|
mouseHoverTimer.Start(); |
|
|
|
} |
|
|
|
} |
|
|
|
// do not set e.Handled - allow others to also handle MouseMove
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MouseHoverLogicMouseLeave(object sender, MouseEventArgs e) |
|
|
|
void MouseHoverLogicMouseLeave(object sender, MouseEventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -116,6 +126,7 @@ namespace ICSharpCode.AvalonEdit.Rendering |
|
|
|
if (!disposed) { |
|
|
|
if (!disposed) { |
|
|
|
this.target.MouseLeave -= MouseHoverLogicMouseLeave; |
|
|
|
this.target.MouseLeave -= MouseHoverLogicMouseLeave; |
|
|
|
this.target.MouseMove -= MouseHoverLogicMouseMove; |
|
|
|
this.target.MouseMove -= MouseHoverLogicMouseMove; |
|
|
|
|
|
|
|
this.target.MouseEnter -= MouseHoverLogicMouseEnter; |
|
|
|
} |
|
|
|
} |
|
|
|
disposed = true; |
|
|
|
disposed = true; |
|
|
|
} |
|
|
|
} |
|
|
|