/* Text mode will paste a text onto the canvas */ define([], function () { function initGui() { PaintApp.elements.textButton = document.getElementById('text-button'); PaintApp.paletteModesButtons.push(PaintApp.elements.textButton); new PaintApp.palettes.textPalette.TextPalette(PaintApp.elements.textButton, undefined); PaintApp.elements.textFontSelect = document.getElementById('text-font-select'); PaintApp.elements.textInput = document.getElementById('text-input'); PaintApp.elements.textButton.addEventListener('click', function () { PaintApp.paletteRemoveActiveClass(); PaintApp.addActiveClassToElement(PaintApp.elements.textButton); PaintApp.switchMode('Text'); }); } var Text = { initGui: initGui, defaultSize: 25, fontFamily: 'Arial', onMouseDown: function (event) { PaintApp.handleCurrentFloatingElement(); text = PaintApp.elements.textInput.value; if (!text) { return; } /* We create a floating element with the text where the user clicked */ var element = document.createElement('span'); element.innerHTML = text; element.style.position = 'absolute'; element.style.padding = '0px'; element.size = text.length + 1; element.style.whiteSpace = 'nowrap'; element.style.fontFamily = PaintApp.modes.Text.fontFamily; element.style.width = 'auto'; element.style.lineHeight = PaintApp.modes.Text.lineHeight; element.style.fontSize = PaintApp.modes.Text.defaultSize + 'px'; element.style.opacity = '0.5'; element.style.borderRadius = '0px'; element.style.border = '5px dotted #500'; element.style.color = PaintApp.data.color.fill; var left = event.point.x + 'px'; var top = event.point.y + 55 + 'px'; element.style.left = left; element.style.top = top; element.style.verticalAlign = 'bottom'; document.body.appendChild(element); element.style.left = parseInt(left) - element.getBoundingClientRect().width / 2 + 'px'; element.style.top = parseInt(top) - element.getBoundingClientRect().height / 2 + 'px'; /* Storing a floating element */ PaintApp.data.currentElement = { type: 'text', element: element, startPoint: { x: parseInt(element.style.left) + element.getBoundingClientRect().width / 2, y: parseInt(element.style.top) + element.getBoundingClientRect().height / 2 } }; }, onMouseDrag: function (event) { if (!PaintApp.data.currentElement) { return; } /* We change the size of the text with the mouse drag*/ var distanceX = Math.abs(event.point.x - PaintApp.data.currentElement.startPoint.x); var distanceY = Math.abs(event.point.y - PaintApp.data.currentElement.startPoint.y + 55); if (distanceX > distanceY) { distance = distanceX; } else { distance = distanceY; } PaintApp.data.currentElement.element.style.fontSize = PaintApp.modes.Text.defaultSize + distance + 'px'; PaintApp.data.currentElement.element.style.left = PaintApp.data.currentElement.startPoint.x - PaintApp.data.currentElement.element.getBoundingClientRect().width / 2 + 'px'; PaintApp.data.currentElement.element.style.top = PaintApp.data.currentElement.startPoint.y - PaintApp.data.currentElement.element.getBoundingClientRect().height / 2 + 'px'; }, onMouseUp: function (event) { if (!PaintApp.data.currentElement) { return; } var txt = PaintApp.data.currentElement.element.innerHTML; var top = PaintApp.data.currentElement.element.getBoundingClientRect().top - 55 + PaintApp.data.currentElement.element.getBoundingClientRect().height; /* We draw the text inside the canvas */ var ctx = PaintApp.elements.canvas.getContext('2d'); ctx.font = PaintApp.data.currentElement.element.style.fontSize + ' ' + PaintApp.modes.Text.fontFamily; ctx.fillStyle = PaintApp.data.color.fill; ctx.textAlign = 'start'; ctx.fillText(txt, 5 + PaintApp.data.currentElement.element.getBoundingClientRect().left, top); /* If the activity is shared we send the element to everyone */ if (PaintApp.data.isShared) { PaintApp.collaboration.sendMessage({ action: 'text', data: { font: PaintApp.data.currentElement.element.style.fontSize + ' ' + PaintApp.modes.Text.fontFamily, fillStyle: PaintApp.data.color.fill, textAlign: 'start', text: txt, left: 5 + PaintApp.data.currentElement.element.getBoundingClientRect().left, top: top } }); } PaintApp.data.currentElement.element.parentElement.removeChild(PaintApp.data.currentElement.element); PaintApp.data.currentElement = undefined; PaintApp.saveCanvas(); } }; return Text; });