1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel // MIT license /** * A polyfill for requestAnimationFrame * * @method requestAnimationFrame */ /** * A polyfill for cancelAnimationFrame * * @method cancelAnimationFrame */ var lastTime = 0; var vendors = ['ms', 'moz', 'webkit', 'o']; for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame']; } Iif (!window.requestAnimationFrame) { window.requestAnimationFrame = function(callback) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; } Iif (!window.cancelAnimationFrame) { window.cancelAnimationFrame = function(id) { clearTimeout(id); }; } window.requestAnimFrame = window.requestAnimationFrame; /** * Converts a hex color number to an [R, G, B] array * * @method hex2rgb * @param hex {Number} */ PIXI.hex2rgb = function(hex) { return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; }; PIXI.rgb2hex = function(rgb) { return ((rgb[0]*255 << 16) + (rgb[1]*255 << 8) + rgb[2]*255); }; /** * A polyfill for Function.prototype.bind * * @method bind */ Iif (typeof Function.prototype.bind !== 'function') { Function.prototype.bind = (function () { var slice = Array.prototype.slice; return function (thisArg) { var target = this, boundArgs = slice.call(arguments, 1); if (typeof target !== 'function') throw new TypeError(); function bound() { var args = boundArgs.concat(slice.call(arguments)); target.apply(this instanceof bound ? this : thisArg, args); } bound.prototype = (function F(proto) { if (proto) F.prototype = proto; if (!(this instanceof F)) return new F(); })(target.prototype); return bound; }; })(); } /** * A wrapper for ajax requests to be handled cross browser * * @class AjaxRequest * @constructor */ PIXI.AjaxRequest = function AjaxRequest() { var activexmodes = ['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.3.0', 'Microsoft.XMLHTTP']; //activeX versions to check for in IE if (window.ActiveXObject) { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) for (var i=0; i<activexmodes.length; i++) { try{ return new window.ActiveXObject(activexmodes[i]); } catch(e) { //suppress error } } } else if (window.XMLHttpRequest) // if Mozilla, Safari etc { return new window.XMLHttpRequest(); } else { return false; } }; /* PIXI.packColorRGBA = function(r, g, b, a)//r, g, b, a) { // console.log(r, b, c, d) return (Math.floor((r)*63) << 18) | (Math.floor((g)*63) << 12) | (Math.floor((b)*63) << 6);// | (Math.floor((a)*63)) // i = i | (Math.floor((a)*63)); // return i; // var r = (i / 262144.0 ) / 64; // var g = (i / 4096.0)%64 / 64; // var b = (i / 64.0)%64 / 64; // var a = (i)%64 / 64; // console.log(r, g, b, a); // return i; }; */ /* PIXI.packColorRGB = function(r, g, b)//r, g, b, a) { return (Math.floor((r)*255) << 16) | (Math.floor((g)*255) << 8) | (Math.floor((b)*255)); }; PIXI.unpackColorRGB = function(r, g, b)//r, g, b, a) { return (Math.floor((r)*255) << 16) | (Math.floor((g)*255) << 8) | (Math.floor((b)*255)); }; */ PIXI.canUseNewCanvasBlendModes = function() { var canvas = document.createElement('canvas'); canvas.width = 1; canvas.height = 1; var context = canvas.getContext('2d'); context.fillStyle = '#000'; context.fillRect(0,0,1,1); context.globalCompositeOperation = 'multiply'; context.fillStyle = '#fff'; context.fillRect(0,0,1,1); return context.getImageData(0,0,1,1).data[0] === 0; }; // this function is taken from Starling Framework as its pretty neat ;) PIXI.getNextPowerOfTwo = function(number) { if (number > 0 && (number & (number - 1)) === 0) // see: http://goo.gl/D9kPj return number; else { var result = 1; while (result < number) result <<= 1; return result; } }; |