~ubuntu-branches/ubuntu/quantal/enigmail/quantal-security

« back to all changes in this revision

Viewing changes to mozilla/build/pgo/js-input/3d-thingy.html

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2013-09-13 16:02:15 UTC
  • mfrom: (0.12.16)
  • Revision ID: package-import@ubuntu.com-20130913160215-u3g8nmwa0pdwagwc
Tags: 2:1.5.2-0ubuntu0.12.10.1
* New upstream release v1.5.2 for Thunderbird 24

* Build enigmail using a stripped down Thunderbird 17 build system, as it's
  now quite difficult to build the way we were doing previously, with the
  latest Firefox build system
* Add debian/patches/no_libxpcom.patch - Don't link against libxpcom, as it
  doesn't exist anymore (but exists in the build system)
* Add debian/patches/use_sdk.patch - Use the SDK version of xpt.py and
  friends
* Drop debian/patches/ipc-pipe_rename.diff (not needed anymore)
* Drop debian/patches/makefile_depth.diff (not needed anymore)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<html>
 
2
<head>
 
3
<title>3d thingy</title>
 
4
<style type="text/css">
 
5
div.z2 { position:absolute; z-index:2; }
 
6
div.z1 { position:absolute; z-index:1; }
 
7
</style>
 
8
<script type="text/javascript">
 
9
/**************************************************************************
 
10
JavaScript Graphics Library 0.0.1, Updated Source Code at Scriptersoft.com
 
11
Copyright (C) 2005  Kurt L. Whicher
 
12
November,13,2005
 
13
 
 
14
This library is free software; you can redistribute it and/or
 
15
modify it under the terms of the GNU Lesser General Public
 
16
License as published by the Free Software Foundation; either
 
17
version 2.1 of the License, or (at your option) any later version.
 
18
 
 
19
This library is distributed in the hope that it will be useful,
 
20
but WITHOUT ANY WARRANTY; without even the implied warranty of
 
21
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
22
Lesser General Public License for more details.
 
23
 
 
24
You should have received a copy of the GNU Lesser General Public
 
25
License along with this library; if not, write to the Free Software
 
26
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
27
**************************************************************************/
 
28
 
 
29
//________________________________________ global variables
 
30
 
 
31
var S_piDoubled=Math.PI*2;
 
32
var S_deg2Rad=Math.PI/180;
 
33
 
 
34
//_______________________________________________ functions
 
35
 
 
36
function S_matrix() {
 
37
  return [1,0,0,0,
 
38
          0,1,0,0,
 
39
          0,0,1,0,
 
40
          0,0,0,1];
 
41
}
 
42
function S_vec2D(x,y) { this.x=x; this.y=y; }
 
43
function S_vec3D(x,y,z) { this.x=x; this.y=y; this.z=z; }
 
44
function S_subVec2D(a,b) {
 
45
  return new S_vec2D(a.x-b.x, a.y-b.y);
 
46
}
 
47
function S_subVec3D(a,b) {
 
48
  return new S_vec3D(a.x-b.x, a.y-b.y, a.z-b.z);
 
49
}
 
50
function S_dotVec3D(a, b) { return a.x*b.x+a.y*b.y+a.z*b.z; }
 
51
function S_cross(a,b) {
 
52
  return new S_vec3D( a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x);
 
53
}
 
54
function S_lengthSquaredVec3D(v) { return S_dotVec3D(v,v); }
 
55
function S_lengthVec3D(v) { return Math.sqrt(S_lengthSquaredVec3D(v)); }
 
56
function S_normalizeVec3D(v) {
 
57
  var l=S_lengthVec3D(v), nv=new S_vec3D(0,0,0);
 
58
  if(l!=0) { nv.x=v.x/l; nv.y=v.y/l; nv.z=v.z/l; }
 
59
  return nv;
 
60
}
 
