web: overlay a draggable histogram on the photo
The panel in Lightroom is a running read of the render, so this one reads the preview blob itself: one downscaled 320px canvas pass bins 256 values per channel, and four SVG paths draw them — the grey luma fill with the three channel curves screened over it, from absolute black to absolute white. Dragged by its header, clamped inside the photo, parked top-right on first paint, and dismissed either from its own frame or from the toolbar button. It steps aside while the crop frame is up.
This commit is contained in:
@@ -277,6 +277,41 @@ input[type="range"] { width: 100%; accent-color: var(--accent); }
|
||||
.crop-handle.tr { right: 0; top: 0; transform: translate(50%, -50%); cursor: nesw-resize; }
|
||||
.crop-handle.bl { left: 0; bottom: 0; transform: translate(-50%, 50%); cursor: nesw-resize; }
|
||||
.crop-handle.br { right: 0; bottom: 0; transform: translate(50%, 50%); cursor: nwse-resize; }
|
||||
/* Histogram overlay: a small translucent frame on the photo, dragged by its
|
||||
header. The luma curve is a grey fill behind the three channel curves, which
|
||||
screen over each other the way a Lightroom histogram reads. */
|
||||
.hist {
|
||||
position: absolute;
|
||||
z-index: 4;
|
||||
width: 236px;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-sm);
|
||||
background: color-mix(in srgb, var(--bg) 86%, transparent);
|
||||
backdrop-filter: blur(6px);
|
||||
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.35);
|
||||
user-select: none;
|
||||
touch-action: none;
|
||||
}
|
||||
.hist-head { display: flex; align-items: center; gap: 4px; padding: 3px 4px 3px 8px; cursor: grab; }
|
||||
.hist.dragging .hist-head { cursor: grabbing; }
|
||||
.hist-title { flex: 1 1 auto; font-size: 10px; letter-spacing: 0.08em; color: var(--text-dim); }
|
||||
.hist-close {
|
||||
width: 18px; height: 18px; padding: 0; line-height: 1;
|
||||
font-size: 13px; color: var(--text-dim);
|
||||
background: none; border: 0; border-radius: 4px; cursor: pointer;
|
||||
}
|
||||
.hist-close:hover { background: var(--bg-sunken); color: var(--text); }
|
||||
.hist-plot { display: block; width: 100%; height: 84px; }
|
||||
.hist-lum { fill: var(--text-dim); opacity: 0.38; }
|
||||
.hist-ch { fill: none; stroke-width: 1.1; mix-blend-mode: screen; }
|
||||
.hist-r { stroke: #ff5a5a; }
|
||||
.hist-g { stroke: #4ade80; }
|
||||
.hist-b { stroke: #5aa2ff; }
|
||||
.hist-axis {
|
||||
display: flex; justify-content: space-between;
|
||||
padding: 1px 6px 4px;
|
||||
font-family: var(--mono); font-size: 9px; color: var(--text-dim);
|
||||
}
|
||||
.busy {
|
||||
position: absolute;
|
||||
inset: auto 0 12px 0;
|
||||
|
||||
Reference in New Issue
Block a user