replaced libart with new polygon code
[swftools.git] / lib / modules / swftext.c
index ee3923e..d2b8989 100644 (file)
@@ -310,7 +310,8 @@ int swf_FontExtract_DefineFont2(int id, SWFFONT * font, TAG * tag)
        swf_GetSimpleShape(tag, &(font->glyph[t].shape));
     }
 
-    swf_SetTagPos(tag, offset[glyphcount]+offset_start);
+    if(glyphcount)
+        swf_SetTagPos(tag, offset[glyphcount]+offset_start);
 
     free(offset);
 
@@ -801,6 +802,7 @@ int swf_FontInitUsage(SWFFONT * f)
     f->use->is_reduced = 0;
     f->use->used_glyphs = 0;
     f->use->chars = (int*)rfx_calloc(sizeof(f->use->chars[0]) * f->numchars);
+    f->use->glyphs_specified = 0;
     return 0;
 }
 
@@ -942,10 +944,11 @@ int swf_FontSetDefine2(TAG * tag, SWFFONT * f)
     swf_SetU8(tag, 0);         //reserved flags
     if (f->name) {
        /* font name */
-       swf_SetU8(tag, strlen((const char*)f->name));
-       swf_SetBlock(tag, f->name, strlen((const char*)f->name));
+       swf_SetU8(tag, strlen((const char*)f->name)+1);
+       swf_SetBlock(tag, f->name, strlen((const char*)f->name)+1);
     } else {
        /* font name (="") */
+       swf_SetU8(tag, 1);
        swf_SetU8(tag, 0);
     }
     /* number of glyphs */
@@ -1322,7 +1325,7 @@ SRECT swf_TextCalculateBBoxUTF8(SWFFONT * font, U8 * s, int scale)
 }
 
 
-SWFFONT *swf_ReadFont(char *filename)
+SWFFONT *swf_ReadFont(const char *filename)
 {
     int f;
     SWF swf;
@@ -1362,7 +1365,7 @@ void swf_WriteFont(SWFFONT * font, char *filename)
 
     memset(&swf, 0x00, sizeof(SWF));
 
-    swf.fileVersion = 4;
+    swf.fileVersion = 9;
     swf.frameRate = 0x4000;
 
     /* if we use DefineFont1 to store the characters,
@@ -1387,6 +1390,17 @@ void swf_WriteFont(SWFFONT * font, char *filename)
        t = swf_InsertTag(t, ST_DEFINEFONT2);
        swf_FontSetDefine2(t, font);
     }
+    if(font->name) {
+       t = swf_InsertTag(t, ST_NAMECHARACTER);
+        swf_SetU16(t, WRITEFONTID);
+        swf_SetString(t, font->name);
+       t = swf_InsertTag(t, ST_EXPORTASSETS);
+        swf_SetU16(t, 1);
+        swf_SetU16(t, WRITEFONTID);
+        swf_SetString(t, font->name);
+
+        t = swf_AddAS3FontDefine(t, WRITEFONTID, font->name);
+    }
 
     if (storeGlyphNames && font->glyphnames) {
        int c;
@@ -1510,7 +1524,7 @@ void swf_WriteFont(SWFFONT * font, char *filename)
 }
 
 
-void swf_SetEditText(TAG * tag, U16 flags, SRECT r, char *text, RGBA * color, int maxlength, U16 font, U16 height, EditTextLayout * layout, char *variable)
+void swf_SetEditText(TAG * tag, U16 flags, SRECT r, const char *text, RGBA * color, int maxlength, U16 font, U16 height, EditTextLayout * layout, const char *variable)
 {
     swf_SetRect(tag, &r);
     swf_ResetWriteBits(tag);
@@ -1551,7 +1565,7 @@ void swf_SetEditText(TAG * tag, U16 flags, SRECT r, char *text, RGBA * color, in
        swf_SetString(tag, (U8*)text);
 }
 
-SRECT swf_SetDefineText(TAG * tag, SWFFONT * font, RGBA * rgb, char *text, int scale)
+SRECT swf_SetDefineText(TAG * tag, SWFFONT * font, RGBA * rgb, const char *text, int scale)
 {
     SRECT r;
     U8 gbits, abits;
@@ -1674,7 +1688,7 @@ void swf_FontCreateLayout(SWFFONT * f)
     }
 }
 
-void swf_DrawText(drawer_t * draw, SWFFONT * font, int size, char *text)
+void swf_DrawText(drawer_t * draw, SWFFONT * font, int size, const char *text)
 {
     U8 *s = (U8 *) text;
     int advance = 0;