From 3ff46ce72491d8c21e2eee59ff931481a69f8726 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Thu, 29 Dec 2022 16:50:05 -0800 Subject: [PATCH] Add hook for average color --- src/renderer/hooks/index.ts | 1 + src/renderer/hooks/use-fast-average-color.tsx | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 src/renderer/hooks/use-fast-average-color.tsx diff --git a/src/renderer/hooks/index.ts b/src/renderer/hooks/index.ts index 131e3819..d4370c64 100644 --- a/src/renderer/hooks/index.ts +++ b/src/renderer/hooks/index.ts @@ -2,3 +2,4 @@ export * from './use-theme'; export * from './use-is-mounted'; export * from './use-should-pad-titlebar'; export * from './use-container-query'; +export * from './use-fast-average-color'; diff --git a/src/renderer/hooks/use-fast-average-color.tsx b/src/renderer/hooks/use-fast-average-color.tsx new file mode 100644 index 00000000..ecbd121f --- /dev/null +++ b/src/renderer/hooks/use-fast-average-color.tsx @@ -0,0 +1,37 @@ +import { useEffect, useState } from 'react'; +import { FastAverageColor } from 'fast-average-color'; + +export const useFastAverageColor = ( + src?: string | null, + aglorithm?: 'dominant' | 'simple' | 'sqrt', +) => { + const [color, setColor] = useState('rgba(0, 0, 0, 0)'); + + useEffect(() => { + const fac = new FastAverageColor(); + + if (src) { + fac + .getColorAsync(src, { + algorithm: aglorithm || 'dominant', + ignoredColor: [ + [255, 255, 255, 255], // White + [0, 0, 0, 255], // Black + ], + mode: 'precision', + }) + .then((color) => { + return setColor(color.rgb); + }) + .catch((e) => { + console.log(e); + }); + } + + return () => { + fac.destroy(); + }; + }, [aglorithm, src]); + + return color; +};