diff --git a/src/CanvasTools.tsx b/src/CanvasTools.tsx
index 4a28860..d492976 100644
--- a/src/CanvasTools.tsx
+++ b/src/CanvasTools.tsx
@@ -67,6 +67,8 @@ export default function CanvasTools() {
setBrightness,
contrast,
setContrast,
+ opacity,
+ setOpacity,
layerMode,
setLayerMode,
activeCanvasType,
@@ -554,6 +556,31 @@ export default function CanvasTools() {
/>
+
+
+
+
+ {
+ if (Array.isArray(value)) {
+ value = value[0];
+ }
+ setOpacity(value / 100);
+ }}
+ />
+
+
diff --git a/src/ToolsProvider.tsx b/src/ToolsProvider.tsx
index bdfc23f..ed8acf4 100644
--- a/src/ToolsProvider.tsx
+++ b/src/ToolsProvider.tsx
@@ -42,6 +42,7 @@ type ObjectFilters = {
Saturation?: number;
Brightness?: number;
Contrast?: number;
+ Opacity?: number;
};
export default function ToolsProvider({ children }: { children: ReactNode }) {
@@ -171,6 +172,7 @@ export default function ToolsProvider({ children }: { children: ReactNode }) {
const getFilter = (
name: keyof ObjectFilters
): [number | null, (value: number) => void] => {
+ const defaultValue = name === "Opacity" ? 1 : 0;
let applyObjects = selectedObjects;
if (layerMode === "AllLayers") {
applyObjects = canvas?._objects ?? [];
@@ -182,7 +184,7 @@ export default function ToolsProvider({ children }: { children: ReactNode }) {
);
if (applyObjects.length) {
const getValue = (i: number) =>
- (filterMap.get(applyObjects[i]) ?? {})[name] ?? 0;
+ (filterMap.get(applyObjects[i]) ?? {})[name] ?? defaultValue;
const firstValue = getValue(0);
if (
applyObjects
@@ -193,7 +195,7 @@ export default function ToolsProvider({ children }: { children: ReactNode }) {
}
return [null, (value: number) => setFilter(name, value)];
} else {
- return [0, (value: number) => setFilter(name, value)];
+ return [defaultValue, (value: number) => setFilter(name, value)];
}
};
@@ -201,6 +203,7 @@ export default function ToolsProvider({ children }: { children: ReactNode }) {
const [saturation, setSaturation] = getFilter("Saturation");
const [brightness, setBrightness] = getFilter("Brightness");
const [contrast, setContrast] = getFilter("Contrast");
+ const [opacity, setOpacity] = getFilter("Opacity");
useEffect(() => {
if (!filterChanges.length) {
@@ -245,6 +248,9 @@ export default function ToolsProvider({ children }: { children: ReactNode }) {
})
);
break;
+ case "Opacity":
+ selectedObject.opacity = filterValue;
+ break;
}
}
}
@@ -575,6 +581,8 @@ export default function ToolsProvider({ children }: { children: ReactNode }) {
setBrightness,
contrast,
setContrast,
+ opacity,
+ setOpacity,
layerMode,
setLayerMode,
selectedObjects,
@@ -619,6 +627,8 @@ export default function ToolsProvider({ children }: { children: ReactNode }) {
setBrightness,
contrast,
setContrast,
+ opacity,
+ setOpacity,
layerMode,
selectedObjects,
lockSelection,
@@ -641,7 +651,6 @@ export default function ToolsProvider({ children }: { children: ReactNode }) {
hasAnimation,
frameCount,
sizeMultiplier,
- setSizeMultiplier,
selectedExportMaterials,
]
);
diff --git a/src/useTools.ts b/src/useTools.ts
index 5131898..f730b56 100644
--- a/src/useTools.ts
+++ b/src/useTools.ts
@@ -19,6 +19,8 @@ interface ToolsContextValue {
setBrightness: (brightness: number) => void;
contrast: number | null;
setContrast: (contrast: number) => void;
+ opacity: number | null;
+ setOpacity: (opacity: number) => void;
layerMode: string;
setLayerMode: (layerMode: string) => void;
deleteSelection: () => void;