I just wanted to add:

On 4/8/2013 2:19 PM, Jim Graham wrote:
It's already done and the code is written, but in retrospect, I'm not sure how 
much the optimizations in getTransform/setTransform are worth compared to the 
easy readability of having the transforms done linearly in a LIFO manner, such 
as:

setTransform:
     transform.setToIdentity();
     if (cX|cY != 0) { transform.translate(cX, cY); }
     if (dS != 1) transform.scale(dS, dS); }
     transform.concatenate(Tx);
getTransform:
     tx = new AT(transform);
     if (dS != 1) { tx.scale(invDs, invDs); }
     if (cX|cY != 0) { tx.translate(-cX, -cY); }
     return tx;

(I don't think it should be changed, but I'm throwing it out there as food for 
thought as it may be easier to maintain in the future, but it could also change 
the performance as I'm just speculating from how I remember the optimizations 
work...)

I had a sudden "uh oh" about the commutativity of the operations done in 
setTransform/getTransform (the ones in the webrev), but I just ran the math and it does 
appear to be a correct inverse operation (probably because it is a uniform scale and a 
translate which are more benign than other matrix ops).  So, there's a double check on 
the new math...

                        ...jim

Reply via email to