diff --git a/src/components/ui/zcanvas/layer-sprite.js b/src/components/ui/zcanvas/layer-sprite.js index 6c0b445..e5604b7 100644 --- a/src/components/ui/zcanvas/layer-sprite.js +++ b/src/components/ui/zcanvas/layer-sprite.js @@ -46,7 +46,7 @@ class LayerSprite extends sprite { layer.source = cvs; } - // create brush (always as all layers can be maskable) + // create brush (used for both drawing on LAYER_GRAPHIC types and to create layer masks) const brushCanvas = createCanvas(); this._brushCvs = brushCanvas.cvs; this._brushCtx = brushCanvas.ctx; @@ -214,6 +214,14 @@ class LayerSprite extends sprite { this._dragStartEventCoordinates = { x: this._pointerX, y: this._pointerY }; } + syncedPositioning( x, y ) { + this._bounds.left = x; + this._bounds.top = y; + this.layer.x = x; + this.layer.y = y; + this.invalidate(); + } + /* the following override zCanvas.sprite */ handleMove( x, y ) { @@ -349,9 +357,9 @@ class LayerSprite extends sprite { documentContext.beginPath(); documentContext.lineWidth = 2 / this.canvas.zoomFactor; - let selection = this.layer.selection; + let { selection } = this.layer; const firstPoint = selection[ 0 ]; - const localPointerX = this._pointerX - vp.left; + const localPointerX = this._pointerX - vp.left; // local to viewport const localPointerY = this._pointerY - vp.top; // when in rectangular select mode, the outline will draw from the first coordinate diff --git a/src/services/keyboard-service.js b/src/services/keyboard-service.js index ba6e8dc..08b221f 100644 --- a/src/services/keyboard-service.js +++ b/src/services/keyboard-service.js @@ -165,15 +165,35 @@ function handleKeyDown( event ) { break; case 38: // up + if ( getters.activeTool === ToolTypes.MOVE ) { + const sprite = getSpriteForLayer( getters.activeLayer ); + const speed = shiftDown ? 10 : 1; + sprite?.syncedPositioning( sprite.getX(), sprite.getY() - speed ); + } break; case 40: // down + if ( getters.activeTool === ToolTypes.MOVE ) { + const sprite = getSpriteForLayer( getters.activeLayer ); + const speed = shiftDown ? 10 : 1; + sprite?.syncedPositioning( sprite.getX(), sprite.getY() + speed ); + } break; case 39: // right + if ( getters.activeTool === ToolTypes.MOVE ) { + const sprite = getSpriteForLayer( getters.activeLayer ); + const speed = shiftDown ? 10 : 1; + sprite?.syncedPositioning( sprite.getX() + speed, sprite.getY()); + } break; case 37: // left + if ( getters.activeTool === ToolTypes.MOVE ) { + const sprite = getSpriteForLayer( getters.activeLayer ); + const speed = shiftDown ? 10 : 1; + sprite?.syncedPositioning( sprite.getX() - speed, sprite.getY() ); + } break; case 46: // delete