added glyphnames tag.
[swftools.git] / lib / rfxswf.h
index d565c83..2b53d83 100644 (file)
@@ -36,6 +36,7 @@ extern "C" {
 #include <ctype.h>
 #include "../config.h"
 #include "./bitio.h"
+#include "./drawer.h"
 
 #define DEBUG_RFXSWF
 
@@ -77,6 +78,9 @@ typedef         signed char     S8;
 typedef         signed long     SFIXED;
 typedef         signed long     SCOORD;
 
+#define SCOORD_MAX 0x7fffffff
+#define SCOORD_MIN -0x80000000
+
 // Basic Structures
 
 typedef struct _SPOINT
@@ -119,6 +123,8 @@ typedef struct _CXFORM
   S16           b0, b1;
 } CXFORM, * LPCXFORM;
 
+#define GRADIENT_LINEAR 0x10
+#define GRADIENT_RADIAL 0x12
 typedef struct _GRADIENT
 {
     int num;
@@ -236,17 +242,20 @@ int   swf_SetU8(TAG * t,U8 v);              // resets Bitcount
 int   swf_SetU16(TAG * t,U16 v);
 int   swf_SetU32(TAG * t,U32 v);
 
-int   swf_GetPoint(TAG * t,SPOINT * p);     // resets Bitcount
+//int   swf_GetPoint(TAG * t,SPOINT * p);     // resets Bitcount
 int   swf_GetRect(TAG * t,SRECT * r);
 int   swf_GetMatrix(TAG * t,MATRIX * m);
 int   swf_GetCXForm(TAG * t,CXFORM * cx,U8 alpha);
 
-int   swf_SetPoint(TAG * t,SPOINT * p);     // resets Bitcount
+//int   swf_SetPoint(TAG * t,SPOINT * p);     // resets Bitcount
 int   swf_SetRect(TAG * t,SRECT * r);
 int   swf_SetMatrix(TAG * t,MATRIX * m);
 int   swf_SetCXForm(TAG * t,CXFORM * cx,U8 alpha);
 int   swf_SetRGB(TAG * t,RGBA * col);
 int   swf_SetRGBA(TAG * t,RGBA * col);
+void  swf_SetPassword(TAG * t, const char * password);
+
+int   swf_VerifyPassword(TAG * t, const char * password);
 
 // helper functions:
 
@@ -333,8 +342,12 @@ SRECT swf_TurnRect(SRECT r, MATRIX* m);
 #define ST_VIDEOFRAME           61
 #define ST_DEFINEFONTINFO2     62
 #define ST_MX4                 63 /*(?) */
+#define ST_SCRIPTLIMITS                65 /* version 7- u16 maxrecursedepth, u16 scripttimeoutseconds */
+#define ST_SETTABINDEX         66 /* version 7- u16 depth(!), u16 tab order value */
 
+/* custom tags- only valid for swftools */
 #define ST_REFLEX              777 /* to identify generator software */
+#define ST_GLYPHNAMES          778
 
 // Advanced Funtions
 
@@ -350,7 +363,7 @@ typedef struct _FILLSTYLE
   RGBA     color;
   MATRIX    m; 
   U16      id_bitmap;
-  GRADIENT* gradient;
+  GRADIENT  gradient;
 } FILLSTYLE, * LPFILLSTYLE;
      
 typedef struct _SHAPE           // NEVER access a Shape-Struct directly !
@@ -409,6 +422,7 @@ int   swf_SetSimpleShape(TAG * t,SHAPE * s);   // without Linestyle/Fillstyle Re
 int   swf_ShapeAddLineStyle(SHAPE * s,U16 width,RGBA * color);
 int   swf_ShapeAddSolidFillStyle(SHAPE * s,RGBA * color);
 int   swf_ShapeAddBitmapFillStyle(SHAPE * s,MATRIX * m,U16 id_bitmap,int clip);
+int   swf_ShapeAddGradientFillStyle(SHAPE * s,MATRIX * m,GRADIENT* gradient,int radial);
 
 int   swf_SetShapeStyles(TAG * t,SHAPE * s);
 int   swf_ShapeCountBits(SHAPE * s,U8 * fbits,U8 * lbits);
@@ -416,8 +430,8 @@ int   swf_SetShapeBits(TAG * t,SHAPE * s);
 int   swf_SetShapeHeader(TAG * t,SHAPE * s); // one call for upper three functions
 
 int   swf_ShapeSetMove(TAG * t,SHAPE * s,S32 x,S32 y);
