feat: show hover tooltip only after 1000ms of mouse stillness

Add a hoverTimer that restarts on each mouse move over a part.
Tooltip only renders after the timer fires, hiding while the
cursor is in motion.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-07 16:12:02 -04:00
parent 41c20eaf75
commit 30f1008fa9
+16 -1
View File
@@ -36,6 +36,8 @@ namespace OpenNest.Controls
private PlateRenderer renderer; private PlateRenderer renderer;
private LayoutPart hoveredPart; private LayoutPart hoveredPart;
private Point hoverPoint; private Point hoverPoint;
private bool showTooltip;
private Timer hoverTimer;
public Box ActiveWorkArea public Box ActiveWorkArea
{ {
@@ -99,6 +101,9 @@ namespace OpenNest.Controls
}; };
redrawTimer.Elapsed += redrawTimer_Elapsed; redrawTimer.Elapsed += redrawTimer_Elapsed;
hoverTimer = new Timer() { AutoReset = false, Interval = 1000 };
hoverTimer.Elapsed += (s, _) => { showTooltip = true; Invalidate(); };
SetStyle( SetStyle(
ControlStyles.AllPaintingInWmPaint | ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer | ControlStyles.OptimizedDoubleBuffer |
@@ -369,12 +374,22 @@ namespace OpenNest.Controls
if (hoveredPart != null) if (hoveredPart != null)
{ {
hoverPoint = e.Location; hoverPoint = e.Location;
showTooltip = false;
hoverTimer.Stop();
hoverTimer.Start();
Invalidate(); Invalidate();
} }
else
{
hoverTimer.Stop();
showTooltip = false;
}
} }
else if (hoveredPart != null) else if (hoveredPart != null)
{ {
hoveredPart = null; hoveredPart = null;
hoverTimer.Stop();
showTooltip = false;
Invalidate(); Invalidate();
} }
@@ -487,7 +502,7 @@ namespace OpenNest.Controls
base.OnPaint(e); base.OnPaint(e);
if (hoveredPart != null) if (hoveredPart != null && showTooltip)
{ {
e.Graphics.ResetTransform(); e.Graphics.ResetTransform();
var text = hoveredPart.BasePart.BaseDrawing.Name; var text = hoveredPart.BasePart.BaseDrawing.Name;