Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / chrome / test / data / third_party / spaceport / js / sprites / renderers / css2dBackground.js
blob76d1fdec89e2c19c4352a1527ea60908f40dfcc9
1 define([ 'util/ensureCallback', 'features', 'Modernizr', 'sprites/container' ], function (ensureCallback, features, Modernizr, container) {
2 function RenderContext(sourceData, frameData) {
3 if (!Modernizr.csstransforms) {
4 return;
7 this.sourceData = sourceData;
9 this.transformData = frameData.map(function (objectTransforms) {
10 return objectTransforms.map(function (t) {
11 return t.cssTransform2d;
12 });
13 });
15 this.elements = frameData[0].map(function () {
16 var el = document.createElement('div');
17 el.style.position = 'absolute';
18 el.style.top = '0';
19 el.style.left = '0';
20 el.style.display = 'block';
21 el.style[features.transformOriginStyleProperty] = '0 0';
22 return el;
23 });
25 this.containerElement = container();
28 RenderContext.prototype.load = function load(callback) {
29 callback = ensureCallback(callback);
31 if (!Modernizr.csstransforms) {
32 callback(new Error('Not supported'));
33 return;
36 this.elements.forEach(function (element) {
37 this.containerElement.appendChild(element);
38 }, this);
40 document.body.appendChild(this.containerElement);
42 callback(null);
45 RenderContext.prototype.unload = function unload() {
46 this.containerElement.parentNode.removeChild(this.containerElement);
48 this.elements.forEach(function (element) {
49 if (element.parentNode) {
50 element.parentNode.removeChild(element);
52 });
55 var transformStyleProperty = features.transformStyleProperty;
57 RenderContext.prototype.renderFrame = function renderFrame(frameIndex) {
58 var transforms = this.transformData[frameIndex];
59 var elements = this.elements;
60 var count = elements.length;
62 var frameInfo = this.sourceData.getFrameInfo(frameIndex);
64 var i;
65 for (i = 0; i < count; ++i) {
66 var element = elements[i];
68 var backgroundImage = 'url(' + frameInfo.sheetImage.src + ')';
69 if (element.style.backgroundImage !== backgroundImage) {
70 // Chrome has flickering issues without this check
71 element.style.backgroundImage = backgroundImage;
74 element.style[transformStyleProperty] = transforms[i];
75 element.style.backgroundPosition = -frameInfo.x + 'px ' + -frameInfo.y + 'px';
76 element.style.width = frameInfo.width + 'px';
77 element.style.height = frameInfo.height + 'px';
81 return function (sourceData, frameData) {
82 return new RenderContext(sourceData, frameData);
84 });