Browse Source

fix bug MouseHoverLogic to make it easier to show Diff-Tooltip in editor: start MouseHover already on MouseEnter

4.2
Siegfried Pammer 13 years ago committed by Daniel Grunwald
parent
commit
48fe7804ea
  1. 25
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/MouseHoverLogic.cs

25
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/MouseHoverLogic.cs

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

Loading…
Cancel
Save