@@ -139,17 +139,21 @@ function collageForms(w,h,forms) {
139139 return canvas;
140140};
141141
142+function applyTransforms(theta,scale,x,y,w,h,e) {
143+ var t = "translate(" + (x - w / 2) + "px,"+ (y - h / 2) + "px)";
144+ var r = theta === (~~theta) ? "" : "rotate(" + theta*360 + "deg)";
145+ var s = scale === 1 ? "" : "scale(" + scale + "," + scale + ")";
146+ var transforms = t + " " + s + " " + r;
147+ e.style.transform = transforms;
148+ e.style.msTransform = transforms;
149+ e.style.MozTransform = transforms;
150+ e.style.webkitTransform = transforms;
151+ e.style.OTransform = transforms;
152+}
153+
142154function collageElement(w,h,theta,scale,x,y,elem) {
143155 var e = Render.render(elem);
144− var t = "translate(" + (x - elem[3] / 2) + "px,"+ (y - elem[4] / 2) + "px)";
145− var r = theta === (~~theta) ? "" : "rotate(" + theta*360 + "deg)";
146− var s = scale === 1 ? "" : "scale(" + scale + "," + scale + ")";
147− var transforms = t + " " + s + " " + r;
148− e.style.transform = transforms;
149− e.style.msTransform = transforms;
150− e.style.MozTransform = transforms;
151− e.style.webkitTransform = transforms;
152− e.style.OTransform = transforms;
156+ applyTransforms(theta,scale,x,y,elem[3],elem[4],e);
153157 var div = Render.newElement('div');
154158 Render.addTo(div,e);
155159 div.style.width = (~~w) + "px";
@@ -174,25 +178,27 @@ function collage(w,h,formss) {
174178}
175179
176180function updateFormSet(node,currSet,nextSet) {
177− if (Value.eq(nextSet,currSet)) return;
178− var w = node.style.width.slice(0,-2) - 0;
179− var h = node.style.height.slice(0,-2) - 0;
180− if (typeof nextSet[0] === "object") {
181− if (typeof currSet[0] === "object") {
182− if (node.getContext) {
183− var ctx = node.getContext('2d');
184− function redo() { renderForms(this,ctx,w,h,nextSet); }
185− return renderForms(redo,ctx,w,h,nextSet);
186− }
187− }
188− var newNode = collageForms(w,h,nextSet);
189− newNode.style.position = 'absolute';
190− return node.parentNode.replaceChild(newNode,node);
181+ if (Value.eq(nextSet,currSet)) return;
182+ var w = node.style.width.slice(0,-2) - 0;
183+ var h = node.style.height.slice(0,-2) - 0;
184+ if (typeof nextSet[0] === "object") {
185+ if (typeof currSet[0] === "object") {
186+ if (node.getContext) {
187+ var ctx = node.getContext('2d');
188+ function redo() { renderForms(this,ctx,w,h,nextSet); }
189+ return renderForms(redo,ctx,w,h,nextSet);
190+ }
191191 }
192− var f = nextSet;
193− var newNode = collageElement(w,h,f[1],f[2],f[3][1],f[3][2],f[4][1]);
192+ var newNode = collageForms(w,h,nextSet);
194193 newNode.style.position = 'absolute';
195194 return node.parentNode.replaceChild(newNode,node);
195+ }
196+ node.style.width = (~~w) + "px";
197+ node.style.height = (~~h) + "px";
198+ var f = nextSet;
199+ var next = nextSet[4][1];
200+ Render.update(node.firstChild, currSet[4][1], next);
201+ applyTransforms(f[1],f[2],f[3][1],f[3][2],next[3],next[4],node.firstChild);
196202}
197203
198204// assumes that the form sets are the same length.