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);
|
var fillWidth = (int)(rect.Width * value);
|
||||||
if (fillWidth > 0)
|
if (fillWidth > 0)
|
||||||
{
|
{
|
||||||
|
var fillRadius = System.Math.Min(4, fillWidth / 2);
|
||||||
var fillRect = new Rectangle(rect.X, rect.Y, fillWidth, rect.Height);
|
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(
|
using var gradientBrush = new LinearGradientBrush(
|
||||||
new Point(rect.X, 0), new Point(rect.Right, 0),
|
new Point(rect.X, 0), new Point(rect.Right, 0),
|
||||||
LowColor, HighColor);
|
LowColor, HighColor);
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ namespace OpenNest.Controls
|
|||||||
|
|
||||||
var padding = 30;
|
var padding = 30;
|
||||||
var usableWidth = Width - padding * 2;
|
var usableWidth = Width - padding * 2;
|
||||||
var spacing = usableWidth / (count - 1);
|
var spacing = (float)usableWidth / (count - 1);
|
||||||
var circleY = 18;
|
var circleY = 18;
|
||||||
var normalRadius = 9;
|
var normalRadius = 9;
|
||||||
var activeRadius = 11;
|
var activeRadius = 11;
|
||||||
@@ -96,8 +96,8 @@ namespace OpenNest.Controls
|
|||||||
// Draw connecting lines
|
// Draw connecting lines
|
||||||
for (var i = 0; i < count - 1; i++)
|
for (var i = 0; i < count - 1; i++)
|
||||||
{
|
{
|
||||||
var x1 = padding + i * spacing;
|
var x1 = (int)(padding + i * spacing);
|
||||||
var x2 = padding + (i + 1) * spacing;
|
var x2 = (int)(padding + (i + 1) * spacing);
|
||||||
g.DrawLine(linePen, x1, circleY, x2, circleY);
|
g.DrawLine(linePen, x1, circleY, x2, circleY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ namespace OpenNest.Controls
|
|||||||
for (var i = 0; i < count; i++)
|
for (var i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
var phase = Phases[i];
|
var phase = Phases[i];
|
||||||
var cx = padding + i * spacing;
|
var cx = (int)(padding + i * spacing);
|
||||||
var isActive = activePhase == phase && !isComplete;
|
var isActive = activePhase == phase && !isComplete;
|
||||||
var isVisited = visitedPhases.Contains(phase) || isComplete;
|
var isVisited = visitedPhases.Contains(phase) || isComplete;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user