61
function S_rotate(m,ax,a) { // transformation matrix, axis, angle
 
62
  var i,j,ij=new Array(),v=new Array(),c=Math.cos(a),s=Math.sin(a);
 
63
  if (ax=="x") ij=[1,2,5,6,9,10,13,14];
 
64
  else if (ax=="y") ij=[2,0,6,4,10,8,14,12];
 
65
  else if (ax=="z") ij=[0,1,4,5,8,9,12,13];
 
66
  for (i=0;i<8;i++) v[i]=m[ij[i]];
 
67
  for (i=0,j=1;i<8;i+=2,j+=2) {
 
68
    m[ij[i]]=v[i]*c-v[j]*s;
 
69
    m[ij[j]]=v[i]*s+v[j]*c
 
70
  }
 
71
}
 
72
function S_checkBrowser() {
 
73
  if (document.getElementById) return true; else return false;
 
74
}
 
75
function S_zIndex(e,z) { document.getElementById(e).style.zIndex=z; }
 
76
function S_rgbColor(r,g,b) {
 
77
  var i, c=[r,g,b];
 
78
  for(i=0; i<3; i++) {
 
79
    c[i]=Math.floor(c[i]);
 
80
    if(c[i]<0) c[i]=0; else if(c[i]>255) c[i]=255;
 
81
  }
 
82
  return c;
 
83
}
 
84
function S_rgbColorString(c) {
 
85
  return "rgb("+c[0]+","+c[1]+","+c[2]+")";
 
86
}
 
87
function S_vertice(x,y,z) {
 
88
  this.x=x; this.y=y; this.z=z; this.w=1;
 
89
  this.t=new S_vec3D(x,y,z); // transformed 3d
 
90
  this.p=new S_vec2D(0,0); // projected 2d
 
91
}
 
92
function S_face(v0,v1,v2,c) { // 3 vertice faces
 
93
  this.v=[v0,v1,v2]; this.c=c; this.b=0; // b:brightness
 
94
  this.d=true; // display: true or false
 
95
}
 
96
// x coordinate, number of vertices, distance
 
97
function S_verticeRing(x,nv,d) {
 
98
  var i,a,v=new Array();
 
99
  for(i=0;i<nv;i++) {
 
100
    a=S_piDoubled*i/nv;
 
101
    v[i]=new S_vertice(x,d*Math.sin(a),d*Math.cos(a));
 
102
  }
 
103
  return v;
 
104
}
 
105
function S_triangleRing(r1,r2,c,clr) { // rows 1 & 2, cols, color
 
106
  var i,j,tr=new Array();
 
107
  for(i=0,j=1;i<c;i++,j=++j%c) {
 
108
    tr.push(new S_face(r1+i,r2+i,r2+j,clr));
 
109
    tr.push(new S_face(r1+i,r2+j,r1+j,clr));
 
110
  }
 
111
  return tr;
 
112
}
 
113
function S_model(v,f) {
 
114
  // vertice & face arrays, transformation matrix, display boolean
 
115
  this.v=v; this.f=f, this.tm=S_matrix(), this.d=true;
 
116
}
 
117
S_model.prototype.S_rotateX=function(a) {
 
118
  S_rotate(this.tm,"x",a*=S_deg2Rad);
 
119
}
 
120
S_model.prototype.S_rotateY=function(a) {
 
121
  S_rotate(this.tm,"y",a*=S_deg2Rad);
 
122
}
 
123
S_model.prototype.S_rotateZ=function(a) {
 
124
  S_rotate(this.tm,"z",a*=S_deg2Rad);
 
125
}
 
126
S_model.prototype.S_show=function() { this.d=true; }
 
127
S_model.prototype.S_hide=function() { this.d=false; }
 
128
function S_cube(d,c) { //distance & color
 
129
  return new S_cone(d,d,Math.cos(Math.PI/4)*d*2,1,4,c);
 
130
}
 
