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/
 


Reply via email to