(function() {
'use strict';
/**
* FastLayer constructor. Layers are tied to their own canvas element and are used
* to contain shapes only. If you don't need node nesting, mouse and touch interactions,
* or event pub/sub, you should use FastLayer instead of Layer to create your layers.
* It renders about 2x faster than normal layers.
* @constructor
* @memberof Konva
* @augments Konva.BaseLayer
* @param {Object} config
* @param {Boolean} [config.clearBeforeDraw] set this property to false if you don't want
* to clear the canvas before each layer draw. The default value is true.
* @param {Boolean} [config.visible]
* @param {String} [config.id] unique id
* @param {String} [config.name] non-unique name
* @param {Number} [config.opacity] determines node opacity. Can be any number between 0 and 1
* @@containerParams
* @example
* var layer = new Konva.FastLayer();
*/
Konva.FastLayer = function(config) {
this.____init(config);
};
Konva.Util.addMethods(Konva.FastLayer, {
____init: function(config) {
this.nodeType = 'Layer';
this.canvas = new Konva.SceneCanvas();
// call super constructor
Konva.BaseLayer.call(this, config);
},
_validateAdd: function(child) {
var type = child.getType();
if (type !== 'Shape') {
Konva.Util.throw('You may only add shapes to a fast layer.');
}
},
_setCanvasSize: function(width, height) {
this.canvas.setSize(width, height);
},
hitGraphEnabled: function() {
return false;
},
getIntersection: function() {
return null;
},
drawScene: function(can) {
var layer = this.getLayer(),
canvas = can || (layer && layer.getCanvas());
if(this.getClearBeforeDraw()) {
canvas.getContext().clear();
}
Konva.Container.prototype.drawScene.call(this, canvas);
return this;
},
draw: function() {
this.drawScene();
return this;
},
// extend Node.prototype.setVisible
setVisible: function(visible) {
Konva.Node.prototype.setVisible.call(this, visible);
if(visible) {
this.getCanvas()._canvas.style.display = 'block';
}
else {
this.getCanvas()._canvas.style.display = 'none';
}
return this;
}
});
Konva.Util.extend(Konva.FastLayer, Konva.BaseLayer);
Konva.Collection.mapMethods(Konva.FastLayer);
})();