Give LITE the bundled recipes, three of its own, and its own mark
LITE used to hand back the RECIPESCAM mark instead of the user's own
watermark and treated every saved recipe as PRO. That is the wrong half of
the product: the looks the user dials in are the reason to shoot, the
printing and the paid extras are the reason to pay.
What LITE now owns outright: the eight film sims, the bundled recipes, up
to three recipes of its own, its own watermark text (in one basic face,
the platform families stay PRO), the plain frames, and FAVORITED. What
needs PRO: the three printed frames, the GPS stamp, the other fonts, and
the next recipe past the limit.
- entitlement: `Look` is {frame, gpsWm}; `isFreeRecipe` is gone, the
recipe gate is a count now, decided in App (`liteSaveBlocked`).
- export: a LITE export draws the custom mark AND the RECIPESCAM mark, so
`liteMark` joins `watermark` in the options and the stamp block loops
over both with one set of bounds.
- panel: past the limit the strip's trailing chip is a `+` carrying the
PRO tag, which names the build instead of opening the form.
This commit is contained in:
+13
-15
@@ -10,27 +10,27 @@ import { IS_PRO_BUILD } from '../provariant';
|
||||
// code the bundler is free to drop.
|
||||
export const IS_PRO = IS_PRO_BUILD;
|
||||
|
||||
// The gate is on the FILE, not on the preview: a LITE user may pick any preset,
|
||||
// frame or watermark, compose with it and compare before/after — only the
|
||||
// render/export of that look is held back, and every LITE export carries the
|
||||
// mark below.
|
||||
// The gate is on the FILE, not on the preview: a LITE user composes with any
|
||||
// look and compares it before/after — only the render/export of a PRO look is
|
||||
// held back, and every LITE export carries the mark below.
|
||||
//
|
||||
// What LITE owns outright: the eight film sims, the bundled recipes, its own
|
||||
// recipes up to LITE_RECIPE_LIMIT, its own watermark text (in one face), the
|
||||
// plain frames and every parameter. What needs PRO: the three printed frames,
|
||||
// the GPS stamp, the platform's other fonts, and the next recipe past the
|
||||
// limit.
|
||||
|
||||
// Frames on the LITE side: the plain export only. The three printed looks are
|
||||
// PRO (the artwork/card geometry is the paid half of the FRAME tab).
|
||||
export const PRO_FRAMES: FrameId[] = ['classic-white', 'polaroid', 'wallframe'];
|
||||
|
||||
// Presets: the eight film SIMS are free (a base-filter matrix is the camera's
|
||||
// own look); a saved RECIPE — bundled or user-created — is a dialled-in look
|
||||
// and belongs to PRO. Ids are `sim-*` for sims, anything else for recipes.
|
||||
export const isFreeRecipe = (id: string | null | undefined): boolean =>
|
||||
!id || id.startsWith('sim-');
|
||||
|
||||
// LITE may store its own recipes, up to this many: creating and editing them is
|
||||
// free, deleting one is PRO — so a LITE list only ever grows to this size.
|
||||
export const LITE_RECIPE_LIMIT = 3;
|
||||
|
||||
// Burned into every LITE export, bottom-right of the photo/frame area. Fractions
|
||||
// of the stamp canvas, same space the custom mark uses.
|
||||
// of the stamp canvas, same space the custom mark uses. The user's own mark is
|
||||
// free on top of it.
|
||||
export const LITE_MARK = {
|
||||
text: 'RECIPESCAM',
|
||||
x: 0.55,
|
||||
@@ -40,16 +40,14 @@ export const LITE_MARK = {
|
||||
};
|
||||
|
||||
export interface Look {
|
||||
recipeId?: string | null;
|
||||
frame: FrameId;
|
||||
customWm: boolean;
|
||||
gpsWm: boolean;
|
||||
}
|
||||
|
||||
// The first PRO feature a look is using, or null when it is LITE-clean. One
|
||||
// string, so the caller can name it back to the user in the alert.
|
||||
export function proLookInUse(look: Look): string | null {
|
||||
if (!isFreeRecipe(look.recipeId)) return 'A PRO preset';
|
||||
if (PRO_FRAMES.includes(look.frame)) return 'A PRO frame';
|
||||
if (look.customWm) return 'The custom watermark';
|
||||
if (look.gpsWm) return 'The GPS watermark';
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user