Skip to content

Commit

Permalink
feat: Added the undo redo feature for the main canvas
Browse files Browse the repository at this point in the history
  • Loading branch information
Bhoomysingh10 committed Oct 28, 2024
1 parent 5351937 commit a873f69
Showing 1 changed file with 66 additions and 0 deletions.
66 changes: 66 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,20 @@ <h2 class="welcome-header">Welcome to the Canvas Editor!</h2>
<span></span>
Clear Canvas
</button>
<button type="button" class="btn btn-primary" id="redoCanvasBtn">
<span></span>
<span></span>
<span></span>
<span></span>
Redo
</button>
<button type="button" class="btn btn-primary" id="undoCanvasBtn">
<span></span>
<span></span>
<span></span>
<span></span>
Undo
</button>
<button type="button" class="btn btn-primary" id="eraserBtn">
<span></span>
<span></span>
Expand Down Expand Up @@ -803,6 +817,58 @@ <h3 style="color:#1a0033;">Thank You!</h3>
</section>


<script>
const canvas = document.getElementById('mainCanvas');
const ctx = canvas.getContext('2d');

let undoStack = [];
let redoStack = [];

function saveState() {
undoStack.push(canvas.toDataURL());
redoStack = [];
}

function undo() {
if (undoStack.length > 0) {
redoStack.push(undoStack.pop());
restoreState(undoStack[undoStack.length - 1] || null);
}
}

function redo() {
if (redoStack.length > 0) {
const redoState = redoStack.pop();
undoStack.push(redoState);
restoreState(redoState);
}
}

function restoreState(imageData) {
const img = new Image();
img.src = imageData || '';
img.onload = () => {
ctx.clearRect(0, 0, canvas.width, canvas.height);
if (imageData) ctx.drawImage(img, 0, 0);
};
}

function draw(x, y) {
ctx.fillStyle = "black";
ctx.fillRect(x, y, 5, 5);
saveState();
}

canvas.addEventListener('mousedown', (e) => {
draw(e.offsetX, e.offsetY);
});

document.querySelector('button[name="Undo"]').addEventListener('click', undo);
document.querySelector('button[name="Redo"]').addEventListener('click', redo);

</script>


<script src="src\Scripts\preloader.js"></script>
<script src="src/Scripts/BacktoTop.js"></script>

Expand Down

0 comments on commit a873f69

Please sign in to comment.