131
function S_cylinder(w,h,r,c,clr,e) {
 
132
  return new S_cone(w,w,h,r,c,clr,e);
 
133
}
 
134
// width, height, "rows", "columns", color, ends
 
135
function S_cone(w1,w2,h,r,c,clr,e) {
 
136
  var i,r1=0,r2=c,v=new Array(),t=new Array(),rxc=r*c;
 
137
  for(i=0;i<=r;i++)
 
138
    v=v.concat(S_verticeRing(h*(0.5-i/r),c,w1*i/r+w2*(r-i)/r));
 
139
  for(i=0;i<r;i++,r1+=c,r2+=c)
 
140
    t=t.concat(S_triangleRing(r1,r2,c,clr));
 
141
  if (e!="hideEnds")
 
142
    for(i=1;i<(c-1);i++) {
 
143
      t.push(new S_face(0,i,i+1,clr));
 
144
      t.push(new S_face(rxc,rxc+i+1,rxc+i,clr));
 
145
    }
 
146
  return new S_model(v,t);
 
147
}
 
148
function S_sphere(d,r,c,clr) {
 
149
  // distance, "rows">=2, "columns">=3, color paramaters
 
150
  var v=new Array(),t=new Array(),r_1xc=(r-1)*c,r_2xc=(r-2)*c;
 
151
  var i,j,tmp,r1=0,r2=c;
 
152
  for(i=1;i<r;i++) {
 
153
    tmp=Math.PI*i/r;
 
154
    v=v.concat(S_verticeRing(d*Math.cos(tmp),c,Math.sin(tmp)*d));
 
155
  }
 
156
  v.push(new S_vertice( d,0,0));
 
157
  v.push(new S_vertice(-d,0,0));
 
158
  for(i=0;i<(r-2);i++,r1+=c,r2+=c)
 
159
    t=t.concat(S_triangleRing(r1,r2,c,clr));
 
160
  for(i=0,j=1;i<c;i++,j=++j%c) {
 
161
    t.push(new S_face(r_1xc,i,j,clr));
 
162
    t.push(new S_face(r_1xc+1,r_2xc+j,r_2xc+i,clr));
 
163
  }
 
164
  return new S_model(v,t);
 
165
}
 
166
S_model.prototype.S_scale=function(x) { 
 
167
  this.tm[0]*=x; this.tm[5]*=x; this.tm[10]*=x;
 
168
}
 
169
S_model.prototype.S_faceColor=function(i,c) { this.f[i].c=c; }
 
170
S_model.prototype.S_scaleX=function(s) { this.tm[0]*=s; }
 
171
S_model.prototype.S_scaleY=function(s) { this.tm[5]*=s; }
 
172
S_model.prototype.S_scaleZ=function(s) { this.tm[10]*=s; }
 
173
function S_scene(dv,l,t,w,h,cmra) { // left, top, width, height
 
174
  this.dv=dv;
 
175
  this.ps=1; // pixel size
 
176
  this.l=l; this.t=t; this.w=w; this.h=h;
 
177
  this.cx=l+w/2; this.cy=t+h/2; // center x, center y
 
178
  this.dt="paint"; // output type
 
179
  this.m=new Array(); // model array
 
180
  this.lght=new S_light();
 
181
  this.lc=S_rgbColor(255,255,255); // light color
 
182
  this.cmra=-cmra; // camera on z axis
 
183
  this.bfr=S_buffer(h,w);
 
184
}
 
185
function S_buffer(h,w) {
 
186
  var i, j, b=new Array();
 
187
  for(i=0;i<h;i++) {
 
188
    b[i]=new Array();
 
189
    for(j=0;j<w;j++) b[i][j]=new S_pixel();
 
190
  }
 
191
  return b;
 
192
}
 
193
function S_pixel() { // display boolean, color  
 
194
  this.d=true; this.c=0;
 
195
}
 
196
S_pixel.prototype.S_setColor=function(c) {
 
197
  this.d=true; this.c=c;
 
198
}
 
