chromium/third_party/blink/web_tests/svg/as-background-image/resources/balloon.svg

<svg width="100%" height="100%"
	xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
	 onload="startup(evt)"
>
<script>
<![CDATA[
	var svgDocument;
		balloon=null;
		count=0
		running=true
		xlow=-200
		xhigh=100
		x=xlow
		incr=5
		dir=1
		xdir=1
		ydir=1
		xspeed=.7
		yspeed=.4
		xcur=50
		ycur=50
		ylow=-25
		yhigh=100
		numlines=35
		rightedge=null
		Hi=new Array()
		Up=new Array()
		bottomedge=null
		svgns = 'http://www.w3.org/2000/svg';
		xlinkns = 'http://www.w3.org/1999/xlink';
function startup(evt) {
	O=evt.target
	O.setAttribute("onclick","running=!running;animate()")
	svgDocument = O.ownerDocument;
	balloon = svgDocument.getElementById("balloon");
	path=svgDocument.getElementById("Q")
	A=getDisplaySize()
	rightedge=A.width
	bottomedge=A.height - 40
	sky=svgDocument.getElementById("sky")
	sky.setAttribute("cy",50)
	sky.setAttribute("cx",rightedge/2)
	sky.setAttribute("r",rightedge/1.45)
	draw("peaks2",7,90,30)
	draw("peaks",10,80,25)
	draw("mountains",15,55,22)
	draw("foothills",22,35,15)
	
	moredraw();
}
function getDisplaySize()
{
//function due to G. Wade Johnson <svg-developers.yahoogroups.com>
//Date: Mon, 12 Dec 2005 20:57:49 -0600
//Subject: Re: [svg-developers] Screen extents
    var extents = null;
    try{
        var view = document.documentElement.viewport;
        extents = {width: view.width,height: view.height};
    }
    catch(e){
        extents = {width: window.innerWidth, height: window.innerHeight};
    }
    return extents;
}
P=new Array()
offset=50
function draw(id,humps,hi,up){
	IDS[IDS.length]=id
	Hi[id]=hi
	Up[id]=up
	var peaks=3*humps
	P[id]=new Array;
	t=svgDocument.getElementById(id)
	for (i=0;i<peaks;i++){
		P[id][i]= {x: Math.floor(Math.random()*(rightedge+2*offset)-offset),
				y: Math.floor(Math.random()*hi)+up};
	}
	P[id].sort(compare)
	s=render(P[id],0)
	t.setAttribute("d",s)
}
function compare(x,y){
	if (x.x<y.x) return -1
	else return 1
}
function render(Arr,lo){
	
	var low=Math.floor(bottomedge*.9)
	var s="M "+(-offset)+" "+(low)+" "
	s+=(7-offset)+" "+(low - Arr[0].y)+" "
	for (i=1;i<Arr.length;i++){
		if ((i)%3==0) s+="C "+Arr[i].x+" "+(low - Arr[i].y)+" "
		else 
		s+=Arr[i].x+" "+(low - Arr[i].y)+" "
	}
	s+="L "+(rightedge+offset)+" "+(low )+" Q "+(rightedge/2)+" "+(low)+" "+(-offset)+" "+(low)+" z"
	return s
}
function moredraw(){
	for (j=0;j<numlines;j++) another(100+j*10)
	Pa = svgDocument.createElementNS(svgns,"path");
	Pa.setAttribute("d", "M 194 340 C 185 360 215 360 206 340"); 
	Pa.setAttribute("stroke", "#440")
	Pa.setAttribute("stroke-width", "3")
	Pa.setAttribute("fill", "#551")
	balloon.appendChild(Pa);
	animate()
}
var xlinkns = "http://www.w3.org/1999/xlink";
function another(x){
	Pa = svgDocument.createElementNS(svgns,"path");
	Pa.setAttribute("id", "P"+count); count++
	Pa.setAttribute("d", "M 100 0 C 200 200 300 200 100 300"); 
	Pa.setAttribute("stroke", color(16,16,12))
	Pa.setAttribute("stroke-width", "5")
	Pa.setAttribute("fill", "none")
	balloon.appendChild(Pa);
}
function animate(){
	if (!running) return
	x+=incr*dir
	if ((x<xlow+incr)||(x>xhigh+incr))dir=-dir
	onestep(x)
	window.setTimeout("animate()",10)
}
IDS=new Array
mea=0
function onestep(x){
	mea++
	balloon.setAttribute("transform","translate("+xcur+","+ycur+")")
	for (i=0;i<count;i++){
		Pa = svgDocument.getElementById("P"+i);
		Pa.setAttribute("d", "M 200 20 C "+((i*18)+x)+" 100 "+(220- x/2)+" 250 200 340 "); 
	}
	adj=0
	for (id in IDS){
		for (j=0;j<P[IDS[id]].length;j++){
			P[IDS[id]][j].x-=(adj*adj/4+1)/2
		}
		adj++
		if(P[IDS[id]][3].x<0){
			st=rightedge+offset
			for (k=0;k<3;k++){
				newx=st+Math.ceil(80*Math.random()/P[IDS[id]].length)
				Q={x: newx,
					y: Math.floor(Math.random()*Hi[IDS[id]]+Up[IDS[id]])}
					st=newx
				P[IDS[id]].push(Q);
				R=P[IDS[id]].shift()
			}
		}
		s=render(P[IDS[id]],R.y)
		t=svgDocument.getElementById(IDS[id])
		t.setAttribute("d",s)
	}
	xcur=xcur+xspeed*xdir
	ycur=ycur+yspeed*ydir
	if((xcur<xlow+150)||(xcur>rightedge/1.5)) xdir=-xdir
	if((ycur<ylow)||(ycur>yhigh)) ydir=-ydir
	if (Math.floor(xcur)%10==0)recolorone(color(16,12,8))
	if (Math.floor(xcur)%20==1)recolorone(color(16,16,0))
	if (Math.floor(xcur)%30==2)recolorone("#da0")
}
first=true
function recolorone(c){
	r=Math.floor(Math.random()*count)
	Pa = svgDocument.getElementById("P"+r);
	Pa.setAttribute("stroke",c); 
}
function color(xr,xg,xb){
	r=Math.floor(Math.random()*xr)
	R=r.toString(16)
	g=Math.floor(Math.random()*xg)
	G=g.toString(16)
	b=Math.floor(Math.random()*xb)
	B=b.toString(16)
	return "#"+R+B+G
}
	//]]>
</script>
<defs>
<path id="Q" stroke="black" stroke-width="3"/>
<linearGradient id="backsky" x1="0%" y1="0%" x2="0%" y2="100%">
	<stop offset="0" stop-color="#888"/>
	<stop offset=".5" stop-color="#0ff"/>
	<stop offset=".9"  stop-color="#ec7"/>
	
	
</linearGradient> 
<radialGradient id="sky" cx="500" cy="300" r="500" gradientUnits="userSpaceOnUse">
	<stop  offset="0" stop-color="#0ff" stop-opacity="1"/>
	<stop  offset=".2" stop-color="#0ff" stop-opacity=".6"/>
	<stop  offset=".71" stop-color="#000" stop-opacity="0"/>
	<stop  offset=".80" stop-color="#8ff" stop-opacity="1"/>
</radialGradient>
<linearGradient id="peak2" x1="0%" y1="0%" x2="0%" y2="100%">
	<stop offset="0" stop-color="#eff"/>
	<stop offset=".2" stop-color="#9cd"/>
	<stop offset=".4" stop-color="#88b"/>
	<stop offset=".9" stop-color="#9a9"/>
</linearGradient> 
<linearGradient id="peak" x1="0%" y1="0%" x2="0%" y2="100%">
	<stop offset="0" stop-color="#ddc"/>
	<stop offset=".2" stop-color="#998"/>
	<stop offset=".4" stop-color="#a8b"/>
	<stop offset=".9" stop-color="#aa6"/>
</linearGradient> 
<linearGradient id="mount" x1="0%" y1="0%" x2="0%" y2="100%">
	<stop offset="0" stop-color="#589"/>
	<stop offset=".2" stop-color="#869"/>
	<stop offset=".6" stop-color="#898"/>
</linearGradient> 

<linearGradient id="foot" x1="0%" y1="0%" x2="0%" y2="100%">
	<stop offset="0" stop-color="#b87"/>
	<stop offset=".1" stop-color="#b63"/>
	<stop offset=".70" stop-color="#c86"/>
	<stop offset=".90"  stop-color="#bc7"/>
</linearGradient> 
</defs>
<rect  height="100%" width="100%" opacity="1" fill="url(#backsky)"/>

<path id="peaks2" d="M 0 500 400 400 800 500 z" fill="url(#peak2)" />
<path id="peaks" d="M 0 500 400 400 800 500 z" fill="url(#peak)" />
<path id="mountains" d="M 0 500 400 400 800 500 z" fill="url(#mount)" />

<path id="foothills" d="M 0 500 400 400 800 500 z" fill="url(#foot)" stroke="none"/>
<rect  height="100%" width="100%" opacity="1" fill="url(#sky)"/>
<g id="balloon" opacity="0.7">
</g>
</svg>