1
- import { useRef , useEffect , forwardRef , useState } from 'react' ;
2
- import { Canvas , Image , IText , PencilBrush , filters } from 'fabric' ;
1
+ import { useEffect , useState } from 'react' ;
2
+ import { Image , IText , filters } from 'fabric' ;
3
3
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' ;
4
- import './App.css' ;
5
-
6
- const EditorCanvas = forwardRef ( ( { canvas, setCurrentFilter } , ref ) => {
7
-
8
- useEffect ( ( ) => {
9
- if ( ! canvas ) return ;
10
-
11
- function handlekeyPress ( e ) {
12
- if ( e . key === 'Delete' ) {
13
- for ( const obj of canvas . getActiveObjects ( ) ) {
14
- canvas . remove ( obj ) ;
15
- canvas . discardActiveObject ( ) ;
16
- }
17
- }
18
- }
19
-
20
- function handleSelection ( e ) {
21
- const obj = e ?. selected ?. length === 1 ? e . selected [ 0 ] : null ;
22
- const filter = obj ?. filters ?. at ( 0 ) ;
23
- console . log ( filter ) ;
24
- setCurrentFilter ( filter ? filter . type . toLowerCase ( ) : null ) ;
25
- }
26
-
27
- document . addEventListener ( 'keydown' , handlekeyPress , false ) ;
28
- canvas . on ( {
29
- 'selection:created' : handleSelection ,
30
- 'selection:updated' : handleSelection ,
31
- 'selection:cleared' : handleSelection
32
- } ) ;
33
-
34
- return ( ) => {
35
- document . removeEventListener ( 'keydown' , handlekeyPress , false ) ;
36
- canvas . off ( {
37
- 'selection:created' : handleSelection ,
38
- 'selection:updated' : handleSelection ,
39
- 'selection:cleared' : handleSelection
40
- } ) ;
41
- }
42
-
43
- } , [ canvas , setCurrentFilter ] ) ;
44
-
45
- return (
46
- < div className = "canvasbox" >
47
- < canvas ref = { ref } > </ canvas >
48
- </ div >
49
- ) ;
50
- } ) ;
51
-
4
+ console . log ( filters ) ;
52
5
const Toolbox = ( { canvas, currentFilter, setCurrentFilter } ) => {
53
6
const [ drawingMode , setDrawingMode ] = useState ( false ) ;
54
7
@@ -61,10 +14,14 @@ const Toolbox = ({ canvas, currentFilter, setCurrentFilter }) => {
61
14
switch ( currentFilter ) {
62
15
case 'sepia' :
63
16
return new filters . Sepia ( ) ;
64
- case 'blur ' :
65
- return new filters . Blur ( { blur : 0.2 } ) ;
17
+ case 'vintage ' :
18
+ return new filters . Vintage ( ) ;
66
19
case 'invert' :
67
20
return new filters . Invert ( ) ;
21
+ case 'polaroid' :
22
+ return new filters . Polaroid ( ) ;
23
+ case 'grayscale' :
24
+ return new filters . Grayscale ( ) ;
68
25
default :
69
26
return null ;
70
27
}
@@ -144,9 +101,11 @@ const Toolbox = ({ canvas, currentFilter, setCurrentFilter }) => {
144
101
</ button >
145
102
{ currentFilter &&
146
103
< select onChange = { ( e ) => setCurrentFilter ( e . target . value ) } value = { currentFilter } >
147
- < option value = "blur" > Blur</ option >
148
104
< option value = "sepia" > Sepia</ option >
105
+ < option value = "vintage" > Vintage</ option >
149
106
< option value = "invert" > Invert</ option >
107
+ < option value = "polaroid" > Polaroid</ option >
108
+ < option value = "grayscale" > Grayscale</ option >
150
109
</ select >
151
110
}
152
111
< button title = "Clear all" onClick = { clearAll } >
@@ -159,30 +118,4 @@ const Toolbox = ({ canvas, currentFilter, setCurrentFilter }) => {
159
118
) ;
160
119
} ;
161
120
162
- function App ( ) {
163
- const canvasRef = useRef ( null ) ;
164
- const [ canvas , setCanvas ] = useState ( null ) ;
165
- const [ currentFilter , setCurrentFilter ] = useState ( null ) ;
166
-
167
- useEffect ( ( ) => {
168
- const c = new Canvas ( canvasRef . current , { backgroundColor : 'white' } ) ;
169
- c . setDimensions ( { width : 1000 , height : 500 } ) ;
170
- const brush = new PencilBrush ( c ) ;
171
- brush . color = 'black' ;
172
- brush . width = 4 ;
173
- c . freeDrawingBrush = brush ;
174
- setCanvas ( c ) ;
175
-
176
- return ( ) => c . dispose ( ) ;
177
-
178
- } , [ canvasRef , setCanvas ] ) ;
179
-
180
- return (
181
- < div className = "editor" >
182
- < Toolbox canvas = { canvas } currentFilter = { currentFilter } setCurrentFilter = { setCurrentFilter } />
183
- < EditorCanvas ref = { canvasRef } canvas = { canvas } setCurrentFilter = { setCurrentFilter } />
184
- </ div >
185
- ) ;
186
- }
187
-
188
- export default App ;
121
+ export default Toolbox ;
0 commit comments