Skip to content

Commit 6e22655

Browse files
committed
Very basic stamp tool
1 parent f25c34a commit 6e22655

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

src/pg/inputPixelEditor/inputPixelEditor.ts

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ export default class PgInputPixelEditor extends HTMLElement {
381381
}));
382382
}
383383

384-
#setPenPreview(pixels: Pixel[], previousX: number, previousY: number) {
384+
#setPenPreview(pixels: Pixel[], centerX: number, centerY: number, previousX: number, previousY: number) {
385385
const totalSize = this.size + this.gridSize;
386386
const actualWidth = this.width * totalSize - this.gridSize;
387387
const actualHeight = this.height * totalSize - this.gridSize;
@@ -393,10 +393,13 @@ export default class PgInputPixelEditor extends HTMLElement {
393393
maxY: Math.max(previous.maxY, current.y, previousY)
394394
};
395395
}, { minX: this.width, maxX: 0, minY: this.height, maxY: 0 });
396-
const x = minX * totalSize;
397-
const y = minY * totalSize;
398-
const width = (maxX - minX + 1) * totalSize;
399-
const height = (maxY - minY + 1) * totalSize;
396+
const offsetX = previousX - centerX;
397+
const offsetY = previousY - centerY;
398+
const x = offsetX < 0 ? (minX + offsetX) * totalSize : minX * totalSize;
399+
const y = offsetY < 0 ? (minY + offsetY) * totalSize : minY * totalSize;
400+
console.log(offsetX, offsetY, x, y);
401+
const width = (maxX - minX + 1 + Math.abs(offsetX)) * totalSize;
402+
const height = (maxY - minY + 1 + Math.abs(offsetY)) * totalSize;
400403
this.#context.clearRect(x, y, width, height);
401404
// base layer to main canvas
402405
this.#context.drawImage(
@@ -411,12 +414,12 @@ export default class PgInputPixelEditor extends HTMLElement {
411414
x, y, width, height
412415
);
413416
// preview layer
414-
this.#previewLayerContext.clearRect(0, 0, actualWidth, actualHeight);
417+
this.#previewLayerContext.clearRect(x, y, width, height);
415418
pixels.forEach(({ x, y }) => {
416419
this.#previewLayerContext.fillStyle = '#1B79C8';
417420
this.#previewLayerContext.fillRect(x * totalSize + 2, y * totalSize + 2, this.size - 4, this.size - 4);
418421
});
419-
// preview layer to main canvas
422+
//console.log(x, y, width, height);
420423
this.#context.drawImage(
421424
this.#previewLayer,
422425
x, y, width, height,
@@ -494,7 +497,9 @@ export default class PgInputPixelEditor extends HTMLElement {
494497
const color = event.buttons === 32 ? 0 : 1;
495498
switch (this.#inputMode) {
496499
case InputMode.Pixel:
497-
this.#setPixel(newX, newY, color);
500+
pixelSizes[3].forEach((arr) => {
501+
this.#setPixel(newX + arr[0], newY + arr[1], color);
502+
});
498503
break;
499504
}
500505
console.log(this.#inputMode, newX, newY);
@@ -527,7 +532,9 @@ export default class PgInputPixelEditor extends HTMLElement {
527532
if (newX === this.#startX && newY === this.#startY && this.#startColor === 1) {
528533
switch (this.#inputMode) {
529534
case InputMode.Pixel:
530-
this.#setPixel(newX, newY, 0);
535+
pixelSizes[3].forEach((arr) => {
536+
this.#setPixel(newX + arr[0], newY + arr[1], 0);
537+
});
531538
this.#data[this.#layer][newY][newX] = 0;
532539
break;
533540
}
@@ -618,7 +625,9 @@ export default class PgInputPixelEditor extends HTMLElement {
618625
switch (this.#inputMode) {
619626
case InputMode.Pixel:
620627
for (var point of points) {
621-
this.#setPixel(point[0], point[1], color);
628+
pixelSizes[3].forEach((arr) => {
629+
this.#setPixel(point[0] + arr[0], point[1] + arr[1], color);
630+
});
622631
}
623632
break;
624633
case InputMode.Line:
@@ -654,8 +663,8 @@ export default class PgInputPixelEditor extends HTMLElement {
654663
this.#pointerOutside = false;
655664
}
656665

657-
#moveX = 0;
658-
#moveY = 0;
666+
#moveX = -1;
667+
#moveY = -1;
659668
#handlePointerMovePreviewCache;
660669
handlePointerMovePreview(event: MouseEvent) {
661670
const rect = this.$canvas.getBoundingClientRect();
@@ -665,9 +674,11 @@ export default class PgInputPixelEditor extends HTMLElement {
665674
if (newX === this.#moveX && newY === this.#moveY) { return; }
666675
if (newX < 0 || newY < 0) { return; }
667676
this.#setPenPreview(
668-
pixelSizes[1].map(arr => ({ x: arr[0] + newX, y: arr[1] + newY })),
669-
this.#moveX,
670-
this.#moveY
677+
pixelSizes[3].map(arr => ({ x: arr[0] + newX, y: arr[1] + newY })),
678+
newX,
679+
newY,
680+
this.#moveX === -1 ? newX : this.#moveX,
681+
this.#moveY === -1 ? newY : this.#moveY,
671682
);
672683
this.#moveX = newX;
673684
this.#moveY = newY;

0 commit comments

Comments
 (0)