-int   swf_ShapeSetStyle(TAG * t,SHAPE * s,U16 line,U16 fill0,U16 fill1);
-int   swf_ShapeSetAll(TAG * t,SHAPE * s,S32 x,S32 y,U16 line,U16 fill0,U16 fill1);
+int   swf_ShapeSetStyle(TAG * t,SHAPE * s,int line,int fill0,int fill1);
+int   swf_ShapeSetAll(TAG * t,SHAPE * s,S32 x,S32 y,int line,int fill0,int fill1);
 
 int   swf_ShapeSetLine(TAG * t,SHAPE * s,S32 x,S32 y);
 int   swf_ShapeSetCurve(TAG * t,SHAPE * s,S32 x,S32 y,S32 ax,S32 ay);
@@ -432,12 +446,18 @@ void         swf_Shape2ToShape(SHAPE2*shape2, SHAPE*shape);
 SRECT     swf_GetShapeBoundingBox(SHAPE2*shape);
 void       swf_SetShape2(TAG*tag, SHAPE2*shape);
 void      swf_Shape2Free(SHAPE2 * s);
+void   swf_DumpShape(SHAPE2*shape2);
 
-// swffont.c
+// swfdraw.c
 
-// does not support wide characters !
+void swf_Shape01DrawerInit(drawer_t*draw, TAG*tag);
+void swf_Shape11DrawerInit(drawer_t*draw, TAG*tag);
+SHAPE* swf_ShapeDrawerToShape(drawer_t*draw);
+SRECT swf_ShapeDrawerGetBBox(drawer_t*draw);
+
+void swf_DrawString(drawer_t*draw, const char*source);
 
-#define MAX_CHAR_PER_FONT 512
+// swftext.c
 
 typedef struct _KERNING
 {
@@ -481,10 +501,12 @@ typedef struct _SWFFONT
   int  *       ascii2glyph;
   SWFGLYPH *   glyph;
   U8           language;
+  char **      glyphnames;
 } SWFFONT, * LPSWFFONT;
 
+// does not support wide characters !
 typedef struct _FONTUSAGE
-{ U8 code[MAX_CHAR_PER_FONT];
+{ U8* code;
 } FONTUSAGE, * LPFONTUSAGE;
 
 #define ET_HASTEXT 32768
@@ -526,7 +548,7 @@ int swf_FontIsBold(SWFFONT * f);
 int swf_FontSetID(SWFFONT * f,U16 id);
 int swf_FontReduce(SWFFONT * f,FONTUSAGE * use);
 
-int swf_FontInitUsage(FONTUSAGE * use);
+int swf_FontInitUsage(SWFFONT * f,FONTUSAGE * use);
 int swf_FontUse(FONTUSAGE * use,U8 * s);
 
 int swf_FontSetDefine(TAG * t,SWFFONT * f);
@@ -547,7 +569,8 @@ void swf_FontFree(SWFFONT * f);
 U32 swf_TextGetWidth(SWFFONT * font,U8 * s,int scale);
 int swf_TextCountBits(SWFFONT * font,U8 * s,int scale,U8 * gbits,U8 * abits);
 
-int swf_TextSetInfoRecord(TAG * t,SWFFONT * font,U16 size,RGBA * color,S16 dx,S16 dy);
+#define SET_TO_ZERO 0x80000000
+int swf_TextSetInfoRecord(TAG * t,SWFFONT * font,U16 size,RGBA * color,int dx,int dy);
 int swf_TextSetCharRecord(TAG * t,SWFFONT * font,U8 * s,int scale,U8 gbits,U8 abits);
 
 int swf_TextPrintDefineText(TAG * t,SWFFONT * f);
@@ -559,6 +582,13 @@ void swf_SetEditText(TAG*tag, U16 flags, SRECT r, char*text, RGBA*color,
 
 SRECT swf_SetDefineText(TAG*tag, SWFFONT*font, RGBA*rgb, char*text, int scale);
 
+void swf_DrawText(drawer_t*draw, SWFFONT*font, char*text);
+
+// swffont.c
+
+SWFFONT* swf_LoadTrueTypeFont(char*filename);
+SWFFONT* swf_LoadT1Font(char*filename);
+
 // swfdump.c
 
 void swf_DumpHeader(FILE * f,SWF * swf);
@@ -647,6 +677,8 @@ int swf_SetJPEGBitsLines(JPEGBITS * jpegbits,U8 ** data,int n);
 int swf_SetJPEGBitsLine(JPEGBITS * jpegbits,U8 * data);
 int swf_SetJPEGBitsFinish(JPEGBITS * jpegbits);
 
+void swf_GetJPEGSize(char * fname, int*width, int*height);
+
 int swf_SetJPEGBits(TAG * t,char * fname,int quality);
 void swf_SetJPEGBits2(TAG * t,U16 width,U16 height,RGBA * bitmap,int quality);
 int swf_SetJPEGBits3(TAG * tag,U16 width,U16 height,RGBA* bitmap, int quality);