diff --git a/src/main/bundles/dev.bundle b/src/main/bundles/dev.bundle index f28ff6a..f9830f4 100644 Binary files a/src/main/bundles/dev.bundle and b/src/main/bundles/dev.bundle differ diff --git a/src/main/frontend/invoice-generator/profile-invoice-generator.js b/src/main/frontend/invoice-generator/profile-invoice-generator.js index da92ec6..fb81014 100644 --- a/src/main/frontend/invoice-generator/profile-invoice-generator.js +++ b/src/main/frontend/invoice-generator/profile-invoice-generator.js @@ -785,28 +785,43 @@ window.initProfileInvoiceGenerator = function() { canvas.setAttribute('tabindex', '0'); canvas.addEventListener('keydown', function(e) { if (!selectedElement) return; - - var step = gridSize; + var moved = false; - + switch(e.key) { case 'ArrowUp': - selectedElement.y = Math.max(0, selectedElement.y - step); + if (e.shiftKey) { + selectedElement.y = Math.max(0, selectedElement.y - 1); + } else { + selectedElement.y = Math.max(0, Math.floor((selectedElement.y - 1) / gridSize) * gridSize); + } moved = true; e.preventDefault(); break; case 'ArrowDown': - selectedElement.y = Math.min(basePageHeight - (selectedElement.height || 30), selectedElement.y + step); + if (e.shiftKey) { + selectedElement.y = Math.min(basePageHeight - (selectedElement.height || 30), selectedElement.y + 1); + } else { + selectedElement.y = Math.min(basePageHeight - (selectedElement.height || 30), Math.ceil((selectedElement.y + 1) / gridSize) * gridSize); + } moved = true; e.preventDefault(); break; case 'ArrowLeft': - selectedElement.x = Math.max(0, selectedElement.x - step); + if (e.shiftKey) { + selectedElement.x = Math.max(0, selectedElement.x - 1); + } else { + selectedElement.x = Math.max(0, Math.floor((selectedElement.x - 1) / gridSize) * gridSize); + } moved = true; e.preventDefault(); break; case 'ArrowRight': - selectedElement.x = Math.min(basePageWidth - (selectedElement.width || 100), selectedElement.x + step); + if (e.shiftKey) { + selectedElement.x = Math.min(basePageWidth - (selectedElement.width || 100), selectedElement.x + 1); + } else { + selectedElement.x = Math.min(basePageWidth - (selectedElement.width || 100), Math.ceil((selectedElement.x + 1) / gridSize) * gridSize); + } moved = true; e.preventDefault(); break; @@ -821,7 +836,7 @@ window.initProfileInvoiceGenerator = function() { e.preventDefault(); break; } - + if (moved) { draw(); notifyElementSelected(selectedElement);