@@ -8,13 +8,14 @@ import Sidebar from "./components/Sidebar";
8
8
import Canvas from "./components/Canvas" ;
9
9
import Menu from "./components/Menu" ;
10
10
import EraserCursor from "./components/EraserCursor" ;
11
- import { useRecoilValue } from "recoil" ;
12
- import { eraserState } from "./atoms" ;
11
+ import { useRecoilValue , useRecoilState } from "recoil" ;
12
+ import { eraserState , cursorPosition } from "./atoms" ;
13
13
14
14
function App ( ) {
15
15
16
16
const [ showMenu , setShowMenu ] = useState ( false ) ;
17
17
const eraserMode = useRecoilValue ( eraserState ) ;
18
+ const [ position , setPosition ] = useRecoilState ( cursorPosition ) ;
18
19
19
20
function toggleMenu ( ) {
20
21
setShowMenu ( ! showMenu ) ;
@@ -36,21 +37,27 @@ function App() {
36
37
ctx . stroke ( ) ;
37
38
}
38
39
39
- useEffect ( ( ) => {
40
+ useEffect ( ( ) => {
40
41
canvas = canvasRef . current ;
41
42
let isDrawing = false ;
42
43
let startX = 0 ;
43
44
let startY = 0 ;
44
- ctx = canvas . getContext ( "2d" ) ;
45
45
46
+ ctx = canvas . getContext ( "2d" ) ;
46
47
canvas . width = canvas . getBoundingClientRect ( ) . width ;
47
48
canvas . height = canvas . getBoundingClientRect ( ) . height ;
48
49
49
50
function handleMousemove ( e ) {
51
+
52
+ // if eraseMode is set the position of the eraser cursor
53
+ if ( eraserMode ) {
54
+ setPosition ( ( ) => ( { x : e . clientX , y : e . clientY } ) ) ;
55
+ }
56
+
50
57
if ( ! isDrawing ) return ;
51
58
const endX = e . clientX - canvas . getBoundingClientRect ( ) . left ;
52
59
const endY = e . clientY - canvas . getBoundingClientRect ( ) . top ;
53
- drawLine ( startX , startY , endX , endY , color ) ;
60
+ drawLine ( startX , startY , endX , endY , color ) ;
54
61
socket . emit ( "draw" , { startX, startY, endX, endY, color, lineWidth } ) ;
55
62
startX = endX ;
56
63
startY = endY ;
@@ -77,7 +84,7 @@ function App() {
77
84
canvas . removeEventListener ( "mousedown" , handleMousedown ) ;
78
85
canvas . removeEventListener ( "mouseup" , handleMouseup ) ;
79
86
} ;
80
- } , [ color ] ) ;
87
+ } , [ color , eraserMode , position ] ) ;
81
88
82
89
useEffect ( ( ) => {
83
90
socket . on ( "draw" , ( data ) => {
@@ -130,16 +137,15 @@ function App() {
130
137
< div id = "container" >
131
138
< Sidebar
132
139
addStroke = { addStroke }
133
-
134
140
addLineWidth = { addLineWidth }
135
141
clearOnClick = { clearOnClick }
136
142
ref = { sidebarRef }
137
143
id = "clear"
138
144
toggleMenu = { toggleMenu }
139
145
> </ Sidebar >
140
146
< Canvas canvasRef = { canvasRef } > </ Canvas >
141
- { showMenu && < Menu > </ Menu > }
142
147
{ eraserMode && < EraserCursor > </ EraserCursor > }
148
+ { showMenu && < Menu > </ Menu > }
143
149
</ div >
144
150
) ;
145
151
}
0 commit comments