199
S_pixel.prototype.S_hide=function() { this.d=false; }
 
200
S_scene.prototype.S_pixelSize=function(ps){ this.ps=ps; }
 
201
S_scene.prototype.S_widthAndHeight=function(w,h){ this.w=w; this.h=h; }
 
202
S_scene.prototype.S_center=function(cx,cy){ this.cx=cx; this.cy=cy; }
 
203
S_scene.prototype.S_paint=function(){ this.dt="paint"; }
 
204
S_scene.prototype.S_models=function() {
 
205
  var i; this.m=new Array();
 
206
  for(i=0;i<arguments.length;i++) this.m.push(arguments[i]);
 
207
}
 
208
S_scene.prototype.S_lightColor=function(c){ this.lc=c; }
 
209
S_scene.prototype.S_project=function() {
 
210
  var i, j, v, tm, d, m;
 
211
  for(i=0;i<this.m.length;i++) {
 
212
    m=this.m[i]; tm=this.m[i].tm;
 
213
    for(j=0;j<m.v.length;j++) {
 
214
      v=m.v[j];
 
215
      v.t.x=v.x*tm[0]+v.y*tm[4]+v.z*tm[8]+v.w*tm[12];
 
216
      v.t.y=v.x*tm[1]+v.y*tm[5]+v.z*tm[9]+v.w*tm[13];
 
217
      v.t.z=v.x*tm[2]+v.y*tm[6]+v.z*tm[10]+v.w*tm[14];
 
218
      d=(this.cmra-v.t.z/2);
 
219
      if (d<0) {
 
220
        v.p.x=(this.cmra*v.t.x/d)+this.cx;
 
221
        v.p.y=-(this.cmra*v.t.y/d)+this.cy;
 
222
      }
 
223
    }
 
224
  }
 
225
}
 
226
S_scene.prototype.S_display=function(disp){
 
227
  var i, j, k, s="", ds, c, cnt=0; // ds:div start
 
228
  this.tr=new Array(); // triangles ready to draw
 
229
  this.S_project();
 
230
  this.S_adjustLight();
 
231
  this.S_clearBuffer();
 
232
  for(i=0;i<this.m.length;i++) {
 
233
    this.m[i].S_setupFaces(this.tr,this.lght.t);
 
234
    for(j=0;j<this.tr.length;j++) { // loop through triangles
 
235
      c=S_divColor(this.tr[j].c,this.lc,this.tr[j].b);
 
236
      S_setupBuffer(this,this.tr[j].p,c);
 
237
    }
 
238
  }
 
239
  for(i=0;i<this.h;i++) {
 
240
    ds=-1;
 
241
    for(j=0,k=1;j<this.w;j++,k++) {
 
242
      if((this.bfr[i][j].d==true)&&(ds==-1)) ds=j;
 
243
      if( (this.bfr[i][j].d==true)&&
 
244
          ( (k==this.w)||
 
245
            (this.bfr[i][k].d==false)||
 
246
            (!S_sameColor(this.bfr[i][j].c, this.bfr[i][k].c)) ) ) {
 
247
        s+=S_divString(S_rgbColorString(this.bfr[i][j].c),this.t+i*this.ps,this.l+ds*this.ps,this.ps,(k-ds)*this.ps);
 
248
        ds=-1;
 
249
        cnt++;
 
250
      }
 
251
    }
 
252
  }
 
253
  S_writeInnerHTML(this.dv,s);
 
254
  if(disp=="ShowCount") alert(cnt);
 
255
}
 
256
S_scene.prototype.S_displayAndShowCount=function(){
 
257
  this.S_display("ShowCount");
 
258
}
 
