Browse Source

Only show tooltip when pointer still over control.

Make sure the pointer is still over the control when the timer fires to show a tooltip.
pull/1061/head
Steven Kirk 9 years ago
parent
commit
6c96f69061
  1. 30
      src/Avalonia.Controls/ToolTip.cs

30
src/Avalonia.Controls/ToolTip.cs

@ -106,24 +106,28 @@ namespace Avalonia.Controls
if (control != null && control.IsVisible && control.GetVisualRoot() != null) if (control != null && control.IsVisible && control.GetVisualRoot() != null)
{ {
var cp = (control.GetVisualRoot() as IInputRoot)?.MouseDevice?.GetPosition(control); var cp = (control.GetVisualRoot() as IInputRoot)?.MouseDevice?.GetPosition(control);
var position = control.PointToScreen(cp ?? new Point(0, 0)) + new Vector(0, 22);
if (s_popup == null) if (cp.HasValue && control.IsVisible && new Rect(control.Bounds.Size).Contains(cp.Value))
{ {
s_popup = new PopupRoot(); var position = control.PointToScreen(cp.Value) + new Vector(0, 22);
s_popup.Content = new ToolTip();
} if (s_popup == null)
else {
{ s_popup = new PopupRoot();
((ISetLogicalParent)s_popup).SetParent(null); s_popup.Content = new ToolTip();
} }
else
{
((ISetLogicalParent)s_popup).SetParent(null);
}
((ISetLogicalParent)s_popup).SetParent(control); ((ISetLogicalParent)s_popup).SetParent(control);
((ToolTip)s_popup.Content).Content = GetTip(control); ((ToolTip)s_popup.Content).Content = GetTip(control);
s_popup.Position = position; s_popup.Position = position;
s_popup.Show(); s_popup.Show();
s_current = control; s_current = control;
}
} }
} }

Loading…
Cancel
Save