Skip to content
Snippets Groups Projects
Select Git revision
  • 67b9e98a6d9cf8ef3830629085a7e4810b3ea39e
  • master default protected
2 results

canvas.js

Blame
  • canvas.js 1.73 KiB
    
    // Holds canvas, context and adds endpoints for graphics
    class Canvas {
        constructor(id="c", w=128, h=128) {
            this.canvas = document.getElementById(id);
            this.canvas.width = w;
            this.canvas.height = h;
    
            this.ctx = this.canvas.getContext("2d");
            this.ctx.imageSmoothingEnabled = false;
            this.ctx.textBaseline = "top";
    
            this.width = this.canvas.width;
            this.height = this.canvas.height;
    
            // camera
            this.cX = 0;
            this.cY = 0;
        }
    
        fill(c="black") {
            this.ctx.fillStyle = c;
            this.ctx.fillRect(0, 0, this.width, this.height);
        }
        
        drawImage(image, x, y, width = image.width, height = image.height) {
            this.ctx.drawImage(image, x-this.cX, y-this.cY, width, height);
        }
    
        sliceImage(img, x, y, w, h, cropX, cropY, cropW, cropH, direction=0) {
            // console.debug("sliceImage", img, x, y, w, h, cropX, cropY, cropW, cropH, direction);
            this.ctx.save();
            this.ctx.translate((x+w/2)-this.cX, (y+h/2)-this.cY);
            this.ctx.rotate(direction);
            this.ctx.drawImage(img, cropX, cropY, cropW, cropH, -w/2, -h/2, w, h);
            this.ctx.restore();
            // console.log(`${x}, ${y}, ${w}, ${h}, ${cropX}, ${cropY}, ${cropW}, ${cropH}`);
        }
    
        drawText(text, x, y, c="white", size=16, font="monospace") {
            this.ctx.fillStyle = c;
            this.ctx.font = `${size}px ${font}`;
            this.ctx.fillText(text, x, y);
        }
    
        drawLine(x1, y1, x2, y2, c="white", w=1) {
            this.ctx.strokeStyle = c;
            this.ctx.lineWidth = w;
            this.ctx.beginPath();
            this.ctx.moveTo(x1-this.cX, y1-this.cY);
            this.ctx.lineTo(x2-this.cX, y2-this.cY);
            this.ctx.stroke();
        }
    }
    
    export { Canvas };