#define FILEATTRIBUTE_USENETWORK 1
#define FILEATTRIBUTE_AS3 8
#define FILEATTRIBUTE_SYMBOLCLASS 16
+#define FILEATTRIBUTE_USEACCELERATEDBLIT 32
+#define FILEATTRIBUTE_USEHARDWAREGPU 64
+
typedef struct _SWF
{ U8 fileVersion;
U8 compressed; // SWF or SWC?
// Basic Functions
+SWF* swf_OpenSWF(char*filename);
int swf_ReadSWF2(reader_t*reader, SWF * swf); // Reads SWF via callback
int swf_ReadSWF(int handle,SWF * swf); // Reads SWF to memory (malloc'ed), returns length or <0 if fails
int swf_WriteSWF2(writer_t*writer, SWF * swf); // Writes SWF via callback, returns length or <0 if fails
int swf_WriteSWF(int handle,SWF * swf); // Writes SWF to file, returns length or <0 if fails
+int swf_SaveSWF(SWF * swf, char*filename);
int swf_WriteCGI(SWF * swf); // Outputs SWF with valid CGI header to stdout
void swf_FreeTags(SWF * swf); // Frees all malloc'ed memory for swf
SWF* swf_CopySWF(SWF*swf);
U16 swf_GetU16(TAG * t);
#define swf_GetS16(tag) ((S16)swf_GetU16(tag))
U32 swf_GetU32(TAG * t);
+float swf_GetF16(TAG * t);
void swf_GetRGB(TAG * t, RGBA * col);
void swf_GetRGBA(TAG * t, RGBA * col);
void swf_GetGradient(TAG * t, GRADIENT * gradient, char alpha);
int swf_SetU16(TAG * t,U16 v);
void swf_SetS16(TAG * t,int v);
int swf_SetU32(TAG * t,U32 v);
+void swf_SetF16(TAG * t,float f);
void swf_SetString(TAG*t,const char*s);
+float floatToF16(float f);
+float F16toFloat(U16 x);
+
/* abc datatypes */
U32 swf_GetU30(TAG*tag);
int swf_SetU30(TAG*tag, U32 u);
int swf_SetLineStyle(TAG * t,LINESTYLE * l);
+void swf_ShapeSetRectangle(TAG*tag, U16 shapeid, int width, int height, RGBA*rgba);
+void swf_ShapeSetRectangleWithBorder(TAG*tag, U16 shapeid, int width, int height, RGBA*rgba, int linewidth, RGBA*linecolor);
void swf_ShapeSetBitmapRect(TAG * t, U16 gfxid, int width, int height);
//SHAPELINE* swf_ParseShapeData(U8*data, int bits, int fillbits, int linebits);
} SWFKERNING;
typedef struct _SWFLAYOUT
-{ S16 ascent;
- S16 descent;
+{ U16 ascent;
+ U16 descent;
S16 leading;
SRECT * bounds;
U16 kerningcount;
SHAPE * shape;
} SWFGLYPH;
+typedef struct _SWFGLYPHPAIR
+{
+ U16 char1;
+ U16 char2;
+ int num;
+} SWFGLYPHPAIR;
+
typedef struct _FONTUSAGE
{ int* chars;
char is_reduced;
int used_glyphs;
int glyphs_specified;
+ U16 smallest_size;
+
+ SWFGLYPHPAIR* neighbors;
+ int num_neighbors;
+ int neighbors_size;
+ int* neighbors_hash;
+ int neighbors_hash_size;
} FONTUSAGE;
#define FONT_STYLE_BOLD 1
#define FONT_ENCODING_ANSI 2
#define FONT_ENCODING_SHIFTJIS 4
+#define FONTALIGN_THIN 0
+#define FONTALIGN_MEDIUM 1
+#define FONTALIGN_THICK 2
+
+typedef struct _ALIGNZONE
+{
+ U16 x,y;
+ U16 dx,dy;
+} ALIGNZONE;
+
typedef struct _SWFFONT
{ int id; // -1 = not set
U8 version; // 0 = not set, 1 = definefont, 2 = definefont2
U16 * glyph2ascii;
int * ascii2glyph;
SWFGLYPH * glyph;
+ ALIGNZONE * alignzones;
+ U8 alignzone_flags;
U8 language;
char ** glyphnames;
int swf_FontExtract_DefineFontInfo(int id, SWFFONT * f, TAG * t);
int swf_FontExtract_DefineFont(int id, SWFFONT * f, TAG * t);
int swf_FontExtract_GlyphNames(int id, SWFFONT * f, TAG * tag);
+int swf_FontExtract_DefineFontAlignZones(int id, SWFFONT * font, TAG * tag);
+
int swf_FontIsItalic(SWFFONT * f);
int swf_FontIsBold(SWFFONT * f);
int swf_FontReduce_swfc(SWFFONT * f);
int swf_FontInitUsage(SWFFONT * f);
-int swf_FontUseGlyph(SWFFONT * f, int glyph);
+int swf_FontUseGlyph(SWFFONT * f, int glyph, U16 size);
+void swf_FontUsePair(SWFFONT * f, int char1, int char2);
+int swf_FontUseGetPair(SWFFONT * f, int char1, int char2);
int swf_FontUseAll(SWFFONT* f);
-int swf_FontUseUTF8(SWFFONT * f, U8 * s);
+int swf_FontUseUTF8(SWFFONT * f, U8 * s, U16 size);
int swf_FontUse(SWFFONT* f,U8 * s);
int swf_FontSetDefine(TAG * t,SWFFONT * f);
int swf_FontSetDefine2(TAG * t,SWFFONT * f);
int swf_FontSetInfo(TAG * t,SWFFONT * f);
+void swf_FontSetAlignZones(TAG*t, SWFFONT *f);
void swf_FontCreateLayout(SWFFONT*f);
+void swf_FontCreateAlignZones(SWFFONT * f);
void swf_FontAddLayout(SWFFONT * f, int ascent, int descent, int leading);
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);
int x0,int y0,int x1,int y1,int x2,int y2);
int swf_GetNumUsedIDs(TAG * t);
void swf_GetUsedIDs(TAG * t, int * positions);
-void swf_Relocate(SWF*swf, char*bitmap); // bitmap is 65536 bytes, bitmap[a]==0 means id a is free
+char swf_Relocate(SWF*swf, char*bitmap); // bitmap is 65536 bytes, bitmap[a]==0 means id a is free
void swf_RelocateDepth(SWF*swf, char*bitmap); // bitmap is 65536 bytes, bitmap[d]==0 means depth d is free
TAG* swf_Concatenate (TAG*list1,TAG*list2); // warning: both list1 and list2 are invalid after this call.
void swf_AddButtonLinks(SWF*swf, char stop_each_frame, char events);
TAG*swf_AddAS3FontDefine(TAG*tag, U16 id, char*fontname);
#include "as3/compiler.h"
+#include "as3/import.h"
// swfaction.c
#define PF2_ASBITMAP 0x04
//...
+#define BLENDMODE_NORMAL 0
+#define BLENDMODE_NORMAL2 1
+#define BLENDMODE_LAYER 2
+#define BLENDMODE_MULTIPLY 3
+#define BLENDMODE_SCREEN 4
+#define BLENDMODE_LIGHTEN 5
+#define BLENDMODE_DARKEN 6
+#define BLENDMODE_ADD 7
+#define BLENDMODE_SUBSTRACT 8
+#define BLENDMODE_DIFFERENCE 9
+#define BLENDMODE_INVERT 10
+#define BLENDMODE_ALPHA 11
+#define BLENDMODE_ERASE 12
+#define BLENDMODE_OVERLAY 13
+#define BLENDMODE_HARDLIGHT 14
+
typedef struct _SWFPLACEOBJECT {
U16 depth;
U16 id; // may be 0