/* Drawing palette to display a drawing onto the canvas */
|
|
|
|
define([
|
|
'sugar-web/graphics/palette',
|
|
'mustache'
|
|
], function(palette, mustache) {
|
|
var drawingspalette = {};
|
|
|
|
function onDrawingSelect(event) {
|
|
|
|
/* Calculation of the drawing url */
|
|
var url = window.location.href.split('/');
|
|
url.pop();
|
|
url = url.join('/') + '/' + event.detail.drawings;
|
|
|
|
var ctx = PaintApp.elements.canvas.getContext('2d');
|
|
|
|
/* Http request to load the drawing */
|
|
var request = new XMLHttpRequest();
|
|
request.open('GET', url, true);
|
|
request.onload = function(e) {
|
|
if (request.status === 200 || request.status === 0) {
|
|
var imgSRC = request.responseText;
|
|
|
|
//We load the drawing inside an image element
|
|
var element = document.createElement('img');
|
|
element.src = 'data:image/svg+xml;base64,' + btoa(imgSRC);
|
|
element.onload = function() {
|
|
|
|
//We draw the drawing to the canvas
|
|
var ctx = PaintApp.elements.canvas.getContext('2d');
|
|
var imgWidth = element.width;
|
|
var imgHeight = element.height;
|
|
var maxWidth = PaintApp.elements.canvas.getBoundingClientRect().width;
|
|
var maxHeight = PaintApp.elements.canvas.getBoundingClientRect().height;
|
|
var ratio = Math.min(maxWidth / imgWidth, maxHeight / imgHeight);
|
|
var newWidth = ratio * imgWidth;
|
|
var newHeight = ratio * imgHeight;
|
|
ctx.clearRect(0, 0, PaintApp.elements.canvas.width, PaintApp.elements.canvas.height);
|
|
ctx.drawImage(element, 0, 0, newWidth, newHeight);
|
|
|
|
PaintApp.saveCanvas();
|
|
|
|
/* If the activity is shared we send the element to everyone */
|
|
if (PaintApp.data.isShared) {
|
|
try {
|
|
PaintApp.collaboration.sendMessage({
|
|
action: 'toDataURL',
|
|
data: {
|
|
width: PaintApp.elements.canvas.width / window.devicePixelRatio,
|
|
height: PaintApp.elements.canvas.height / window.devicePixelRatio,
|
|
src: PaintApp.collaboration.compress(PaintApp.elements.canvas.toDataURL())
|
|
}
|
|
});
|
|
} catch (e) {}
|
|
}
|
|
|
|
};
|
|
}
|
|
};
|
|
request.send(null);
|
|
}
|
|
|
|
function initGui() {
|
|
var drawingsButton = document.getElementById('drawings-button');
|
|
var drawingsPalette = new PaintApp.palettes.drawingsPalette.DrawingsPalette(drawingsButton, undefined);
|
|
drawingsPalette.addEventListener('drawingsChange', onDrawingSelect);
|
|
}
|
|
|
|
drawingspalette.initGui = initGui;
|
|
|
|
/* We setup the palette with drawings */
|
|
drawingspalette.DrawingsPalette = function(invoker, primaryText) {
|
|
palette.Palette.call(this, invoker, primaryText);
|
|
this.drawingsChangeEvent = document.createEvent('CustomEvent');
|
|
this.drawingsChangeEvent.initCustomEvent('drawingsChange', true, true, {
|
|
'drawings': 'icons/size-1.svg'
|
|
});
|
|
this.template = '<tbody>' + '{{#rows}}' + '<tr>' + '{{#.}}' + '<td>' + '<button value="{{drawings}}" style="height:55px; width:55px; background-size: 55px 55px; background-image: url({{ drawings }}); background-repeat: no-repeat; background-position: center; "></button>' + '</td>' + '{{/.}}' + '</tr>' + '{{/rows}}' + '</tbody>';
|
|
var drawingssElem = document.createElement('table');
|
|
drawingssElem.className = 'drawingss';
|
|
var drawingssData = {
|
|
rows: [
|
|
[{
|
|
drawings: 'drawings/woodpecker.svg'
|
|
}, {
|
|
drawings: 'drawings/tortoise.svg'
|
|
}, {
|
|
drawings: 'drawings/manatee.svg'
|
|
}],
|
|
[{
|
|
drawings: 'drawings/dog.svg'
|
|
}, {
|
|
drawings: 'drawings/goldfinch.svg'
|
|
}, {
|
|
drawings: 'drawings/mammoth.svg'
|
|
}]
|
|
]
|
|
};
|
|
drawingssElem.innerHTML = mustache.render(this.template, drawingssData);
|
|
this.setContent([drawingssElem]);
|
|
// Pop-down the palette when a item in the menu is clicked.
|
|
this.buttons = drawingssElem.querySelectorAll('button');
|
|
var that = this;
|
|
|
|
function popDownOnButtonClick(event) {
|
|
that.drawingsChangeEvent.detail.drawings = event.target.value;
|
|
that.getPalette().dispatchEvent(that.drawingsChangeEvent);
|
|
that.popDown();
|
|
}
|
|
for (var i = 0; i < this.buttons.length; i++) {
|
|
this.buttons[i].addEventListener('click', popDownOnButtonClick);
|
|
}
|
|
};
|
|
|
|
var setdrawings = function(index) {
|
|
// Click the nth button
|
|
var event = document.createEvent('MouseEvents');
|
|
event.initEvent('click', true, true);
|
|
this.buttons[index].dispatchEvent(event);
|
|
};
|
|
var addEventListener = function(type, listener, useCapture) {
|
|
return this.getPalette().addEventListener(type, listener, useCapture);
|
|
};
|
|
|
|
drawingspalette.DrawingsPalette.prototype = Object.create(palette.Palette.prototype, {
|
|
setdrawings: {
|
|
value: setdrawings,
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
},
|
|
addEventListener: {
|
|
value: addEventListener,
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
}
|
|
});
|
|
return drawingspalette;
|
|
});
|