{
event.preventDefault();
event.currentTarget.setPointerCapture(event.pointerId);
@@ -1258,25 +1281,20 @@ function SwipeDivider() {
}
}}
>
-
+ {/* No shadow: anything bleeding out of the bar would tint the pixels on
+ both sides, which are the ones being compared. */}
+
{/* Sibling of the bar rather than a child, so dragging it does not also
- bubble into the bar's horizontal-only drag. */}
+ bubble into the bar's horizontal-only drag. The box itself is
+ transparent: only the two chevrons flanking the bar are drawn, so
+ nothing covers the pixels being compared. */}
{
event.preventDefault();
event.currentTarget.setPointerCapture(event.pointerId);
@@ -1288,9 +1306,8 @@ function SwipeDivider() {
}
}}
>
-
+
+
);
diff --git a/apps/frontend/src/containers/Build/Zoomer.tsx b/apps/frontend/src/containers/Build/Zoomer.tsx
index 9b017327f..1e981f56b 100644
--- a/apps/frontend/src/containers/Build/Zoomer.tsx
+++ b/apps/frontend/src/containers/Build/Zoomer.tsx
@@ -55,6 +55,13 @@ const ZOOMER_CONTROLS_CLASS = "zoomer-controls";
*/
export const ZOOMER_OVERLAY_INTERACTIVE_CLASS = "zoomer-overlay-interactive";
+/**
+ * Overlays that handle the wheel themselves, typically because they scroll.
+ * Kept separate from {@link ZOOMER_OVERLAY_INTERACTIVE_CLASS}: an overlay can
+ * need to swallow drags without giving up zooming the screenshot under it.
+ */
+export const ZOOMER_OVERLAY_SCROLLABLE_CLASS = "zoomer-overlay-scrollable";
+
class Zoomer {
zoom: ZoomBehavior