1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- function attachTransforms(ctx) {
- var svg = document.createElementNS("http://www.w3.org/2000/svg",'svg');
- var xform = svg.createSVGMatrix();
- ctx.getTransform = function(){ return xform; };
- var savedTransforms = [];
- var save = ctx.save;
- ctx.save = function(){
- savedTransforms.push(xform.translate(0,0));
- return save.call(ctx);
- };
- var restore = ctx.restore;
- ctx.restore = function(){
- xform = savedTransforms.pop();
- return restore.call(ctx);
- };
- var scale = ctx.scale;
- ctx.scale = function(sx,sy){
- xform = xform.scaleNonUniform(sx,sy);
- return scale.call(ctx,sx,sy);
- };
- var rotate = ctx.rotate;
- ctx.rotate = function(radians){
- xform = xform.rotate(radians*180/Math.PI);
- return rotate.call(ctx,radians);
- };
- var translate = ctx.translate;
- ctx.translate = function(dx,dy){
- xform = xform.translate(dx,dy);
- return translate.call(ctx,dx,dy);
- };
- var transform = ctx.transform;
- ctx.transform = function(a,b,c,d,e,f){
- var m2 = svg.createSVGMatrix();
- m2.a=a; m2.b=b; m2.c=c; m2.d=d; m2.e=e; m2.f=f;
- xform = xform.multiply(m2);
- return transform.call(ctx,a,b,c,d,e,f);
- };
- var setTransform = ctx.setTransform;
- ctx.setTransform = function(a,b,c,d,e,f){
- xform.a = a;
- xform.b = b;
- xform.c = c;
- xform.d = d;
- xform.e = e;
- xform.f = f;
- return setTransform.call(ctx,a,b,c,d,e,f);
- };
- var pt = svg.createSVGPoint();
- ctx.transformedPoint = function(x,y){
- pt.x=x; pt.y=y;
- return pt.matrixTransform(xform.inverse());
- };
- }
|