web: a film sim is colour and tone only
The ten PHOTO STYLE sims now carry nothing but their stock's own grade, and each is named for the stock it stands for: PROVIA, VELVIA, CLASSIC CHROME, CLASSIC VIVID (Velvia spliced with Classic Chrome at the blue row), CLASSIC NEGATIVE, ASTIA, ETERNA, ACROS, LC STREETLIFE CLASSIC, LC STREETLIFE VIVID. Grain, clarity, saturation and light moves were dropped from their `adjustments`, so a sim is a clean starting point and the general knobs read their defaults while the look still lands on the pixels. LC STREETLIFE VIVID keeps the one brightness step its stock needs, but as SIM_EXPOSURE_BIAS in colorUtils rather than as an adjustment: it is folded in where the Exposure slider applies, so the picture gets the lift and the parameter stays at 0. Also in this checkpoint: the watermark/GPS boxes and their colour pickers, the WATERMARK chip column, the real admin stats, and the fix that stopped presets from doubling and a frame from refusing to come off when a photo was reopened (/file is the finished render, /base the editable pixels).
This commit is contained in:
@@ -36,9 +36,10 @@ export function TopBar({
|
||||
onSavePhoto: () => void;
|
||||
onExport: () => void;
|
||||
// This account's own folder: the SAVE PHOTO button states the count, and the
|
||||
// API refuses past the cap. A guest sees 0/12 and is sent to sign in.
|
||||
// API refuses past the cap. A guest sees 0/12 and is sent to sign in. null is
|
||||
// the admin, who the API lets past the cap — the button then just counts.
|
||||
photoCount: number;
|
||||
photoMax: number;
|
||||
photoMax: number | null;
|
||||
onAuth: () => void;
|
||||
onSignup: () => void;
|
||||
onLogout: () => void;
|
||||
@@ -97,10 +98,16 @@ export function TopBar({
|
||||
className="btn ghost"
|
||||
data-key="save-photo"
|
||||
disabled={savingPhoto || exporting}
|
||||
title={photoCount >= photoMax ? t('save.photoFull', { max: photoMax }) : undefined}
|
||||
title={
|
||||
photoMax !== null && photoCount >= photoMax ? t('save.photoFull', { max: photoMax }) : undefined
|
||||
}
|
||||
onClick={onSavePhoto}
|
||||
>
|
||||
{savingPhoto ? t('photo.uploading') : t('save.photo', { n: photoCount, max: photoMax })}
|
||||
{savingPhoto
|
||||
? t('photo.uploading')
|
||||
: photoMax === null
|
||||
? t('save.photoNoMax', { n: photoCount })
|
||||
: t('save.photo', { n: photoCount, max: photoMax })}
|
||||
</button>
|
||||
<button type="button" className="btn primary" disabled={exporting} onClick={onExport}>
|
||||
{exporting ? t('act.exporting') : t('act.export')}
|
||||
|
||||
Reference in New Issue
Block a user