259
S_model.prototype.S_setupFaces=function(tr,lght) {
 
260
  var i, j, fn, v, p=new Array(); // vertice & projection arrays
 
261
  var z=new Array();
 
262
  for(i=0;i<this.f.length;i++) { // loop through faces
 
263
    v=this.f[i].v;
 
264
    for(j=0;j<3;j++) { p[j]=this.v[v[j]].p; }
 
265
    for(j=0;j<3;j++) { z[j]=this.v[v[j]].t.z; }
 
266
    if (((p[1].x-p[0].x)*(p[2].y-p[0].y))<((p[2].x-p[0].x)*(p[1].y-p[0].y))) {
 
267
      this.f[i].d=true;
 
268
      fn=S_faceNormal(this.v[v[0]].t, this.v[v[1]].t, this.v[v[2]].t);
 
269
      this.f[i].b=S_faceIntensity(fn,lght);
 
270
      tr.push(new S_triangle(fn,this.f[i].b,p.slice(),this.f[i].c,z));
 
271
    } else { this.f[i].d=false; }
 
272
  }
 
273
}
 
274
// normal, brightness, array of 2D projection coordinates, and z depth
 
275
function S_triangle(fn,b,p,c,z) {
 
276
  this.fn=fn; this.b=b; this.p=p; this.z=z; this.c=c;
 
277
}
 
278
function S_faceNormal(a,b,c){
 
279
  var cr=S_cross(S_subVec3D(b,a), S_subVec3D(b,c));
 
280
  return S_normalizeVec3D(cr);
 
281
}
 
282
function S_faceIntensity(fn,lght) {
 
283
  var i=S_dotVec3D(fn,lght); return (i>0)?i:0;
 
284
}
 
285
function S_divColor(c,lc,b) { // c:array of colors
 
286
  var i, clr=new Array();
 
287
  for(i=0;i<3;i++) clr[i]=Math.floor(c[i]+(lc[i]-c[i]+1)*b);
 
288
  for(i=0;i<3;i++) if (clr[i]>lc[i]) { clr[i]=lc[i]; }
 
289
  return S_rgbColor(clr[0],clr[1],clr[2]);
 
290
}
 
291
function S_sameColor(a,b) {
 
292
  for(var i=0;i<3;i++) { if(a[i]!=b[i]) return false; }
 
293
  return true;
 
294
}
 
295
function S_setupBuffer(scn,p,c) {
 
296
  // temp, counters, min, max, scanline, vertice & slope arrays
 
297
  var t,i,j,xmin=new Array(),xmax=new Array(),sl;
 
298
  var v=new Array(), m=new Array();
 
299
  p.sort(function(a,b) { return a.y-b.y; } );
 
300
  for(i=0;i<3;i++) p[i].y=Math.floor(p[i].y);
 
301
  v[0]=S_subVec2D(p[1],p[0]);
 
302
  v[1]=S_subVec2D(p[2],p[0]);
 
303
  v[2]=S_subVec2D(p[2],p[1]);
 
304
  for(i=0;i<3;i++) { m[i]=(v[i].y!=0)?v[i].x/v[i].y:0; }
 
305
  for(i=0,sl=scn.t;i<scn.h;i++,sl++) {
 
306
    xmin[i]=1000;xmax[i]=0;
 
307
    if((sl>=p[0].y)&&(sl<=p[2].y)) {
 
308
      xmin[i]=xmax[i]=Math.floor(p[0].x+m[1]*(sl-p[0].y));
 
309
    }
 
310
    if((sl>=p[0].y)&&(sl<=p[1].y)) {
 
311
      t=Math.floor(p[0].x+m[0]*(sl-p[0].y));
 
312
      if(t<xmin[i]) xmin[i]=Math.floor(t);
 
313
      else if(t>xmax[i]) xmax[i]=Math.floor(t);
 
314
    }
 
315
    if((sl>=p[1].y)&&(sl<=p[2].y)) {
 
316
      t=Math.floor(p[1].x+m[2]*(sl-p[1].y));
 
317
      if(t<xmin[i]) xmin[i]=Math.floor(t);
 
318
      else if(t>xmax[i]) xmax[i]=Math.floor(t);
 
319
    }
 
320
    for(j=0;j<scn.w;j++)
 
321
      if((j>=(xmin[i]-scn.l))&&(j<=(xmax[i]-scn.l))) {
 
322
        scn.bfr[i][j].d=true; scn.bfr[i][j].c=c;          
 
323
      }
 
324
  }
 
325
}
 
