Hi Maria > > > Hi Holger, > > I tried it in internet explorer with svgviewer 3 and there is an > error message: Microsoft JScript runtime error- "Object doesn't > support this property or method Line: 4, column: 0"
i forgot that getScreenCTM() is not implemented in ASV3. i use ASV6. the workaround for ASV3 is a bit more complicated. see code at the end of this post. > > I also tried it in Opera (no error messages), but all elements seem > to zoomed in/out together...nothing stays stable in shape. Opera only supports SVGTiny 1.1 there is not script controll !!! > > Do I do something wrong? no, my mistake! > > Thanks, > > here is the working code for ASV3, of course it works in ASV6 as well as in firefox with native svg support, though in firefox, zoom and pan events are not implemented. <?xml version="1.0"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="reposition()" onscroll="reposition()" onzoom="reposition()" onresize="reposition()" viewBox="0 0 1024 768" > <script><![CDATA[ function reposition(){ g=document.getElementById("fixedContent") m=getScreenCTM(document.documentElement) m=m.inverse() g.setAttribute("transform","matrix("+m.a+",0,0,"+m.d+","+m.e+","+m.f+")") } function getScreenCTM(doc){ //my own implementation of getScreenCTM as the one found in gecko is currently broken see bug: var root=doc var sCTM= root.createSVGMatrix() var tr= root.createSVGMatrix() var par=root.getAttribute("preserveAspectRatio") if (par==null || par=="") par="xMidYMid meet"//setting to default value parX=par.substring(0,4) //xMin;xMid;xMax parY=par.substring(4,8)//YMin;YMid;YMax; ma=par.split(" ") mos=ma[1] //meet;slice //get dimensions of the viewport sCTM.a= 1 sCTM.d=1 sCTM.e= 0 sCTM.f=0 w=root.getAttribute("width") if (w==null || w=="") w=innerWidth h=root.getAttribute("height") if (h==null || h=="") h=innerHeight // get the ViewBox vba=root.getAttribute("viewBox") if(vba==null) vba="0 0 "+w+" "+h var vb=vba.split(" ")//get the viewBox into an array //-------------------------------------------------------------------------- //create a matrix with current user transformation tr.a= root.currentScale tr.d=root.currentScale tr.e= root.currentTranslate.x tr.f=root.currentTranslate.y //scale factors sx=w/vb[2] sy=h/vb[3] //meetOrSlice if(mos=="slice"){ s=(sx>sy ? sx:sy) }else{ s=(sx<sy ? sx:sy) } //preserveAspectRatio="none" if (par=="none"){ sCTM.a=sx//scaleX sCTM.d=sy//scaleY sCTM.e=- vb[0]*sx //translateX sCTM.f=- vb[0]*sy //translateY sCTM=tr.multiply(sCTM)//taking user transformations into acount return sCTM } sCTM.a=s //scaleX sCTM.d=s//scaleY //------------------------------------------------------- switch(parX){ case "xMid": sCTM.e=((w-vb[2]*s)/2) - vb[0]*s //translateX break; case "xMin": sCTM.e=- vb[0]*s//translateX break; case "xMax": sCTM.e=(w-vb[2]*s)- vb[0]*s //translateX break; } //------------------------------------------------------------ switch(parY){ case "YMid": sCTM.f=(h-vb[3]*s)/2 - vb[1]*s //translateY break; case "YMin": sCTM.f=- vb[1]*s//translateY break; case "YMax": sCTM.f=(h-vb[3]*s) - vb[1]*s //translateY break; } sCTM=tr.multiply(sCTM)//taking user transformations into acount return sCTM } ]]> </script> <g> <rect x="0" y="0" width="1024" height="768"/> </g> <g id="fixedContent"> <rect x="0" y="0" width="200" height="768" fill="green"/> </g> </svg> hth Holger ----- To unsubscribe send a message to: [EMAIL PROTECTED] -or- visit http://groups.yahoo.com/group/svg-developers and click "edit my membership" ---- Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/svg-developers/ <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/

