fix: enlarge every sub-2px stroker width to 2px, per Daniel's ruling

Knob track arc, inner-dial needle, and mini velocity-trace all sat below the analytic stroker's opaque-core floor. Raised to 2px; updated visual-design-language.md and core/ui/CLAUDE.md to match; kept the 1px-behavior test, corrected its stale comment.
This commit is contained in:
2026-08-01 15:11:58 -04:00
parent 07628a2059
commit 704b7ef373
5 changed files with 16 additions and 11 deletions
+6 -3
View File
@@ -113,11 +113,14 @@ inline void drawTitleBand(LICE_IBitmap* bmp, const instrument::ui::Rect& title,
}
// Stroke widths for the radial faces. Every arc is ONE analytic stroke (editor_stroke.h) whose
// outer edge sits on the knob's radius, so the centerline is inset by half the width.
inline constexpr float kKnobTrackArcPx = 1.0f;
// outer edge sits on the knob's radius, so the centerline is inset by half the width. Every
// width here is >= 2 px, the stroker's guaranteed-opaque-core floor (core/ui/CLAUDE.md) —
// anything narrower modulates peak alpha with pixel-grid alignment instead of pinning solid.
inline constexpr float kKnobTrackArcPx = 2.0f;
inline constexpr float kKnobValueArcPx = 3.0f;
inline constexpr float kInnerDialArcPx = 2.0f;
inline constexpr float kKnobNeedlePx = 2.0f;
inline constexpr float kInnerDialNeedlePx = 2.0f;
// Draws one radial knob face: param_slider owns the value<->angle map; this turns it into
// LICE calls. LICE takes radians, and drawing the 7->5 o'clock sweep through the top needs
@@ -198,7 +201,7 @@ inline void drawInnerDial(LICE_IBitmap* bmp, const instrument::ui::Rect& innerRe
toLice(ui::roleColor(arcRole)));
const KnobPoint tip = instrument::ui::knobNeedlePoint(kg, arc, v);
strokeLineAA(bmp, static_cast<float>(kg.centerX), static_cast<float>(kg.centerY),
static_cast<float>(tip.x), static_cast<float>(tip.y), 1.0f,
static_cast<float>(tip.x), static_cast<float>(tip.y), kInnerDialNeedlePx,
toLice(ui::roleColor(disabled ? ui::Role::TextDim : ui::Role::AccentTertiary)));
}
+3 -2
View File
@@ -19,8 +19,9 @@ using namespace reasampler::instrument::ui; // popup geometry
namespace {
// The deck thumbnail traces a hairline; the full editor matches the envelope traces' weight.
constexpr float kMiniTracePx = 1.0f;
// Both at the stroker's opaque-core floor (core/ui/CLAUDE.md) — below 2 px, peak alpha
// modulates with pixel-grid alignment instead of pinning solid.
constexpr float kMiniTracePx = 2.0f;
constexpr float kCurveTracePx = 2.0f;
const char* curveTitle(CurveTarget target) {