3 Headers for rfxswf.c and modules
5 Part of the swftools package.
7 Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>
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.
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.
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 */
24 #ifndef __RFX_SWF_INCLUDED__
25 #define __RFX_SWF_INCLUDED__
36 #include "../config.h"
47 #ifdef RFXSWF_DISABLESOUND
51 typedef signed SFIXED
;
52 typedef signed SCOORD
;
54 #define SCOORD_MAX 0x7fffffffl
55 #define SCOORD_MIN -0x80000000l
59 typedef struct _SPOINT
83 typedef struct _MATRIX
88 typedef struct _CXFORM
89 { S16 a0
, a1
; /* mult, add */
95 #define GRADIENT_LINEAR 0x10
96 #define GRADIENT_RADIAL 0x12
97 typedef struct _GRADIENT
104 typedef struct _FILTER
109 typedef struct _FILTERLIST
115 typedef struct _TAG
// NEVER access a Tag-Struct directly !
118 U32 memsize
; // to minimize realloc() calls
120 U32 len
; // for Set-Access
121 U32 pos
; // for Get-Access
126 U8 readBit
; // for Bit-Manipulating Functions [read]
127 U8 writeBit
; // [write]
131 #define swf_ResetReadBits(tag) if (tag->readBit) { tag->pos++; tag->readBit = 0; }
132 #define swf_ResetWriteBits(tag) if (tag->writeBit) { tag->writeBit = 0; }
134 typedef struct _SOUNDINFO
137 U8 nomultiple
; //continue playing if already started
151 #define FILEATTRIBUTE_USENETWORK 1
152 #define FILEATTRIBUTE_AS3 8
153 #define FILEATTRIBUTE_SYMBOLCLASS 16
154 #define FILEATTRIBUTE_USEACCELERATEDBLIT 32
155 #define FILEATTRIBUTE_USEHARDWAREGPU 64
159 U8 compressed
; // SWF or SWC?
160 U32 fileSize
; // valid after load and save
163 U16 frameCount
; // valid after load and save
165 U32 fileAttributes
; // for SWFs >= Flash9
170 SWF
* swf_OpenSWF(char*filename
);
171 int swf_ReadSWF2(reader_t
*reader
, SWF
* swf
); // Reads SWF via callback
172 int swf_ReadSWF(int handle
,SWF
* swf
); // Reads SWF to memory (malloc'ed), returns length or <0 if fails
173 int swf_WriteSWF2(writer_t
*writer
, SWF
* swf
); // Writes SWF via callback, returns length or <0 if fails
174 int swf_WriteSWF(int handle
,SWF
* swf
); // Writes SWF to file, returns length or <0 if fails
175 int swf_SaveSWF(SWF
* swf
, char*filename
);
176 int swf_WriteCGI(SWF
* swf
); // Outputs SWF with valid CGI header to stdout
177 void swf_FreeTags(SWF
* swf
); // Frees all malloc'ed memory for swf
178 SWF
* swf_CopySWF(SWF
*swf
);
179 void swf_ReadABCfile(char*filename
, SWF
*swf
);
182 int swf_WriteHeader(int handle
,SWF
* swf
); // Writes Header of swf to file
183 int swf_WriteHeader2(writer_t
*writer
,SWF
* swf
); // Writes Header of swf to file
184 int swf_WriteTag(int handle
,TAG
* tag
); // Writes TAG to file
185 int swf_WriteTag2(writer_t
*writer
, TAG
* t
); //Write TAG via callback
187 int swf_ReadHeader(reader_t
*reader
, SWF
* swf
); // Reads SWF Header via callback
189 // folding/unfolding:
191 void swf_FoldAll(SWF
*swf
);
192 void swf_UnFoldAll(SWF
*swf
);
193 void swf_FoldSprite(TAG
*tag
);
194 void swf_UnFoldSprite(TAG
*tag
);
195 int swf_IsFolded(TAG
*tag
);
199 void swf_OptimizeTagOrder(SWF
*swf
);
203 TAG
* swf_InsertTag(TAG
* after
,U16 id
); // updates frames, if necessary
204 TAG
* swf_InsertTagBefore(SWF
*swf
, TAG
* before
,U16 id
); // like InsertTag, but insert tag before argument
205 TAG
* swf_DeleteTag(SWF
*swf
, TAG
* t
);
207 void swf_ClearTag(TAG
* t
); //frees tag data
208 void swf_ResetTag(TAG
*tag
, U16 id
); //set's tag position and length to 0, without freeing it
209 TAG
* swf_CopyTag(TAG
*tag
, TAG
*to_copy
); //stores a copy of another tag into this taglist
211 void swf_SetTagPos(TAG
* t
,U32 pos
); // resets Bitcount
212 U32
swf_GetTagPos(TAG
* t
);
214 TAG
* swf_NextTag(TAG
* t
);
215 TAG
* swf_PrevTag(TAG
* t
);
217 U16
swf_GetTagID(TAG
* t
); // ... TagGetID
218 U32
swf_GetTagLen(TAG
* t
); // ... TagGetTagLen
219 U8
* swf_GetTagLenPtr(TAG
* t
);
221 U32
swf_GetBits(TAG
* t
,int nbits
);
222 S32
swf_GetSBits(TAG
* t
,int nbits
);
223 int swf_SetBits(TAG
* t
,U32 v
,int nbits
);
224 int swf_CountUBits(U32 v
,int nbits
);
225 int swf_CountBits(U32 v
,int nbits
);
227 int swf_GetBlock(TAG
* t
,U8
* b
,int l
); // resets Bitcount
228 int swf_SetBlock(TAG
* t
,const U8
* b
,int l
);
230 U8
swf_GetU8(TAG
* t
); // resets Bitcount
231 U16
swf_GetU16(TAG
* t
);
232 #define swf_GetS16(tag) ((S16)swf_GetU16(tag))
233 U32
swf_GetU32(TAG
* t
);
234 float swf_GetF16(TAG
* t
);
235 void swf_GetRGB(TAG
* t
, RGBA
* col
);
236 void swf_GetRGBA(TAG
* t
, RGBA
* col
);
237 void swf_GetGradient(TAG
* t
, GRADIENT
* gradient
, char alpha
);
238 void swf_SetGradient(TAG
* tag
, GRADIENT
* gradient
, char alpha
);
239 void swf_FreeGradient(GRADIENT
* gradient
);
240 char* swf_GetString(TAG
*t
);
241 int swf_SetU8(TAG
* t
,U8 v
); // resets Bitcount
242 int swf_SetU16(TAG
* t
,U16 v
);
243 void swf_SetS16(TAG
* t
,int v
);
244 int swf_SetU32(TAG
* t
,U32 v
);
245 void swf_SetF16(TAG
* t
,float f
);
246 void swf_SetString(TAG
*t
,const char*s
);
248 float floatToF16(float f
);
249 float F16toFloat(U16 x
);
252 U32
swf_GetU30(TAG
*tag
);
253 int swf_SetU30(TAG
*tag
, U32 u
);
254 void swf_SetABCU32(TAG
*tag
, U32 u
);
255 U32
swf_GetABCU32(TAG
*tag
);
256 void swf_SetABCS32(TAG
*tag
, S32 v
);
257 S32
swf_GetABCS32(TAG
*tag
);
258 int swf_SetU30String(TAG
*tag
, const char*str
, int len
);
259 double swf_GetD64(TAG
*tag
);
260 int swf_SetD64(TAG
*tag
, double v
);
261 int swf_GetU24(TAG
*tag
);
262 int swf_GetS24(TAG
*tag
);
263 int swf_SetU24(TAG
*tag
, U32 v
);
264 int swf_SetS24(TAG
*tag
, U32 v
);
266 //int swf_GetPoint(TAG * t,SPOINT * p); // resets Bitcount
267 int swf_GetRect(TAG
* t
,SRECT
* r
);
268 int swf_GetMatrix(TAG
* t
,MATRIX
* m
);
269 int swf_GetCXForm(TAG
* t
,CXFORM
* cx
,U8 alpha
);
271 double swf_GetFixed(TAG
* t
);
272 void swf_SetFixed(TAG
* t
, double f
);
273 float swf_GetFixed8(TAG
* t
);
274 void swf_SetFixed8(TAG
* t
, float f
);
276 //int swf_SetPoint(TAG * t,SPOINT * p); // resets Bitcount
277 int swf_SetRect(TAG
* t
,SRECT
* r
);
278 int swf_SetMatrix(TAG
* t
,MATRIX
* m
);
279 int swf_SetCXForm(TAG
* t
,CXFORM
* cx
,U8 alpha
);
280 int swf_SetRGB(TAG
* t
,RGBA
* col
);
281 int swf_SetRGBA(TAG
* t
,RGBA
* col
);
282 void swf_SetPassword(TAG
* t
, const char * password
);
284 int swf_VerifyPassword(TAG
* t
, const char * password
);
288 SRECT
swf_ClipRect(SRECT border
, SRECT r
);
289 void swf_ExpandRect(SRECT
*src
, SPOINT add
);
290 void swf_ExpandRect2(SRECT
*src
, SRECT
*add
);
291 void swf_ExpandRect3(SRECT
*src
, SPOINT center
, int radius
);
292 SPOINT
swf_TurnPoint(SPOINT p
, MATRIX
* m
);
293 SRECT
swf_TurnRect(SRECT r
, MATRIX
* m
);
296 #define FAILED(b) ((b)<0)
299 // Tag IDs (adopted from J. C. Kessels' Form2Flash)
302 #define ST_SHOWFRAME 1
303 #define ST_DEFINESHAPE 2
304 #define ST_FREECHARACTER 3
305 #define ST_PLACEOBJECT 4
306 #define ST_REMOVEOBJECT 5
307 #define ST_DEFINEBITS 6
308 #define ST_DEFINEBITSJPEG 6
309 #define ST_DEFINEBUTTON 7
310 #define ST_JPEGTABLES 8
311 #define ST_SETBACKGROUNDCOLOR 9
312 #define ST_DEFINEFONT 10
313 #define ST_DEFINETEXT 11
314 #define ST_DOACTION 12
315 #define ST_DEFINEFONTINFO 13
316 #define ST_DEFINESOUND 14 /* Event sound tags. */
317 #define ST_STARTSOUND 15
318 #define ST_DEFINEBUTTONSOUND 17
319 #define ST_SOUNDSTREAMHEAD 18
320 #define ST_SOUNDSTREAMBLOCK 19
321 #define ST_DEFINEBITSLOSSLESS 20 /* A bitmap using lossless zlib compression. */
322 #define ST_DEFINEBITSJPEG2 21 /* A bitmap using an internal JPEG compression table. */
323 #define ST_DEFINESHAPE2 22
324 #define ST_DEFINEBUTTONCXFORM 23
325 #define ST_PROTECT 24 /* This file should not be importable for editing. */
326 #define ST_PLACEOBJECT2 26 /* The new style place w/ alpha color transform and name. */
327 #define ST_REMOVEOBJECT2 28 /* A more compact remove object that omits the character tag (just depth). */
328 #define ST_FREEALL 31 /* ? */
329 #define ST_DEFINESHAPE3 32 /* A shape V3 includes alpha values. */
330 #define ST_DEFINETEXT2 33 /* A text V2 includes alpha values. */
331 #define ST_DEFINEBUTTON2 34 /* A button V2 includes color transform, alpha and multiple actions */
332 #define ST_DEFINEBITSJPEG3 35 /* A JPEG bitmap with alpha info. */
333 #define ST_DEFINEBITSLOSSLESS2 36 /* A lossless bitmap with alpha info. */
334 #define ST_DEFINEEDITTEXT 37
335 #define ST_DEFINEMOVIE 38
336 #define ST_DEFINESPRITE 39 /* Define a sequence of tags that describe the behavior of a sprite. */
337 #define ST_NAMECHARACTER 40 /* Name a character definition, character id and a string, (used for buttons, bitmaps, sprites and sounds). */
338 #define ST_SERIALNUMBER 41
339 #define ST_GENERATORTEXT 42 /* contains an id */
340 #define ST_FRAMELABEL 43 /* A string label for the current frame. */
341 #define ST_SOUNDSTREAMHEAD2 45 /* For lossless streaming sound, should not have needed this... */
342 #define ST_DEFINEMORPHSHAPE 46 /* A morph shape definition */
343 #define ST_DEFINEFONT2 48
344 #define ST_TEMPLATECOMMAND 49
345 #define ST_GENERATOR3 51
346 #define ST_EXTERNALFONT 52
347 #define ST_EXPORTASSETS 56
348 #define ST_IMPORTASSETS 57
349 #define ST_ENABLEDEBUGGER 58
350 #define ST_DOINITACTION 59
351 #define ST_DEFINEVIDEOSTREAM 60
352 #define ST_VIDEOFRAME 61
353 #define ST_DEFINEFONTINFO2 62
354 #define ST_MX4 63 /*(?) */
355 #define ST_ENABLEDEBUGGER2 64 /* version 8 */
356 #define ST_SCRIPTLIMITS 65 /* version 7- u16 maxrecursedepth, u16 scripttimeoutseconds */
357 #define ST_SETTABINDEX 66 /* version 7- u16 depth(!), u16 tab order value */
358 #define ST_FILEATTRIBUTES 69 /* version 8 (required)- */
359 #define ST_PLACEOBJECT3 70 /* version 8 */
360 #define ST_IMPORTASSETS2 71 /* version 8 */
361 #define ST_RAWABC 72 /* version 9, used by flex */
362 #define ST_DEFINEFONTALIGNZONES 73 /* version 8 */
363 #define ST_CSMTEXTSETTINGS 74 /* version 8 */
364 #define ST_DEFINEFONT3 75 /* version 8 */
365 #define ST_SYMBOLCLASS 76 /* version 9 */
366 #define ST_METADATA 77 /* version 8 */
367 #define ST_DEFINESCALINGGRID 78 /* version 8 */
368 #define ST_DOABC 82 /* version 9 */
369 #define ST_DEFINESHAPE4 83 /* version 8 */
370 #define ST_DEFINEMORPHSHAPE2 84 /* version 8 */
371 #define ST_SCENEDESCRIPTION 86 /* version 9 */
372 #define ST_DEFINEBINARY 87 /* version 9 */
373 #define ST_DEFINEFONTNAME 88 /* version 9 */
375 /* custom tags- only valid for swftools */
376 #define ST_REFLEX 777 /* to identify generator software */
377 #define ST_GLYPHNAMES 778
383 typedef struct _LINESTYLE
388 #define FILL_SOLID 0x00
389 #define FILL_LINEAR 0x10 // Gradient
390 #define FILL_RADIAL 0x12
391 #define FILL_TILED 0x40 // Bitmap
392 #define FILL_CLIPPED 0x41
394 typedef struct _FILLSTYLE
402 typedef struct _SHAPE
// NEVER access a Shape-Struct directly !
418 // used by Get/SetSimpleShape and glyph handling
420 U32 bitlen
; // length of data in bits
423 /* SHAPE can be converted into SHAPE2: */
426 typedef struct _SHAPE2
428 LINESTYLE
* linestyles
;
430 FILLSTYLE
* fillstyles
;
432 struct _SHAPELINE
* lines
;
433 SRECT
* bbox
; // may be NULL
436 enum SHAPELINETYPE
{moveTo
, lineTo
, splineTo
};
437 typedef struct _SHAPELINE
439 enum SHAPELINETYPE type
;
441 SCOORD sx
,sy
; //only if type==splineTo
445 struct _SHAPELINE
* next
;
450 int swf_ShapeNew(SHAPE
** s
);
451 void swf_ShapeFree(SHAPE
* s
);
452 char swf_ShapeIsEmpty(SHAPE
*s
);
454 int swf_GetSimpleShape(TAG
* t
,SHAPE
** s
); // without Linestyle/Fillstyle Record
455 int swf_SetSimpleShape(TAG
* t
,SHAPE
* s
); // without Linestyle/Fillstyle Record
457 int swf_ShapeAddLineStyle(SHAPE
* s
,U16 width
,RGBA
* color
);
458 int swf_ShapeAddSolidFillStyle(SHAPE
* s
,RGBA
* color
);
459 int swf_ShapeAddBitmapFillStyle(SHAPE
* s
,MATRIX
* m
,U16 id_bitmap
,int clip
);
460 int swf_ShapeAddGradientFillStyle(SHAPE
* s
,MATRIX
* m
,GRADIENT
* gradient
,int radial
);
461 int swf_ShapeAddFillStyle2(SHAPE
* s
,FILLSTYLE
*fs
);
463 int swf_SetShapeStyles(TAG
* t
,SHAPE
* s
);
464 int swf_ShapeCountBits(SHAPE
* s
,U8
* fbits
,U8
* lbits
);
465 int swf_SetShapeBits(TAG
* t
,SHAPE
* s
);
466 int swf_SetShapeHeader(TAG
* t
,SHAPE
* s
); // one call for upper three functions
468 int swf_ShapeSetMove(TAG
* t
,SHAPE
* s
,S32 x
,S32 y
);
469 int swf_ShapeSetStyle(TAG
* t
,SHAPE
* s
,int line
,int fill0
,int fill1
);
470 #define UNDEFINED_COORD 0x7fffffff
471 int swf_ShapeSetAll(TAG
* t
,SHAPE
* s
,S32 x
,S32 y
,int line
,int fill0
,int fill1
);
473 int swf_ShapeSetLine(TAG
* t
,SHAPE
* s
,S32 x
,S32 y
);
474 int swf_ShapeSetCurve(TAG
* t
,SHAPE
* s
,S32 x
,S32 y
,S32 ax
,S32 ay
);
475 int swf_ShapeSetCircle(TAG
* t
,SHAPE
* s
,S32 x
,S32 y
,S32 rx
,S32 ry
);
476 int swf_ShapeSetEnd(TAG
* t
);
477 int swf_SetShapeStyleCount(TAG
* t
,U16 n
);
478 int swf_SetFillStyle(TAG
* t
,FILLSTYLE
* f
);
479 int swf_SetLineStyle(TAG
* t
,LINESTYLE
* l
);
482 void swf_ShapeSetRectangle(TAG
*tag
, U16 shapeid
, int width
, int height
, RGBA
*rgba
);
483 void swf_ShapeSetRectangleWithBorder(TAG
*tag
, U16 shapeid
, int width
, int height
, RGBA
*rgba
, int linewidth
, RGBA
*linecolor
);
484 void swf_ShapeSetBitmapRect(TAG
* t
, U16 gfxid
, int width
, int height
);
486 //SHAPELINE* swf_ParseShapeData(U8*data, int bits, int fillbits, int linebits);
487 SHAPE2
* swf_ShapeToShape2(SHAPE
*shape
);
488 void swf_Shape2ToShape(SHAPE2
*shape2
, SHAPE
*shape
);
489 SRECT
swf_GetShapeBoundingBox(SHAPE2
*shape
);
490 void swf_SetShape2(TAG
*tag
, SHAPE2
*shape
);
491 SHAPE2
* swf_Shape2Clone(SHAPE2
* s
);
492 void swf_Shape2Free(SHAPE2
* s
);
493 void swf_DumpShape(SHAPE2
*shape2
);
495 void swf_ParseDefineShape(TAG
*tag
, SHAPE2
*shape
);
496 void swf_SetShape2(TAG
*tag
, SHAPE2
*shape2
);
498 void swf_RecodeShapeData(U8
*data
, int bitlen
, int in_bits_fill
, int in_bits_line
,
499 U8
**destdata
, U32
*destbitlen
, int out_bits_fill
, int out_bits_line
);
503 void swf_Shape10DrawerInit(drawer_t
*draw
, TAG
*tag
);
504 void swf_Shape01DrawerInit(drawer_t
*draw
, TAG
*tag
);
505 void swf_Shape11DrawerInit(drawer_t
*draw
, TAG
*tag
);
506 SHAPE
* swf_ShapeDrawerToShape(drawer_t
*draw
);
507 SRECT
swf_ShapeDrawerGetBBox(drawer_t
*draw
);
509 void swf_DrawString(drawer_t
*draw
, const char*source
);
513 typedef struct _KERNING
520 typedef struct _SWFLAYOUT
526 SWFKERNING
* kerning
;
534 typedef struct _SWFGLYPHPAIR
541 typedef struct _FONTUSAGE
545 int glyphs_specified
;
548 SWFGLYPHPAIR
* neighbors
;
552 int neighbors_hash_size
;
555 #define FONT_STYLE_BOLD 1
556 #define FONT_STYLE_ITALIC 2
557 #define FONT_ENCODING_UNICODE 1
558 #define FONT_ENCODING_ANSI 2
559 #define FONT_ENCODING_SHIFTJIS 4
561 #define FONTALIGN_THIN 0
562 #define FONTALIGN_MEDIUM 1
563 #define FONTALIGN_THICK 2
565 typedef struct _ALIGNZONE
571 typedef struct _SWFFONT
572 { int id
; // -1 = not set
573 U8 version
; // 0 = not set, 1 = definefont, 2 = definefont2, 3 = definefont3
577 int maxascii
; // highest mapped ascii/unicode value
584 int * glyph2glyph
; // only if the font is resorted
586 ALIGNZONE
* alignzones
;
596 #define ET_HASTEXT 32768
597 #define ET_WORDWRAP 16384
598 #define ET_MULTILINE 8192
599 #define ET_PASSWORD 4096
600 #define ET_READONLY 2048
601 #define ET_HASTEXTCOLOR 1024
602 #define ET_HASMAXLENGTH 512
603 #define ET_HASFONT 256
605 #define ET_AUTOSIZE 64 /* MX */
606 #define ET_HASLAYOUT 32
607 #define ET_NOSELECT 16
610 #define ET_HTML 2 /* MX? */
611 #define ET_USEOUTLINES 1
613 #define ET_ALIGN_LEFT 0
614 #define ET_ALIGN_RIGHT 1
615 #define ET_ALIGN_CENTER 2
616 #define ET_ALIGN_JUSTIFY 3
618 typedef struct _EditTextLayout
620 U8 align
; // 0=left, 1=right, 2=center, 3=justify
627 int swf_FontEnumerate(SWF
* swf
,void (*FontCallback
) (void*,U16
,U8
*), void*self
);
628 // -> void fontcallback(U16 id,U8 * name); returns number of defined fonts
630 int swf_FontExtract(SWF
* swf
,int id
,SWFFONT
** f
);
631 // Fetches all available information from DefineFont, DefineFontInfo, DefineText, ...
632 // id = FontID, id=0 -> Extract first Font
633 int swf_FontExtract_DefineFont2(int id
, SWFFONT
* font
, TAG
* tag
);
634 int swf_FontExtract_DefineFontInfo(int id
, SWFFONT
* f
, TAG
* t
);
635 int swf_FontExtract_DefineFont(int id
, SWFFONT
* f
, TAG
* t
);
636 int swf_FontExtract_GlyphNames(int id
, SWFFONT
* f
, TAG
* tag
);
637 int swf_FontExtract_DefineFontAlignZones(int id
, SWFFONT
* font
, TAG
* tag
);
640 int swf_FontIsItalic(SWFFONT
* f
);
641 int swf_FontIsBold(SWFFONT
* f
);
643 int swf_FontSetID(SWFFONT
* f
,U16 id
);
644 int swf_FontReduce(SWFFONT
* f
);
645 int swf_FontReduce_swfc(SWFFONT
* f
);
647 int swf_FontInitUsage(SWFFONT
* f
);
648 int swf_FontUseGlyph(SWFFONT
* f
, int glyph
, U16 size
);
649 void swf_FontUsePair(SWFFONT
* f
, int char1
, int char2
);
650 int swf_FontUseGetPair(SWFFONT
* f
, int char1
, int char2
);
651 int swf_FontUseAll(SWFFONT
* f
);
652 int swf_FontUseUTF8(SWFFONT
* f
, const U8
* s
, U16 size
);
653 int swf_FontUse(SWFFONT
* f
,U8
* s
);
654 void swf_FontSort(SWFFONT
* font
);
656 int swf_FontSetDefine(TAG
* t
,SWFFONT
* f
);
657 int swf_FontSetDefine2(TAG
* t
,SWFFONT
* f
);
658 int swf_FontSetInfo(TAG
* t
,SWFFONT
* f
);
659 void swf_FontSetAlignZones(TAG
*t
, SWFFONT
*f
);
661 void swf_FontCreateLayout(SWFFONT
*f
);
662 void swf_FontCreateAlignZones(SWFFONT
* f
);
663 void swf_FontAddLayout(SWFFONT
* f
, int ascent
, int descent
, int leading
);
664 void swf_FontPostprocess(SWF
*swf
);
666 int swf_ParseDefineText(TAG
* t
, void(*callback
)(void*self
, int*chars
, int*xpos
, int nr
, int fontid
, int fontsize
, int xstart
, int ystart
, RGBA
* color
), void*self
);
668 void swf_WriteFont(SWFFONT
* font
, char* filename
);
669 SWFFONT
* swf_ReadFont(const char* filename
);
671 void swf_FontFree(SWFFONT
* f
);
673 U32
swf_TextGetWidth(SWFFONT
* font
,U8
* s
,int scale
);
674 int swf_TextCountBits(SWFFONT
* font
,U8
* s
,int scale
,U8
* gbits
,U8
* abits
);
676 #define SET_TO_ZERO 0x80000000
677 int swf_TextSetInfoRecord(TAG
* t
,SWFFONT
* font
,U16 size
,RGBA
* color
,int dx
,int dy
);
678 int swf_TextSetCharRecord(TAG
* t
,SWFFONT
* font
,U8
* s
,int scale
,U8 gbits
,U8 abits
);
680 int swf_TextPrintDefineText(TAG
* t
,SWFFONT
* f
);
681 // Prints text defined in tag t with font f to stdout
683 void swf_FontPrepareForEditText(SWFFONT
* f
);
685 /* notice: if you set the fontid, make sure you call swf_FontPrepareForEditText() for the font first */
686 void swf_SetEditText(TAG
*tag
, U16 flags
, SRECT r
, const char*text
, RGBA
*color
,
687 int maxlength
, U16 font
, U16 height
, EditTextLayout
*layout
, const char*variable
);
689 SRECT
swf_SetDefineText(TAG
*tag
, SWFFONT
*font
, RGBA
*rgb
, const char*text
, int scale
);
691 void swf_DrawText(drawer_t
*draw
, SWFFONT
*font
, int size
, const char*text
);
695 SWFFONT
* swf_LoadTrueTypeFont(const char*filename
, char flashtype
);
696 SWFFONT
* swf_LoadT1Font(const char*filename
);
697 SWFFONT
* swf_LoadFont(const char*filename
, char flashtype
);
699 void swf_SetLoadFontParameters(int scale
, int skip_unused
, int full_unicode
);
703 void swf_DumpHeader(FILE * f
,SWF
* swf
);
704 void swf_DumpMatrix(FILE * f
,MATRIX
* m
);
705 void swf_DumpTag(FILE * f
,TAG
* t
);
706 void swf_DumpSWF(FILE * f
,SWF
*swf
);
707 void swf_DumpGradient(FILE* f
, GRADIENT
*gradient
);
708 char* swf_TagGetName(TAG
*tag
);
709 void swf_DumpFont(SWFFONT
* font
);
713 int swf_ImageHasAlpha(RGBA
*img
, int width
, int height
);
714 int swf_ImageGetNumberOfPaletteEntries(RGBA
*img
, int width
, int height
, RGBA
*palette
);
716 typedef int JPEGBITS
;
717 JPEGBITS
* swf_SetJPEGBitsStart(TAG
* t
,int width
,int height
,int quality
); // deprecated
718 int swf_SetJPEGBitsLines(JPEGBITS
* jpegbits
,U8
** data
,int n
); // deprecated
719 int swf_SetJPEGBitsLine(JPEGBITS
* jpegbits
,U8
* data
); // deprecated
720 int swf_SetJPEGBitsFinish(JPEGBITS
* jpegbits
); // deprecated
722 void swf_GetJPEGSize(const char * fname
, int*width
, int*height
);
724 int swf_SetJPEGBits(TAG
* t
,const char * fname
,int quality
);
725 void swf_SetJPEGBits2(TAG
* t
,U16 width
,U16 height
,RGBA
* bitmap
,int quality
);
726 int swf_SetJPEGBits3(TAG
* tag
,U16 width
,U16 height
,RGBA
* bitmap
, int quality
);
727 RGBA
* swf_JPEG2TagToImage(TAG
*tag
, int*width
, int*height
);
728 void swf_RemoveJPEGTables(SWF
*swf
);
730 void swf_SaveJPEG(char*filename
, RGBA
*pixels
, int width
, int height
, int quality
);
732 #define BYTES_PER_SCANLINE(width) ((width+3)&0xfffffffc)
734 #define BMF_8BIT 3 // Bitmap formats
738 int swf_SetLosslessBits(TAG
* t
,U16 width
,U16 height
,void * bitmap
,U8 bitmap_flags
);
739 int swf_SetLosslessBitsIndexed(TAG
* t
,U16 width
,U16 height
,U8
* bitmap
,RGBA
* palette
,U16 ncolors
);
740 int swf_SetLosslessBitsGrayscale(TAG
* t
,U16 width
,U16 height
,U8
* bitmap
);
741 void swf_SetLosslessImage(TAG
*tag
, RGBA
*data
, int width
, int height
); //WARNING: will change tag->id
743 RGBA
* swf_DefineLosslessBitsTagToImage(TAG
*tag
, int*width
, int*height
);
745 RGBA
* swf_ExtractImage(TAG
*tag
, int*dwidth
, int*dheight
);
746 TAG
* swf_AddImage(TAG
*tag
, int bitid
, RGBA
*mem
, int width
, int height
, int quality
);
749 void swf_SetSoundStreamHead(TAG
*tag
, int avgnumsamples
);
750 void swf_SetSoundStreamBlock(TAG
*tag
, S16
*samples
, int seek
, char first
); /* expects 2304 samples */
751 void swf_SetSoundDefine(TAG
*tag
, S16
*samples
, int num
);
752 void swf_SetSoundDefineMP3(TAG
*tag
, U8
* data
, unsigned length
,
756 void swf_SetSoundInfo(TAG
*tag
, SOUNDINFO
*info
);
760 void swf_Optimize(SWF
*swf
);
761 U8
swf_isDefiningTag(TAG
* t
);
762 U8
swf_isPseudoDefiningTag(TAG
* t
);
763 U8
swf_isAllowedSpriteTag(TAG
* t
);
764 U8
swf_isImageTag(TAG
*tag
);
765 U8
swf_isShapeTag(TAG
*tag
);
766 U8
swf_isTextTag(TAG
*tag
);
767 U8
swf_isFontTag(TAG
*tag
);
768 U8
swf_isPlaceTag(TAG
*tag
);
770 U16
swf_GetDefineID(TAG
* t
);
771 SRECT
swf_GetDefineBBox(TAG
* t
);
772 void swf_SetDefineBBox(TAG
* t
, SRECT r
);
774 void swf_SetDefineID(TAG
* t
, U16 newid
);
775 U16
swf_GetPlaceID(TAG
* t
); //PLACEOBJECT, PLACEOBJECT2 (sometimes), REMOVEOBJECT
776 int swf_GetDepth(TAG
* t
); //PLACEOBJECT,PLACEOBJECT2,REMOVEOBJECT,REMOVEOBJECT2,SETTABINDEX
777 char* swf_GetName(TAG
* t
); //PLACEOBJECT2, FRAMELABEL
778 MATRIX
* swf_MatrixJoin(MATRIX
* d
,MATRIX
* s1
,MATRIX
* s2
);
779 MATRIX
* swf_MatrixMapTriangle(MATRIX
* m
,int dx
,int dy
,
780 int x0
,int y0
,int x1
,int y1
,int x2
,int y2
);
781 int swf_GetNumUsedIDs(TAG
* t
);
782 void swf_GetUsedIDs(TAG
* t
, int * positions
);
783 char swf_Relocate(SWF
*swf
, char*bitmap
); // bitmap is 65536 bytes, bitmap[a]==0 means id a is free
784 void swf_RelocateDepth(SWF
*swf
, char*bitmap
); // bitmap is 65536 bytes, bitmap[d]==0 means depth d is free
786 TAG
* swf_Concatenate (TAG
*list1
,TAG
*list2
); // warning: both list1 and list2 are invalid after this call.
788 RGBA
swf_GetSWFBackgroundColor(SWF
*swf
);
792 void swf_uncgi(); // same behaviour as Steven Grimm's uncgi-library
795 void*swf_ReadABC(TAG
*tag
);
796 void*swf_DumpABC(FILE*fo
, void*code
, char*prefix
);
797 void swf_WriteABC(TAG
*tag
, void*code
);
798 void swf_FreeABC(void*code
);
799 void swf_AddButtonLinks(SWF
*swf
, char stop_each_frame
, char events
);
800 TAG
*swf_AddAS3FontDefine(TAG
*tag
, U16 id
, char*fontname
);
801 #include "as3/compiler.h"
802 #include "as3/import.h"
806 typedef struct _ActionTAG
811 struct _ActionTAG
* next
;
812 struct _ActionTAG
* prev
;
814 struct _ActionTAG
* parent
;
815 U8 tmp
[8]; // store small operands here.
818 typedef struct _ActionMarker
823 ActionTAG
* swf_ActionGet(TAG
*tag
);
824 void swf_ActionFree(ActionTAG
*tag
);
825 void swf_ActionSet(TAG
*tag
, ActionTAG
*actions
);
826 void swf_DumpActions(ActionTAG
*atag
, char*prefix
);
827 void swf_ActionEnumerateURLs(ActionTAG
*atag
, char*(*callback
)(char*));
828 void swf_ActionEnumerateTargets(ActionTAG
*atag
, char*(*callback
)(char*));
829 void swf_ActionEnumerateStrings(ActionTAG
*atag
, char*(*callback
)(char*));
831 // using action/actioncompiler.h:
832 ActionTAG
* swf_ActionCompile(const char* source
, int version
);
834 #define ACTION__GOTOFRAME 0x81
835 #define ACTION__GETURL 0x83
836 ActionTAG
* action_End(ActionTAG
*atag
);
837 ActionTAG
* action_NextFrame(ActionTAG
*atag
);
838 ActionTAG
* action_PreviousFrame(ActionTAG
*atag
);
839 ActionTAG
* action_Play(ActionTAG
*atag
);
840 ActionTAG
* action_Stop(ActionTAG
*atag
);
841 ActionTAG
* action_ToggleQuality(ActionTAG
*atag
);
842 ActionTAG
* action_StopSounds(ActionTAG
*atag
);
843 ActionTAG
* action_Add(ActionTAG
*atag
);
844 ActionTAG
* action_Subtract(ActionTAG
*atag
);
845 ActionTAG
* action_Multiply(ActionTAG
*atag
);
846 ActionTAG
* action_Divide(ActionTAG
*atag
);
847 ActionTAG
* action_Equals(ActionTAG
*atag
);
848 ActionTAG
* action_Less(ActionTAG
*atag
);
849 ActionTAG
* action_And(ActionTAG
*atag
);
850 ActionTAG
* action_Or(ActionTAG
*atag
);
851 ActionTAG
* action_Not(ActionTAG
*atag
);
852 ActionTAG
* action_StringEquals(ActionTAG
*atag
);
853 ActionTAG
* action_StringLength(ActionTAG
*atag
);
854 ActionTAG
* action_StringExtract(ActionTAG
*atag
);
855 ActionTAG
* action_Pop(ActionTAG
*atag
);
856 ActionTAG
* action_ToInteger(ActionTAG
*atag
);
857 ActionTAG
* action_GetVariable(ActionTAG
*atag
);
858 ActionTAG
* action_SetVariable(ActionTAG
*atag
);
859 ActionTAG
* action_SetTarget2(ActionTAG
*atag
);
860 ActionTAG
* action_StringAdd(ActionTAG
*atag
);
861 ActionTAG
* action_GetProperty(ActionTAG
*atag
);
862 ActionTAG
* action_SetProperty(ActionTAG
*atag
);
863 ActionTAG
* action_CloneSprite(ActionTAG
*atag
);
864 ActionTAG
* action_RemoveSprite(ActionTAG
*atag
);
865 ActionTAG
* action_Trace(ActionTAG
*atag
);
866 ActionTAG
* action_StartDrag(ActionTAG
*atag
);
867 ActionTAG
* action_EndDrag(ActionTAG
*atag
);
868 ActionTAG
* action_StringLess(ActionTAG
*atag
);
869 ActionTAG
* action_RandomNumber(ActionTAG
*atag
);
870 ActionTAG
* action_MBStringLength(ActionTAG
*atag
);
871 ActionTAG
* action_CharToAscii(ActionTAG
*atag
);
872 ActionTAG
* action_AsciiToChar(ActionTAG
*atag
);
873 ActionTAG
* action_GetTime(ActionTAG
*atag
);
874 ActionTAG
* action_MBStringExtract(ActionTAG
*atag
);
875 ActionTAG
* action_MBCharToAscii(ActionTAG
*atag
);
876 ActionTAG
* action_MBAsciiToChar(ActionTAG
*atag
);
877 ActionTAG
* action_Delete(ActionTAG
*atag
);
878 ActionTAG
* action_Delete2(ActionTAG
*atag
);
879 ActionTAG
* action_DefineLocal(ActionTAG
*atag
);
880 ActionTAG
* action_CallFunction(ActionTAG
*atag
);
881 ActionTAG
* action_Return(ActionTAG
*atag
);
882 ActionTAG
* action_Modulo(ActionTAG
*atag
);
883 ActionTAG
* action_NewObject(ActionTAG
*atag
);
884 ActionTAG
* action_DefineLocal2(ActionTAG
*atag
);
885 ActionTAG
* action_InitArray(ActionTAG
*atag
);
886 ActionTAG
* action_Makehash(ActionTAG
*atag
);
887 ActionTAG
* action_TypeOf(ActionTAG
*atag
);
888 ActionTAG
* action_TargetPath(ActionTAG
*atag
);
889 ActionTAG
* action_Enumerate(ActionTAG
*atag
);
890 ActionTAG
* action_Add2(ActionTAG
*atag
);
891 ActionTAG
* action_Less2(ActionTAG
*atag
);
892 ActionTAG
* action_Equals2(ActionTAG
*atag
);
893 ActionTAG
* action_ToNumber(ActionTAG
*atag
);
894 ActionTAG
* action_ToString(ActionTAG
*atag
);
895 ActionTAG
* action_PushDuplicate(ActionTAG
*atag
);
896 ActionTAG
* action_StackSwap(ActionTAG
*atag
);
897 ActionTAG
* action_GetMember(ActionTAG
*atag
);
898 ActionTAG
* action_SetMember(ActionTAG
*atag
);
899 ActionTAG
* action_Increment(ActionTAG
*atag
);
900 ActionTAG
* action_Decrement(ActionTAG
*atag
);
901 ActionTAG
* action_CallMethod(ActionTAG
*atag
);
902 ActionTAG
* action_NewMethod(ActionTAG
*atag
);
903 ActionTAG
* action_BitAnd(ActionTAG
*atag
);
904 ActionTAG
* action_BitOr(ActionTAG
*atag
);
905 ActionTAG
* action_BitXor(ActionTAG
*atag
);
906 ActionTAG
* action_BitLShift(ActionTAG
*atag
);
907 ActionTAG
* action_BitRShift(ActionTAG
*atag
);
908 ActionTAG
* action_BitURShift(ActionTAG
*atag
);
909 ActionTAG
* action_GotoFrame(ActionTAG
*atag
, U16 frame
);
910 ActionTAG
* action_GetUrl(ActionTAG
*atag
, const char* url
, char* label
);
911 ActionTAG
* action_StoreRegister(ActionTAG
*atag
, U8 reg
);
912 ActionTAG
* action_Constantpool(ActionTAG
*atag
, char* constantpool
);
913 ActionTAG
* action_WaitForFrame(ActionTAG
*atag
, U16 frame
, U8 skip
);
914 ActionTAG
* action_SetTarget(ActionTAG
*atag
, const char* target
);
915 ActionTAG
* action_GotoLabel(ActionTAG
*atag
, char* label
);
916 ActionTAG
* action_WaitForFrame2(ActionTAG
*atag
, U8 skip
);
917 ActionTAG
* action_With(ActionTAG
*atag
, char*object
);
918 ActionTAG
* action_PushString(ActionTAG
*atag
, const char*str
);
919 ActionTAG
* action_PushFloat(ActionTAG
*atag
, float f
);
920 ActionTAG
* action_PushNULL(ActionTAG
*atag
);
921 ActionTAG
* action_PushRegister(ActionTAG
*atag
, U8 reg
);
922 ActionTAG
* action_PushBoolean(ActionTAG
*atag
, char c
);
923 ActionTAG
* action_PushDouble(ActionTAG
*atag
, double d
);
924 ActionTAG
* action_PushInt(ActionTAG
*atag
, int i
);
925 ActionTAG
* action_PushLookup(ActionTAG
*atag
, U8 index
);
926 ActionTAG
* action_Jump(ActionTAG
*atag
, U16 branch
);
927 ActionTAG
* action_GetUrl2(ActionTAG
*atag
, U8 method
);
928 ActionTAG
* action_DefineFunction(ActionTAG
*atag
, U8
*data
, int len
);
929 ActionTAG
* action_If(ActionTAG
*atag
, U16 branch
);
930 ActionTAG
* action_Call(ActionTAG
*atag
);
931 ActionTAG
* action_GotoFrame2(ActionTAG
*atag
, U8 method
);
932 ActionMarker
action_setMarker(ActionTAG
*atag
);
933 void action_fixjump(ActionMarker m1
, ActionMarker m2
);
937 // The following 3 routines only use placeobject2:
939 extern char*blendModeNames
[];
941 int swf_ObjectPlace(TAG
* t
,U16 id
,U16 depth
,MATRIX
* m
,CXFORM
* cx
,const char* name
);
942 int swf_ObjectPlaceClip(TAG
* t
,U16 id
,U16 depth
,MATRIX
* m
,CXFORM
* cx
,const char* name
, U16 clipaction
);
943 int swf_ObjectPlaceBlend(TAG
* t
,U16 id
,U16 depth
,MATRIX
* m
,CXFORM
* cx
,const char* name
, U8 blendmode
);
944 int swf_ObjectMove(TAG
* t
,U16 depth
,MATRIX
* m
,CXFORM
* cx
);
948 #define PF_MATRIX 0x04
949 #define PF_CXFORM 0x08
950 #define PF_RATIO 0x10
952 #define PF_CLIPDEPTH 0x40
953 #define PF_ACTIONEVENT 0x80
955 #define PF2_FILTERS 0x01
956 #define PF2_BLENDMODE 0x02
957 #define PF2_ASBITMAP 0x04
960 #define BLENDMODE_NORMAL 0
961 #define BLENDMODE_NORMAL2 1
962 #define BLENDMODE_LAYER 2
963 #define BLENDMODE_MULTIPLY 3
964 #define BLENDMODE_SCREEN 4
965 #define BLENDMODE_LIGHTEN 5
966 #define BLENDMODE_DARKEN 6
967 #define BLENDMODE_ADD 7
968 #define BLENDMODE_SUBSTRACT 8
969 #define BLENDMODE_DIFFERENCE 9
970 #define BLENDMODE_INVERT 10
971 #define BLENDMODE_ALPHA 11
972 #define BLENDMODE_ERASE 12
973 #define BLENDMODE_OVERLAY 13
974 #define BLENDMODE_HARDLIGHT 14
976 typedef struct _SWFPLACEOBJECT
{
980 char move
; //true: move/replace character, false: set character
991 void swf_SetPlaceObject(TAG
* t
,SWFPLACEOBJECT
* obj
);
992 void swf_GetPlaceObject(TAG
* t
,SWFPLACEOBJECT
* obj
);
993 void swf_PlaceObjectFree(SWFPLACEOBJECT
* obj
);
997 typedef struct _VIDEOSTREAM
1017 int do_motion
; //enable motion compensation (slow!)
1021 void swf_SetVideoStreamDefine(TAG
*tag
, VIDEOSTREAM
*stream
, U16 frames
, U16 width
, U16 height
);
1022 void swf_SetVideoStreamIFrame(TAG
*tag
, VIDEOSTREAM
*s
, RGBA
*pic
, int quant
/* 1-31, 1=best quality, 31=best compression*/);
1023 void swf_SetVideoStreamBlackFrame(TAG
*tag
, VIDEOSTREAM
*s
);
1024 void swf_SetVideoStreamPFrame(TAG
*tag
, VIDEOSTREAM
*s
, RGBA
*pic
, int quant
/* 1-31, 1=best quality, 31=best compression*/);
1025 void swf_SetVideoStreamMover(TAG
*tag
, VIDEOSTREAM
*s
, signed char* movex
, signed char* movey
, void** image
, int quant
);
1026 void swf_VideoStreamClear(VIDEOSTREAM
*stream
);
1033 #define BS_DOWN 0x04
1034 #define BS_OVER 0x02
1037 // Button Conditions
1039 /* missing: IDLE_OUTDOWN
1043 #define BC_OVERDOWN_IDLE 0x0100
1044 #define BC_IDLE_OVERDOWN 0x0080
1045 #define BC_OUTDOWN_IDLE 0x0040
1046 #define BC_OUTDOWN_OVERDOWN 0x0020
1047 #define BC_OVERDOWN_OUTDOWN 0x0010
1048 #define BC_OVERDOWN_OVERUP 0x0008
1049 #define BC_OVERUP_OVERDOWN 0x0004
1050 #define BC_OVERUP_IDLE 0x0002
1051 #define BC_IDLE_OVERUP 0x0001
1053 #define BC_KEY(c) (c<<9)
1055 #define BC_CURSORLEFT 0x0200
1056 #define BC_CURSORRIGHT 0x0400
1057 #define BC_POS1 0x0600
1058 #define BC_END 0x0800
1059 #define BC_INSERT 0x0a00
1060 #define BC_DELETE 0x0c00
1061 #define BC_CLEAR 0x0e00
1062 #define BC_BACKSPACE 0x1000
1063 #define BC_ENTER 0x1a00
1064 #define BC_CURSORUP 0x1c00
1065 #define BC_CURSORDOWN 0x1e00
1066 #define BC_PAGEUP 0x2000
1067 #define BC_PAGEDOWN 0x2200
1068 #define BC_TAB 0x2400
1069 #define BC_ESCAPE 0x3600
1070 #define BC_SPACE 0x4000
1072 /* these are probably only valid with linux:
1077 Escape/Ctrl-[ 0x3600
1084 /* everything above 0x4000 is standard ascii:
1085 0x4000 ' ' 0x4200 '!' 0x4600 '#' 0x4800 '$' 0x4a00 '%' 0x4c00 '&' ...
1086 0x6000 '0' ... 0x7200 '9'
1088 0x8200 'A' ... 0xb400 'Z'
1095 #define BF_TRACKMENU 0x01
1097 int swf_ButtonSetRecord(TAG
* t
,U8 state
,U16 id
,U16 layer
,MATRIX
* m
,CXFORM
* cx
);
1098 int swf_ButtonSetCondition(TAG
* t
,U16 condition
); // for DefineButton2
1099 int swf_ButtonSetFlags(TAG
* t
,U8 flags
); // necessary for DefineButton2
1100 int swf_ButtonPostProcess(TAG
* t
,int anz_action
); // Set all offsets in DefineButton2-Tags (how many conditions to process)
1101 ActionTAG
* swf_ButtonGetAction(TAG
*t
);
1105 typedef struct RENDERBUF
1113 void swf_Render_Init(RENDERBUF
*buf
, int posx
, int posy
, int width
, int height
, int antialize
, int multiply
);
1114 void swf_Render_SetBackground(RENDERBUF
*buf
, RGBA
*img
, int width
, int height
);
1115 void swf_Render_SetBackgroundColor(RENDERBUF
*buf
, RGBA color
);
1116 RGBA
* swf_Render(RENDERBUF
*dest
);
1117 void swf_RenderShape(RENDERBUF
*dest
, SHAPE2
*shape
, MATRIX
*m
, CXFORM
*c
, U16 depth
,U16 clipdepth
);
1118 void swf_RenderSWF(RENDERBUF
*buf
, SWF
*swf
);
1119 void swf_Render_AddImage(RENDERBUF
*buf
, U16 id
, RGBA
*img
, int width
, int height
); /* img is non-premultiplied */
1120 void swf_Render_ClearCanvas(RENDERBUF
*dest
);
1121 void swf_Render_Delete(RENDERBUF
*dest
);
1125 #define FILTERTYPE_DROPSHADOW 0
1126 #define FILTERTYPE_BLUR 1
1127 #define FILTERTYPE_GLOW 2
1128 #define FILTERTYPE_BEVEL 3
1129 #define FILTERTYPE_GRADIENTGLOW 4
1130 #define FILTERTYPE_CONVOLUTION 5
1131 #define FILTERTYPE_COLORMATRIX 6
1132 #define FILTERTYPE_GRADIENTBEVEL 7
1134 extern char*filtername
[];
1136 typedef struct _FILTER_GRADIENTGLOW
{
1149 } FILTER_GRADIENTGLOW
;
1151 typedef struct _FILTER_DROPSHADOW
{
1163 } FILTER_DROPSHADOW
;
1165 typedef struct _FILTER_BEVEL
{
1181 typedef struct _FILTER_BLUR
{
1188 typedef struct _FILTER_GLOW
{
1200 void swf_SetFilter(TAG
*tag
, FILTER
*f
);
1201 FILTER
*swf_GetFilter(TAG
*tag
);
1202 FILTER
*swf_NewFilter(U8 type
);
1203 void swf_DeleteFilter(FILTER
*f
);