fixed testcase 'scope'
[swftools.git] / lib / example / transtest.c
1 /* transtest.c
2
3    Example for transforming a textured triangle
4    
5    Part of the swftools package.
6
7    Copyright (c) 2001 Rainer Böhme <rfxswf@reflex-studio.de>
8  
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
22
23 #include <stdio.h>
24 #include <fcntl.h>
25 #include <math.h>
26 #include "../rfxswf.h"
27
28 #define QUALITY 80
29 #define ID_BITMAP       2004
30 #define ID_SHAPE        2005
31
32   
33 int main (int argc,char ** argv)
34 { SWF swf;
35   TAG* t;
36   RGBA rgb;
37   SRECT r;
38   SHAPE* s;
39   S32 width = 800,height = 800;
40   int fs,ls; // line & fillstyle
41   JPEGBITS* jpeg;
42   MATRIX m;  
43   
44   int f,i,j,frame;
45   
46   memset(&swf,0x00,sizeof(SWF));
47
48   swf.fileVersion    = 4;
49   swf.frameRate      = 0x4000;
50   swf.movieSize.xmax = 4*width;
51   swf.movieSize.ymax = 4*height;
52
53   swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
54   t = swf.firstTag;
55
56         rgb.r = 0xff;
57         rgb.g = 0xff;
58         rgb.b = 0xff;
59         swf_SetRGB(t,&rgb);
60
61     t = swf_InsertTag(t,ST_DEFINEBITSJPEG2);
62
63          swf_SetU16(t,ID_BITMAP);
64          
65          if (FAILED(swf_SetJPEGBits(t,"texture.jpg",QUALITY)))
66          { fprintf(stderr,"Error: texture.jpg (256x256) not found in work directory.\n");
67            exit(1);
68          }
69          
70     t = swf_InsertTag(t,ST_DEFINESHAPE);
71     
72          swf_ShapeNew(&s);
73          rgb.b = rgb.g = rgb.r = 0x00;
74          ls = 0;
75          rgb.b = 0xff;
76   
77          fs = swf_ShapeAddBitmapFillStyle(s,NULL,ID_BITMAP,0);
78     
79          swf_SetU16(t,ID_SHAPE);    // ID   
80          
81          r.xmin = 0;
82          r.ymin = 0;
83          r.xmax = 2*width;
84          r.ymax = 2*height;
85          
86          swf_SetRect(t,&r);
87
88          swf_SetShapeHeader(t,s);
89          
90          swf_ShapeSetAll(t,s,0,0,ls,fs,0);
91          swf_ShapeSetLine(t,s,width,0);
92          swf_ShapeSetLine(t,s,-width,height);
93          swf_ShapeSetLine(t,s,0,-height);
94          swf_ShapeSetEnd(t);
95
96          swf_ShapeFree(s);
97     
98   for (frame=0;frame<64;frame++)
99   {
100
101     /* Test procedure for swf_MatrixJoin
102
103     MATRIX m1,m2;
104
105     // set m1 to left rotation
106      
107     m1.sy = m1.sx = (int)(cos(((float)(frame))/32*3.141)*0x10000);
108     m1.r0 = (int)(sin(((float)(frame))/32*3.141)*0x10000);
109     m1.r1 = -m1.r0;
110     m1.tx = width+frame*4; m1.ty = height;
111
112     // set m2 to right rotation
113
114     m2.sy = m2.sx = (int)(cos(((float)(64-frame))/32*3.141)*0x10000);
115     m2.r0 = (int)(sin(((float)(64-frame))/32*3.141)*0x10000);
116     m2.r1 = -m2.r0;
117     m2.tx = width; m2.ty = height;
118
119     // joining m1 and m2 should lead to no transformation
120
121     swf_MatrixJoin(&m,&m1,&m2);
122
123     */
124
125     int dx0 = width;    // constants of shape 
126     int dy0 = width;
127
128     int px0 = 2*width;  // destination of mapping
129     int py0 = 2*width;
130
131     int px1 = 3*width;
132     int py1 = 2*width-frame*4;
133
134     int px2 = 2*width-frame*8;
135     int py2 = 3*width;
136
137     swf_MatrixMapTriangle(&m,dx0,dy0,px0,py0,px1,py1,px2,py2);
138
139     t = swf_InsertTag(t,ST_PLACEOBJECT2);
140
141         if (!frame)
142          swf_ObjectPlace(t,ID_SHAPE,1,&m,NULL,NULL);
143         else
144           swf_ObjectMove(t,1,&m,NULL);
145  
146     t = swf_InsertTag(t,ST_SHOWFRAME);
147   }
148   
149   
150   t = swf_InsertTag(t,ST_END);
151   
152 //  swf_WriteCGI(&swf);
153
154   f = open("transtest.swf",O_RDWR|O_CREAT|O_TRUNC|O_BINARY,0644);
155   if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n");
156   close(f);
157
158   swf_FreeTags(&swf);
159
160 #ifdef __NT__
161   system("start ..\\transtest.swf");
162 #endif
163   
164   return 0;
165 }
166
167