FX vignetting, LIGHT vibrance/saturation, reticle unlock

- FX: new VIGNETTING 0-10 control (chip + slider). Darkens the four
  corners of the photo with a radial gradient whose radius is the photo
  diagonal/2, so the falloff stays circular on any aspect. Applied in
  preview (camera overlay, polaroid/wall window, plain library) and in
  exportEngine pass 6b, always on the picture, never on the mat.
- LIGHT: new VIBRANCE -10..+10 (chroma-masked saturation in the tone
  shader: vivid pixels move least). Renamed the existing saturation
  control chip from COLOR to SATURATION - same param, clearer label.
- Fix: <Shader> takes a RuntimeEffect, not a gradient SkShader; the
  preview vignette threw "Object is not a HostObject" when it got one.
  Use the declarative <RadialGradient> child on the Rect instead.
- Preview: drop the "AE/AF LOCKED - TAP TO UNLOCK" banner; the lock
  reticle is now itself the unlock touch target.
This commit is contained in:
2026-09-10 10:22:55 +07:00
parent d7a8e0681e
commit 65d0850317
5 changed files with 121 additions and 26 deletions
+23 -1
View File
@@ -60,7 +60,7 @@ export const PARAM_DEFS: {
},
{
key: 'color',
label: 'COLOR',
label: 'SATURATION',
min: -10,
max: 10,
step: 1,
@@ -69,6 +69,17 @@ export const PARAM_DEFS: {
get: (a) => a.saturation,
set: (v) => ({ saturation: v }),
},
{
key: 'vibrance',
label: 'VIBRANCE',
min: -10,
max: 10,
step: 1,
defaultValue: 0,
display: sign,
get: (a) => a.vibrance ?? 0,
set: (v) => ({ vibrance: v }),
},
{
key: 'highlight',
label: 'HIGHLIGHT',
@@ -172,5 +183,16 @@ export const PARAM_DEFS: {
get: (a) => a.hdf ?? 0,
set: (v) => ({ hdf: v }),
},
{
key: 'vignette',
label: 'VIGNETTING',
min: 0,
max: 10,
step: 1,
defaultValue: 0,
display: String,
get: (a) => a.vignette ?? 0,
set: (v) => ({ vignette: v }),
},
],
};