paper.js/src/canvas/CanvasProvider.js

55 lines
1.6 KiB
JavaScript
Raw Normal View History

2011-03-06 19:50:44 -05:00
/*
* Paper.js - The Swiss Army Knife of Vector Graphics Scripting.
2011-03-07 20:41:50 -05:00
* http://paperjs.org/
*
* Copyright (c) 2011 - 2013, Juerg Lehni & Jonathan Puckey
2011-03-06 19:50:44 -05:00
* http://lehni.org/ & http://jonathanpuckey.com/
*
2011-07-01 06:17:45 -04:00
* Distributed under the MIT license. See LICENSE file for details.
*
2011-03-07 20:41:50 -05:00
* All rights reserved.
2011-03-06 19:50:44 -05:00
*/
2011-02-26 09:29:51 -05:00
// TODO: Run through the canvas array to find a canvas with the requested
// width / height, so we don't need to resize it?
var CanvasProvider = {
canvases: [],
2013-02-12 18:53:27 -05:00
getCanvas: function(width, height) {
var size = height === undefined ? width : Size.create(width, height);
2011-02-28 12:30:08 -05:00
if (this.canvases.length) {
2011-02-26 09:29:51 -05:00
var canvas = this.canvases.pop();
// If they are not the same size, we don't need to clear them
// using clearRect and visa versa.
if ((canvas.width != size.width)
|| (canvas.height != size.height)) {
2011-02-26 09:29:51 -05:00
canvas.width = size.width;
canvas.height = size.height;
} else {
// +1 is needed on some browsers to really clear the borders
canvas.getContext('2d').clearRect(0, 0,
size.width + 1, size.height + 1);
2011-02-26 09:29:51 -05:00
}
return canvas;
} else {
/*#*/ if (options.browser) {
2011-02-26 09:29:51 -05:00
var canvas = document.createElement('canvas');
canvas.width = size.width;
canvas.height = size.height;
return canvas;
/*#*/ } else { // !options.browser
2011-07-29 20:04:30 -04:00
return new Canvas(size.width, size.height);
/*#*/ } // !options.browser
2011-02-26 09:29:51 -05:00
}
},
getContext: function(width, height) {
return this.getCanvas(width, height).getContext('2d');
},
// release can receive either a canvas or a context.
release: function(obj) {
this.canvases.push(obj.canvas ? obj.canvas : obj);
},
};