Skip to content

Commit 12355fa

Browse files
committed
make eraser icon move when eraserMode
1 parent ec867da commit 12355fa

File tree

4 files changed

+40
-16
lines changed

4 files changed

+40
-16
lines changed

client/src/App.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@
77
height: 100%;
88
display: flex;
99
width: 100%;
10+
position: relative;
1011
}
1112

13+
.eraser-cursor{
14+
pointer-events: none;
15+
z-index: 1000;
16+
transform: translate(-50%, -50%);
17+
}
1218

1319

1420

client/src/App.jsx

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ import Sidebar from "./components/Sidebar";
88
import Canvas from "./components/Canvas";
99
import Menu from "./components/Menu";
1010
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";
1313

1414
function App() {
1515

1616
const [showMenu, setShowMenu ] = useState(false);
1717
const eraserMode = useRecoilValue(eraserState);
18+
const [position, setPosition] = useRecoilState(cursorPosition);
1819

1920
function toggleMenu(){
2021
setShowMenu(!showMenu);
@@ -36,21 +37,27 @@ function App() {
3637
ctx.stroke();
3738
}
3839

39-
useEffect(() => {
40+
useEffect(() => {
4041
canvas = canvasRef.current;
4142
let isDrawing = false;
4243
let startX = 0;
4344
let startY = 0;
44-
ctx = canvas.getContext("2d");
4545

46+
ctx = canvas.getContext("2d");
4647
canvas.width = canvas.getBoundingClientRect().width;
4748
canvas.height = canvas.getBoundingClientRect().height;
4849

4950
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+
5057
if (!isDrawing) return;
5158
const endX = e.clientX - canvas.getBoundingClientRect().left;
5259
const endY = e.clientY - canvas.getBoundingClientRect().top;
53-
drawLine(startX, startY, endX, endY, color );
60+
drawLine(startX, startY, endX, endY, color);
5461
socket.emit("draw", { startX, startY, endX, endY, color, lineWidth });
5562
startX = endX;
5663
startY = endY;
@@ -77,7 +84,7 @@ function App() {
7784
canvas.removeEventListener("mousedown", handleMousedown);
7885
canvas.removeEventListener("mouseup", handleMouseup);
7986
};
80-
}, [color]);
87+
}, [color, eraserMode, position]);
8188

8289
useEffect(() => {
8390
socket.on("draw", (data) => {
@@ -130,16 +137,15 @@ function App() {
130137
<div id="container">
131138
<Sidebar
132139
addStroke={addStroke}
133-
134140
addLineWidth={addLineWidth}
135141
clearOnClick={clearOnClick}
136142
ref={sidebarRef}
137143
id="clear"
138144
toggleMenu={toggleMenu}
139145
></Sidebar>
140146
<Canvas canvasRef={canvasRef}></Canvas>
141-
{showMenu && <Menu></Menu>}
142147
{eraserMode && <EraserCursor></EraserCursor>}
148+
{showMenu && <Menu></Menu>}
143149
</div>
144150
);
145151
}

client/src/atoms.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,9 @@ import { atom} from "recoil";
33
export const eraserState = atom({
44
key: "eraser",
55
default: false
6-
});
6+
});
7+
8+
export const cursorPosition = atom({
9+
key: "cursor-position",
10+
default: {x: 0, y: 0}
11+
})
Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1-
import eraserSvg from "../assets/eraserSvg.svg"
1+
import eraserSvg from "../assets/eraserSvg.svg";
2+
import { useRecoilValue } from "recoil";
3+
import { cursorPosition } from "../atoms";
24

3-
function EraserCursor(){
4-
return(
5-
<div className="h-7 w-7 left-36 transform rotate-90 absolute">
6-
<img src={eraserSvg}></img>
7-
</div>
8-
)
5+
function EraserCursor() {
6+
const position = useRecoilValue(cursorPosition);
7+
8+
return (
9+
<div
10+
className="h-7 w-7 left-36 transform rotate-90 absolute eraser-cursor"
11+
style={{ left: position.x, top: position.y }}
12+
>
13+
<img src={eraserSvg}></img>
14+
</div>
15+
);
916
}
1017

1118
export default EraserCursor;

0 commit comments

Comments
 (0)