|
|
- /* Copy mode will also to copy an area, this mode is intended to work with the paste made */
- define([], function() {
-
- function initGui() {
- PaintApp.elements.copyButton = document.getElementById('copy-button');
- PaintApp.paletteModesButtons.push(PaintApp.elements.copyButton);
- PaintApp.elements.copyButton.addEventListener('click', function() {
- PaintApp.paletteRemoveActiveClass();
- PaintApp.addActiveClassToElement(PaintApp.elements.copyButton);
- PaintApp.switchMode('Copy');
- });
- }
-
- var Copy = {
- initGui: initGui,
- begin: undefined,
- end: undefined,
- onMouseDown: function(event) {
- if (PaintApp.data.currentElement) {
- PaintApp.data.currentElement.element.parentElement.removeChild(PaintApp.data.currentElement.element);
- PaintApp.data.currentElement = undefined;
- }
-
- begin = event.point;
- var left = event.point.x + 'px';
- var top = event.point.y + 55 + 'px';
-
- /* We are creating a floating div where the user clicked */
-
- var element = document.createElement('div');
- element.style.position = 'absolute';
- element.style.padding = '0px';
- element.style.width = '1px';
- element.style.height = '1px';
- element.style.opacity = '0.5';
- element.style.pointerEvents = 'none';
- element.style.borderRadius = '0px';
- element.style.border = '5px dotted #500';
- element.style.left = left;
- element.style.top = top;
- element.style.verticalAlign = 'bottom';
-
- document.body.appendChild(element);
- /* Left and top relies on getBoundingClientRect so we need to set values after the DOM append */
-
- element.style.left = parseInt(left) - element.getBoundingClientRect().width / 2 + 'px';
- element.style.top = parseInt(top) - element.getBoundingClientRect().height / 2 + 'px';
-
- /* We store the currentElement */
- PaintApp.data.currentElement = {
- type: 'copy/paste',
- element: element,
- startPoint: {
- x: parseInt(element.style.left) + element.getBoundingClientRect().width / 2,
- y: parseInt(element.style.top) + element.getBoundingClientRect().height / 2
- }
- };
- },
-
- onMouseDrag: function(event) {
- /* We resize the floating element with the user drag */
-
- var end = event.point;
- if (begin.x <= end.x) {
- PaintApp.data.currentElement.element.style.width = end.x - begin.x + 'px';
- } else {
- PaintApp.data.currentElement.element.style.width = 0 + 'px';
- }
- if (begin.y <= end.y) {
- PaintApp.data.currentElement.element.style.height = Math.abs(begin.y - end.y) + 'px';
- } else {
- PaintApp.data.currentElement.element.style.height = 0 + 'px';
- }
- },
-
- onMouseUp: function(event) {
- /* When the user stops clicking we will do a calculation of the selected area */
-
- var end = event.point;
- end.y = end.y + 55;
- var width = parseInt(PaintApp.data.currentElement.element.style.width);
- var height = parseInt(PaintApp.data.currentElement.element.style.height);
- var canvas = PaintApp.elements.canvas;
- var ctx = PaintApp.elements.canvas.getContext('2d');
-
- if (begin.x < end.x && begin.y < end.y) {
- /* We save the whole canvas and then cut the selection corresponding to the floating selection */
- try {
- PaintApp.modes.Paste.data = canvas.toDataURL();
- } catch (e) {
- return;
- }
- var imgData = ctx.getImageData(begin.x * window.devicePixelRatio, begin.y * window.devicePixelRatio, width * window.devicePixelRatio, height * window.devicePixelRatio);
- canvas = document.createElement('canvas');
- canvas.width = width * window.devicePixelRatio;
- canvas.height = height * window.devicePixelRatio;
- canvas.getContext('2d').putImageData(imgData, 0, 0);
- try {
- imgData = canvas.toDataURL();
- } catch (e) {
- return;
- }
-
- /* We fill the paste mode with the image, width and height and then switch to paste mode */
- PaintApp.modes.Paste.dataImage = {
- width: width / window.devicePixelRatio,
- height: height / window.devicePixelRatio,
- data: imgData
- };
- PaintApp.elements.pasteButton.click();
- }
- }
- };
- return Copy;
- });
|