51 lines
1013 B
TypeScript
51 lines
1013 B
TypeScript
|
|
import { BaseTool } from './base-tool';
|
||
|
|
import type { PointerState, ToolSettings } from '@/types';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Pencil tool - 1px drawing
|
||
|
|
*/
|
||
|
|
export class PencilTool extends BaseTool {
|
||
|
|
constructor() {
|
||
|
|
super('Pencil');
|
||
|
|
}
|
||
|
|
|
||
|
|
onPointerDown(
|
||
|
|
pointer: PointerState,
|
||
|
|
ctx: CanvasRenderingContext2D,
|
||
|
|
settings: ToolSettings
|
||
|
|
): void {
|
||
|
|
this.isDrawing = true;
|
||
|
|
|
||
|
|
ctx.strokeStyle = settings.color;
|
||
|
|
ctx.lineWidth = 1;
|
||
|
|
ctx.lineCap = 'round';
|
||
|
|
ctx.lineJoin = 'round';
|
||
|
|
ctx.globalAlpha = settings.opacity;
|
||
|
|
|
||
|
|
ctx.beginPath();
|
||
|
|
ctx.moveTo(pointer.x, pointer.y);
|
||
|
|
}
|
||
|
|
|
||
|
|
onPointerMove(
|
||
|
|
pointer: PointerState,
|
||
|
|
ctx: CanvasRenderingContext2D,
|
||
|
|
settings: ToolSettings
|
||
|
|
): void {
|
||
|
|
if (!this.isDrawing) return;
|
||
|
|
|
||
|
|
ctx.lineTo(pointer.x, pointer.y);
|
||
|
|
ctx.stroke();
|
||
|
|
}
|
||
|
|
|
||
|
|
onPointerUp(
|
||
|
|
pointer: PointerState,
|
||
|
|
ctx: CanvasRenderingContext2D,
|
||
|
|
settings: ToolSettings
|
||
|
|
): void {
|
||
|
|
if (!this.isDrawing) return;
|
||
|
|
|
||
|
|
this.isDrawing = false;
|
||
|
|
ctx.globalAlpha = 1;
|
||
|
|
}
|
||
|
|
}
|