fix(ui): handle edge cases in DensityBar and PhaseStepperControl
DensityBar: clamp rounded rect radius for small fill widths to avoid GDI+ artifacts at very low density values. PhaseStepperControl: use float arithmetic for circle spacing to handle DPI-scaled widths evenly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -46,8 +46,9 @@ namespace OpenNest.Controls
|
||||
var fillWidth = (int)(rect.Width * value);
|
||||
if (fillWidth > 0)
|
||||
{
|
||||
var fillRadius = System.Math.Min(4, fillWidth / 2);
|
||||
var fillRect = new Rectangle(rect.X, rect.Y, fillWidth, rect.Height);
|
||||
using var fillPath = CreateRoundedRect(fillRect, 4);
|
||||
using var fillPath = CreateRoundedRect(fillRect, fillRadius);
|
||||
using var gradientBrush = new LinearGradientBrush(
|
||||
new Point(rect.X, 0), new Point(rect.Right, 0),
|
||||
LowColor, HighColor);
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace OpenNest.Controls
|
||||
|
||||
var padding = 30;
|
||||
var usableWidth = Width - padding * 2;
|
||||
var spacing = usableWidth / (count - 1);
|
||||
var spacing = (float)usableWidth / (count - 1);
|
||||
var circleY = 18;
|
||||
var normalRadius = 9;
|
||||
var activeRadius = 11;
|
||||
@@ -96,8 +96,8 @@ namespace OpenNest.Controls
|
||||
// Draw connecting lines
|
||||
for (var i = 0; i < count - 1; i++)
|
||||
{
|
||||
var x1 = padding + i * spacing;
|
||||
var x2 = padding + (i + 1) * spacing;
|
||||
var x1 = (int)(padding + i * spacing);
|
||||
var x2 = (int)(padding + (i + 1) * spacing);
|
||||
g.DrawLine(linePen, x1, circleY, x2, circleY);
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace OpenNest.Controls
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
var phase = Phases[i];
|
||||
var cx = padding + i * spacing;
|
||||
var cx = (int)(padding + i * spacing);
|
||||
var isActive = activePhase == phase && !isComplete;
|
||||
var isVisited = visitedPhases.Contains(phase) || isComplete;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user