Region blur becomes a fixed-set dropdown (2/4/6/8/10, default 6)

Non-integer blur radii broke the rendering (the log slider mapped to
fractional values), so the control is now integer-only by design:
REGION_BLUR_OPTIONS with snap-to-nearest sanitization for any input,
same law as the bitmap resolution. The old off zone (blur 0) is gone;
stored 0s snap back into the set.
This commit is contained in:
amosblomqvist
2026-09-14 03:03:04 +03:00
parent 04a0236c36
commit b42fdbec1e
4 changed files with 61 additions and 38 deletions
+3 -3
View File
@@ -150,15 +150,15 @@ describe("sanitizeRegionTuning (dev number inputs)", () => {
test("defaults survive untouched; partial input keeps the rest", () => {
const t = sanitizeRegionTuning(undefined);
assert.deepEqual(t, DEFAULT_REGION_TUNING);
const half = sanitizeRegionTuning({ blur: 0 });
assert.equal(half.blur, 0);
const half = sanitizeRegionTuning({ blur: 7.2 });
assert.equal(half.blur, 8); // snaps into the fixed set
assert.equal(half.dilation, DEFAULT_REGION_TUNING.dilation);
});
test("garbage clamps: NaN falls back, out-of-range clamps", () => {
const t = sanitizeRegionTuning({ dilation: Number.NaN, blur: -5, bitmap: 99999, edgeAlpha: 42 });
assert.equal(t.dilation, DEFAULT_REGION_TUNING.dilation); // NaN -> default
assert.equal(t.blur, 0);
assert.equal(t.blur, 2); // snaps into the fixed set
assert.equal(t.bitmap, REGION_BITMAP_OPTIONS[REGION_BITMAP_OPTIONS.length - 1]); // 99999 snaps to the largest option
assert.equal(t.edgeAlpha, 1);
});