326
function S_light() {
 
327
  this.x=0; this.y=1; this.z=0; this.w=1; // original coordinates
 
328
  this.t=new S_vec3D(0,1,0); // transformed coordinates
 
329
  this.tm=new S_matrix();
 
330
}
 
331
S_scene.prototype.S_adjustLight=function() {
 
332
  var m=this.lght.tm, l=this.lght;
 
333
  l.t.x=l.x*m[0]+l.y*m[4]+ l.z*m[8]+l.w*m[12];
 
334
  l.t.y=l.x*m[1]+l.y*m[5]+ l.z*m[9]+l.w*m[13];
 
335
  l.t.z=l.x*m[2]+l.y*m[6]+ l.z*m[10]+l.w*m[14];
 
336
  l.t=S_normalizeVec3D(l.t);
 
337
}
 
338
S_scene.prototype.S_lightRotateX=function(a) {
 
339
  S_rotate(this.lght.tm,"x",a*=S_deg2Rad);
 
340
}
 
341
S_scene.prototype.S_lightRotateY=function(a) {
 
342
  S_rotate(this.lght.tm,"y",a*=S_deg2Rad);
 
343
}
 
344
S_scene.prototype.S_lightRotateZ=function(a) {
 
345
  S_rotate(this.lght.tm,"z",a*=S_deg2Rad);
 
346
}
 
347
S_scene.prototype.S_clearBuffer=function() {
 
348
  for(var i=0;i<this.h;i++)
 
349
    for(var j=0;j<this.w;j++) this.bfr[i][j].d=false;
 
350
}
 
351
function S_divString(b,t,l,h,w) {
 
352
  var s='<div style="background-color:'+b+';position:absolute;';
 
353
  s+='top:'+t+'px;left:'+l+'px;height:'+h+'px;width:'+w;
 
354
  return s+'px;font-size:0;visibility:visible"></div>';
 
355
}
 
356
function S_writeInnerHTML(id,text) {
 
357
  document.getElementById(id).innerHTML = text;
 
358
}
 
359
</script>
 
360
</head>
 
361
<body>
 
362
<div class="z1" id="graphicsDiv">Text to be replaced with graphics.</div>
 
363
<script type="text/javascript">
 
364
if(S_checkBrowser()) {
 
365
var intrvl;
 
366
// Create a new scene with parameters for
 
367
// div id, left, top, width, height, and camera distance
 
368
var scn=new S_scene("graphicsDiv",75,25,100,100,300);
 
369
scn.S_pixelSize(3); // set scene pixel size
 
370
var c=S_rgbColor(0,0,127); // color
 
371
var c2=S_rgbColor(0,127,127); // color
 
372
var m=new S_cube(18,c); // model
 
373
m.S_faceColor(4,c2);
 
374
m.S_faceColor(5,c2);
 
375
m.S_scaleX(2.5); // scale model along x axis
 
376
scn.S_models(m); // add model(s) to scene
 
377
scn.S_lightRotateX(-25); // adjust light
 
378
function r(){ // rotation function
 
379
m.S_rotateX(11); // rotate model around y axis
 
380
m.S_rotateY(5); // rotate model around y axis
 
381
m.S_rotateZ(7); // rotate model around z axis
 
382
scn.S_display(); // display scene
 
383
} // end rotation function
 
384
intrvl=setInterval('r();',75);
 
385
}
 
386
</script>
 
387
 
 
388
</body>
 
389
</html>
 
390