Skip to content

Commit 563244a

Browse files
committed
test(renderer): cover clamped alpha composition
1 parent b5774b0 commit 563244a

4 files changed

Lines changed: 29 additions & 9 deletions

File tree

macos/assets/renderer-inject.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,9 @@
173173
if (!foreground) return background;
174174
const alpha = clamp(foreground.alpha ?? 1, 0, 1);
175175
return {
176-
r: foreground.r * alpha + background.r * (1 - alpha),
177-
g: foreground.g * alpha + background.g * (1 - alpha),
178-
b: foreground.b * alpha + background.b * (1 - alpha),
176+
r: clamp(foreground.r, 0, 255) * alpha + background.r * (1 - alpha),
177+
g: clamp(foreground.g, 0, 255) * alpha + background.g * (1 - alpha),
178+
b: clamp(foreground.b, 0, 255) * alpha + background.b * (1 - alpha),
179179
};
180180
};
181181

runtime/renderer-inject.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,9 @@
173173
if (!foreground) return background;
174174
const alpha = clamp(foreground.alpha ?? 1, 0, 1);
175175
return {
176-
r: foreground.r * alpha + background.r * (1 - alpha),
177-
g: foreground.g * alpha + background.g * (1 - alpha),
178-
b: foreground.b * alpha + background.b * (1 - alpha),
176+
r: clamp(foreground.r, 0, 255) * alpha + background.r * (1 - alpha),
177+
g: clamp(foreground.g, 0, 255) * alpha + background.g * (1 - alpha),
178+
b: clamp(foreground.b, 0, 255) * alpha + background.b * (1 - alpha),
179179
};
180180
};
181181

tools/renderer-runtime.test.mjs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,7 @@ export async function runRendererRuntimeTest(assetRoot) {
558558
{ accent: "#fff0", lightInk: "rgb(0 0 0)", darkInk: "rgb(255 255 255)" },
559559
{ accent: "#00000000", lightInk: "rgb(0 0 0)", darkInk: "rgb(255 255 255)" },
560560
{ accent: "rgba(255, 255, 255, 0.05)", lightInk: "rgb(0 0 0)", darkInk: "rgb(255 255 255)" },
561+
{ accent: "rgba(999, 999, 999, 0.1)", lightInk: "rgb(0 0 0)", darkInk: "rgb(255 255 255)" },
561562
];
562563
for (const nativeAppearance of ["light", "dark"]) {
563564
for (const { accent, lightInk, darkInk } of contrastCases) {
@@ -577,6 +578,25 @@ export async function runRendererRuntimeTest(assetRoot) {
577578
}
578579
}
579580

581+
for (const nativeAppearance of ["light", "dark"]) {
582+
const transparentSurfaces = makeFixture({ nativeAppearance });
583+
vm.runInNewContext(transparentSurfaces.payloadFor({
584+
appearance: "auto",
585+
colorMode: "explicit",
586+
explicitColorKeys: ["background", "panel", "accent"],
587+
colors: {
588+
background: "rgba(255, 255, 255, 0)",
589+
panel: "#0000",
590+
accent: "rgba(0, 0, 0, 0)",
591+
},
592+
}), transparentSurfaces.context);
593+
assert.equal(
594+
transparentSurfaces.rootStyle.values.get("--ds-on-accent"),
595+
nativeAppearance === "light" ? "rgb(0 0 0)" : "rgb(255 255 255)",
596+
`Transparent theme surfaces must fall back to the ${nativeAppearance} shell canvas`,
597+
);
598+
}
599+
580600
const adaptiveAccent = makeFixture({ nativeAppearance: "dark" });
581601
vm.runInNewContext(adaptiveAccent.payloadFor({
582602
colorMode: "explicit",

windows/assets/renderer-inject.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,9 @@
173173
if (!foreground) return background;
174174
const alpha = clamp(foreground.alpha ?? 1, 0, 1);
175175
return {
176-
r: foreground.r * alpha + background.r * (1 - alpha),
177-
g: foreground.g * alpha + background.g * (1 - alpha),
178-
b: foreground.b * alpha + background.b * (1 - alpha),
176+
r: clamp(foreground.r, 0, 255) * alpha + background.r * (1 - alpha),
177+
g: clamp(foreground.g, 0, 255) * alpha + background.g * (1 - alpha),
178+
b: clamp(foreground.b, 0, 255) * alpha + background.b * (1 - alpha),
179179
};
180180
};
181181

0 commit comments

Comments
 (0)