3 Creates the swf file simple_viewer.swf.
4 I'm not much of an designer. Suggestions and improvements concerning
5 this file or simple_viewer.swf are highly welcome. -mk
7 Part of the swftools package.
9 Copyright (c) 2000, 2001 Matthias Kramm <kramm@quiss.org>
11 This file is distributed under the GPL, see file COPYING for details
21 int button_sizex = 20; //button size in pixels
22 int button_sizey = 20;
24 RGBA button_colors[6]=
25 {{0,0x00,0x00,0x80}, //Idle left
26 {0,0x00,0x00,0x80}, // " right
27 {0,0x20,0x20,0xc0}, //MouseOver left
28 {0,0x20,0x20,0xc0}, // " right
29 {0,0x10,0x10,0xff}, //Down left
30 {0,0x10,0x10,0xff}};// " right
32 int useDefineButton2 = 0; // set this to 1 to use DefineButton2 Tags
33 // instead of DefineButton1
35 //#define USE_WATERMARK 1 // set this flag to print-protect your swfs
37 #define ID_WATERMARK 64
39 int main (int argc,char ** argv)
46 S32 width=1024,height = 768;
52 memset(&swf,0x00,sizeof(SWF)); // set global movie parameters
54 swf.fileVersion = 4; // make flash 4 compatible swf
55 swf.frameRate = 0x1900; // about 0x19 frames per second
57 swf.movieSize.xmax = 20*width; // flash units: 1 pixel = 20 units
58 swf.movieSize.ymax = 20*height;
60 swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
75 /* the "viewport" object will be replaced by swfcombine
76 with the object to browse. It is placed at the
77 upper left corner (0,0), by setting m.tx and m.ty
78 to 0. Therefore, the buttons are "in" the viewport,
80 tag = swf_InsertTag(tag,ST_DEFINESPRITE);
81 swf_SetU16(tag, 23); //id
82 swf_SetU16(tag, 0); //frames
83 tag = swf_InsertTag(tag,ST_END);
84 tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
87 swf_ObjectPlace(tag, 23, 1,&m,0,"viewport");
91 // Insert Alpha watermark to avoid printing
93 tag = swf_InsertTag(tag,ST_DEFINESHAPE3);
95 rgb.r = rgb.g = rgb.b = 0xff;
97 fs1 = swf_ShapeAddSolidFillStyle(s,&rgb);
98 swf_SetU16(tag,ID_WATERMARK);
102 swf_SetRect(tag,&r); // cover whole viewport
103 swf_SetShapeHeader(tag,s);
104 swf_ShapeSetAll(tag,s,0,0,0,fs1,0);
105 swf_ShapeSetLine(tag,s,20*width,0);
106 swf_ShapeSetLine(tag,s,0,20*height);
107 swf_ShapeSetLine(tag,s,-20*width,0);
108 swf_ShapeSetLine(tag,s,0,-20*height);
109 swf_ShapeSetEnd(tag);
112 #endif // USE_WATERMARK
114 for(count=0;count<6;count++)
116 tag = swf_InsertTag(tag,ST_DEFINESHAPE);
117 swf_ShapeNew(&s); // create new shape instance
118 rgb.r = rgb.b = rgb.g = 0x00;
119 ls1 = swf_ShapeAddLineStyle(s,40,&rgb);
120 rgb = button_colors[count];
121 fs1 = swf_ShapeAddSolidFillStyle(s,&rgb);
122 swf_SetU16(tag,32+count); // now set character ID
127 swf_SetRect(tag,&r); // set shape bounds
128 swf_SetShapeHeader(tag,s); // write all styles to tag
131 swf_ShapeSetAll(tag,s,0,0,ls1,fs1,0); // move to (0,0), select linestyle ls1 and no fillstyle
132 /* SetLine coordinates are relative.
133 It's important that the start and end points match, otherwise
134 the Macromedia Flash player will crash. */
135 swf_ShapeSetLine(tag,s,20*button_sizex,20*button_sizey);
136 swf_ShapeSetLine(tag,s,-20*button_sizex,20*button_sizey);
137 swf_ShapeSetLine(tag,s,0,-40*button_sizey);
139 swf_ShapeSetAll(tag,s,20*button_sizex,0,ls1,fs1,0);
140 swf_ShapeSetLine(tag,s,-20*button_sizex,20*button_sizey);
141 swf_ShapeSetLine(tag,s,20*button_sizex,20*button_sizey);
142 swf_ShapeSetLine(tag,s,0,-40*button_sizey);
144 swf_ShapeSetEnd(tag); // finish drawing
145 swf_ShapeFree(s); // clean shape structure (which isn't needed anymore after writing the tag)
148 a1 = action_SetTarget(0, "viewport");
149 a1 = action_PreviousFrame(a1);
150 a1 = action_SetTarget(a1, "");
153 a2 = action_SetTarget(0, "viewport");
154 a2 = action_NextFrame(a2);
155 a2 = action_SetTarget(a2,"");
158 a3 = action_SetTarget(0,"viewport");
159 a3 = action_Stop(a3);
160 a3 = action_SetTarget(a3,"");
162 a3 = action_PushString(a3,"/:subtitle");
163 a3 = action_PushString(a3,""); //reset variable
164 a3 = action_SetVariable(a3);
170 if(!useDefineButton2)
172 tag = swf_InsertTag(tag,ST_DEFINEBUTTON);
173 swf_SetU16(tag,30+t); //id
174 swf_ButtonSetRecord(tag,BS_UP|BS_HIT,32+t,1,NULL,NULL);
175 swf_ButtonSetRecord(tag,BS_OVER,34+t,1,NULL,NULL);
176 swf_ButtonSetRecord(tag,BS_DOWN,36+t,1,NULL,NULL);
177 swf_SetU8(tag,0); // end of button records
180 swf_ActionSet(tag,a2);
182 swf_ActionSet(tag,a1);
186 tag = swf_InsertTag(tag,ST_DEFINEBUTTON2);
187 swf_SetU16(tag,30+t); //id
188 swf_ButtonSetFlags(tag, 0); //menu=no
189 swf_ButtonSetRecord(tag,BS_UP|BS_HIT,32+t,1,NULL,NULL);
190 swf_ButtonSetRecord(tag,BS_OVER,34+t,1,NULL,NULL);
191 swf_ButtonSetRecord(tag,BS_DOWN,36+t,1,NULL,NULL);
192 swf_SetU8(tag,0); // end of button records
194 swf_ButtonSetCondition(tag, BC_OVERDOWN_OVERUP);
196 swf_ActionSet(tag,a2);
198 swf_ActionSet(tag,a1);
200 swf_ButtonPostProcess(tag, 1); // don't forget!
204 tag = swf_InsertTag(tag,ST_DOACTION);
205 swf_ActionSet(tag,a3);
209 tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
210 swf_ObjectPlace(tag, 30, 3,&m,0,0);
211 m.tx = button_sizex*30;
212 tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
213 swf_ObjectPlace(tag, 31, 4,&m,0,0);
219 tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
220 swf_ObjectPlace(tag, ID_WATERMARK, 2, &m, 0,0);
222 #endif // USE_WATERMARK
229 tag = swf_InsertTag(tag,ST_DEFINEFONT2); {
230 U8 data[] = {0x90, 0x00, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x73,
231 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d,
232 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233 0x00, 0x00, 0x00, 0x00};
234 swf_SetU16(tag, 0x76); //id
235 swf_SetBlock(tag, data, sizeof(data));
237 tag = swf_InsertTag(tag,ST_DEFINEEDITTEXT); {
238 EditTextLayout layout;
240 layout.leftmargin = 0;
241 layout.rightmargin = 0;
245 swf_SetU16(tag, 0x77);//id
246 r.xmin = button_sizex*60;
247 r.xmax = r.xmin+ 826*20;
249 r.ymax = button_sizey*80;
250 rgb.r = rgb.g = rgb.b = 0;
252 swf_SetEditText(tag, ET_MULTILINE|ET_READONLY, r, 0, &rgb, 0, 0x76, button_sizey*40, &layout, "/:subtitle");
255 tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
256 swf_ObjectPlace(tag, 0x77, 5,&m,0,0);
259 tag = swf_InsertTag(tag,ST_SHOWFRAME);
260 tag = swf_InsertTag(tag,ST_END);
263 f = open("simple_viewer.swf",O_WRONLY|O_CREAT|O_TRUNC, 0644);
264 if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n");
267 swf_FreeTags(&swf); // cleanup