| OLD | NEW |
| (Empty) | |
| 1 define([ 'util/ensureCallback', 'sprites/canvas' ], function (ensureCallback, ca
nvas) { |
| 2 function RenderContext(sourceData, frameData) { |
| 3 this.sourceData = sourceData; |
| 4 this.frameData = frameData; |
| 5 |
| 6 this.previousTransforms = null; |
| 7 this.previousFrameIndex = null; |
| 8 |
| 9 this.canvas = canvas(); |
| 10 |
| 11 this.context = this.canvas.getContext('2d'); |
| 12 this.context.globalCompositeOperation = 'source-over'; |
| 13 } |
| 14 |
| 15 RenderContext.prototype.load = function load(callback) { |
| 16 callback = ensureCallback(callback); |
| 17 |
| 18 // Anything not simply translated is disallowed |
| 19 var isValid = this.frameData.every(function (frame) { |
| 20 return frame.every(function (transform) { |
| 21 return transform.matrix[0] === 1 |
| 22 && transform.matrix[1] === 0 |
| 23 && transform.matrix[3] === 0 |
| 24 && transform.matrix[4] === 1; |
| 25 }); |
| 26 }); |
| 27 |
| 28 if (!isValid) { |
| 29 callback(new Error("Not supported")); |
| 30 return; |
| 31 } |
| 32 |
| 33 document.body.appendChild(this.canvas); |
| 34 |
| 35 callback(null); |
| 36 }; |
| 37 |
| 38 RenderContext.prototype.unload = function unload() { |
| 39 if (this.canvas.parentNode) { |
| 40 this.canvas.parentNode.removeChild(this.canvas); |
| 41 } |
| 42 }; |
| 43 |
| 44 RenderContext.prototype.clear = function clear() { |
| 45 this.canvas.width = this.canvas.width; |
| 46 this.previousTransforms = null; |
| 47 }; |
| 48 |
| 49 RenderContext.prototype.renderFrame = function renderFrame(frameIndex) { |
| 50 var context = this.context; |
| 51 var sourceData = this.sourceData; |
| 52 |
| 53 var transforms = this.frameData[frameIndex]; |
| 54 var count = transforms.length; |
| 55 var i; |
| 56 |
| 57 var previousTransforms = this.previousTransforms; |
| 58 if (previousTransforms) { |
| 59 var frameInfo = sourceData.getFrameInfo(this.previousFrameIndex); |
| 60 var width = frameInfo.width; |
| 61 var height = frameInfo.height; |
| 62 for (i = 0; i < count; ++i) { |
| 63 var transform = previousTransforms[i]; |
| 64 context.setTransform(1, 0, 0, 1, Math.floor(transform.x), Math.f
loor(transform.y)); |
| 65 context.clearRect(0, 0, width, height); |
| 66 } |
| 67 } |
| 68 |
| 69 for (i = 0; i < count; ++i) { |
| 70 var transform = transforms[i]; |
| 71 context.setTransform(1, 0, 0, 1, Math.floor(transform.x), Math.floor
(transform.y)); |
| 72 sourceData.drawToCanvas(context, 0, 0, frameIndex); |
| 73 } |
| 74 |
| 75 this.previousTransforms = transforms; |
| 76 this.previousFrameIndex = frameIndex; |
| 77 }; |
| 78 |
| 79 return function (element, frameData) { |
| 80 return new RenderContext(element, frameData); |
| 81 }; |
| 82 }); |
| OLD | NEW |