@@ -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