feat: add non-destructive adjustment layers
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { FolderSimple, ImageBroken } from "@phosphor-icons/react";
|
||||
import { FolderSimple, ImageBroken, SlidersHorizontal } from "@phosphor-icons/react";
|
||||
import type { LayerThumbnailModel, RasterThumbnailModel } from "./thumbnailModel";
|
||||
|
||||
export function LayerThumbnail({ model, label, compact = false }: { model: LayerThumbnailModel; label: string; compact?: boolean }) {
|
||||
@@ -15,6 +15,7 @@ export function LayerThumbnail({ model, label, compact = false }: { model: Layer
|
||||
</>
|
||||
) : null}
|
||||
{model.kind === "empty" ? <ImageBroken size={compact ? 14 : 17} className="text-white/35" /> : null}
|
||||
{model.kind === "adjustment" ? <SlidersHorizontal size={compact ? 14 : 17} className="text-violet-200" /> : null}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ export type RasterThumbnailModel = {
|
||||
|
||||
export type LayerThumbnailModel =
|
||||
| RasterThumbnailModel
|
||||
| { kind: "adjustment" }
|
||||
| { kind: "group"; previews: readonly RasterThumbnailModel[] }
|
||||
| { kind: "empty" };
|
||||
|
||||
@@ -23,6 +24,7 @@ export function resolveLayerThumbnail(
|
||||
assetById: ReadonlyMap<AssetId, Asset>,
|
||||
excludedLayerIds: ReadonlySet<LayerId> = new Set(),
|
||||
): LayerThumbnailModel {
|
||||
if (layer.type === "adjustment") return { kind: "adjustment" };
|
||||
if (layer.type !== "group") return resolveRasterThumbnail(layer, assetById) ?? { kind: "empty" };
|
||||
|
||||
const previews: RasterThumbnailModel[] = [];
|
||||
@@ -56,6 +58,7 @@ export function createLayerThumbnailIndex(
|
||||
const { layer } = frame;
|
||||
if (frame.visited || layer.type !== "group") {
|
||||
if (layer.type !== "group") {
|
||||
if (layer.type === "adjustment") { result.set(layer.id, { kind: "adjustment" }); continue; }
|
||||
result.set(layer.id, resolveRasterThumbnail(layer, assetById) ?? { kind: "empty" });
|
||||
continue;
|
||||
}
|
||||
@@ -80,6 +83,7 @@ export function createLayerThumbnailIndex(
|
||||
}
|
||||
|
||||
function resolveRasterThumbnail(layer: Exclude<Layer, { type: "group" }>, assetById: ReadonlyMap<AssetId, Asset>): RasterThumbnailModel | undefined {
|
||||
if (layer.type === "adjustment") return undefined;
|
||||
const asset = assetById.get(layer.assetId);
|
||||
if (!asset || !asset.source.trim() || !positiveFinite(asset.intrinsicSize.w) || !positiveFinite(asset.intrinsicSize.h)) return undefined;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user