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
36 int main (int argc,char ** argv)
43 S32 width=1024,height = 768;
49 memset(&swf,0x00,sizeof(SWF)); // set global movie parameters
51 swf.fileVersion = 4; // make flash 4 compatible swf
52 swf.frameRate = 0x1900; // about 0x19 frames per second
54 swf.movieSize.xmax = 20*width; // flash units: 1 pixel = 20 units
55 swf.movieSize.ymax = 20*height;
57 swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
72 /* the "viewport" object will be replaced by swfcombine
73 with the object to browse. It is placed at the
74 upper left corner (0,0), by setting m.tx and m.ty
75 to 0. Therefore, the buttons are "in" the viewport,
77 tag = swf_InsertTag(tag,ST_DEFINESPRITE);
78 swf_SetU16(tag, 23); //id
79 swf_SetU16(tag, 0); //frames
80 tag = swf_InsertTag(tag,ST_END);
81 tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
84 swf_ObjectPlace(tag, 23, 1,&m,0,"viewport");
86 for(count=0;count<6;count++)
88 tag = swf_InsertTag(tag,ST_DEFINESHAPE);
89 swf_ShapeNew(&s); // create new shape instance
90 rgb.r = rgb.b = rgb.g = 0x00;
91 ls1 = swf_ShapeAddLineStyle(s,40,&rgb);
92 rgb = button_colors[count];
93 fs1 = swf_ShapeAddSolidFillStyle(s,&rgb);
94 swf_SetU16(tag,32+count); // now set character ID
99 swf_SetRect(tag,&r); // set shape bounds
100 swf_SetShapeHeader(tag,s); // write all styles to tag
103 swf_ShapeSetAll(tag,s,0,0,ls1,fs1,0); // move to (0,0), select linestyle ls1 and no fillstyle
104 /* SetLine coordinates are relative.
105 It's important that the start and end points match, otherwise
106 the Macromedia Flash player will crash. */
107 swf_ShapeSetLine(tag,s,20*button_sizex,20*button_sizey);
108 swf_ShapeSetLine(tag,s,-20*button_sizex,20*button_sizey);
109 swf_ShapeSetLine(tag,s,0,-40*button_sizey);
111 swf_ShapeSetAll(tag,s,20*button_sizex,0,ls1,fs1,0);
112 swf_ShapeSetLine(tag,s,-20*button_sizex,20*button_sizey);
113 swf_ShapeSetLine(tag,s,20*button_sizex,20*button_sizey);
114 swf_ShapeSetLine(tag,s,0,-40*button_sizey);
116 swf_ShapeSetEnd(tag); // finish drawing
117 swf_ShapeFree(s); // clean shape structure (which isn't needed anymore after writing the tag)
120 a1 = swf_ActionStart(tag);
121 action_SetTarget("viewport");
122 action_PreviousFrame();
123 action_SetTarget("");
127 a2 = swf_ActionStart(tag);
128 action_SetTarget("viewport");
130 action_SetTarget("");
134 a3 = swf_ActionStart(tag);
135 action_SetTarget("viewport");
137 action_SetTarget("");
138 action_PushString("/:subtitle");
139 action_PushString("...");
140 action_SetVariable();
146 if(!useDefineButton2)
148 tag = swf_InsertTag(tag,ST_DEFINEBUTTON);
149 swf_SetU16(tag,30+t); //id
150 swf_ButtonSetRecord(tag,BS_UP|BS_HIT,32+t,1,NULL,NULL);
151 swf_ButtonSetRecord(tag,BS_OVER,34+t,1,NULL,NULL);
152 swf_ButtonSetRecord(tag,BS_DOWN,36+t,1,NULL,NULL);
153 swf_SetU8(tag,0); // end of button records
156 swf_ActionSet(tag,a2);
158 swf_ActionSet(tag,a1);
162 tag = swf_InsertTag(tag,ST_DEFINEBUTTON2);
163 swf_SetU16(tag,30+t); //id
164 swf_ButtonSetFlags(tag, 0); //menu=no
165 swf_ButtonSetRecord(tag,BS_UP|BS_HIT,32+t,1,NULL,NULL);
166 swf_ButtonSetRecord(tag,BS_OVER,34+t,1,NULL,NULL);
167 swf_ButtonSetRecord(tag,BS_DOWN,36+t,1,NULL,NULL);
168 swf_SetU8(tag,0); // end of button records
170 swf_ButtonSetCondition(tag, BC_OVERDOWN_OVERUP);
172 swf_ActionSet(tag,a2);
174 swf_ActionSet(tag,a1);
176 swf_ButtonPostProcess(tag, 1); // don't forget!
180 tag = swf_InsertTag(tag,ST_DOACTION);
181 swf_ActionSet(tag,a3);
185 tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
186 swf_ObjectPlace(tag, 30, 2,&m,0,0);
187 m.tx = button_sizex*30;
188 tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
189 swf_ObjectPlace(tag, 31, 3,&m,0,0);
196 tag = swf_InsertTag(tag,ST_DEFINEFONT2); {
197 U8 data[] = {0x90, 0x00, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x73,
198 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d,
199 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
200 0x00, 0x00, 0x00, 0x00};
201 swf_SetU16(tag, 0x76); //id
202 swf_SetBlock(tag, data, sizeof(data));
204 tag = swf_InsertTag(tag,ST_DEFINEEDITTEXT); {
205 EditTextLayout layout;
207 layout.leftmargin = 0;
208 layout.rightmargin = 0;
212 swf_SetU16(tag, 0x77);//id
213 r.xmin = button_sizex*60;
214 r.xmax = r.xmin+ 826*20;
216 r.ymax = button_sizey*80;
217 rgb.r = rgb.g = rgb.b = 0;
219 swf_SetEditText(tag, ET_MULTILINE|ET_READONLY, r, 0, &rgb, 0, 0x76, button_sizey*40, &layout, "/:subtitle");
222 tag = swf_InsertTag(tag,ST_PLACEOBJECT2);
223 swf_ObjectPlace(tag, 0x77, 4,&m,0,0);
226 tag = swf_InsertTag(tag,ST_SHOWFRAME);
227 tag = swf_InsertTag(tag,ST_END);
230 f = open("simple_viewer.swf",O_WRONLY|O_CREAT|O_TRUNC, 0644);
231 if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n");
234 swf_FreeTags(&swf); // cleanup