int fid;
U32 offset_start;
U32 *offset;
- U8 flags1, flags2, namelen;
+ U8 flags1, langcode, namelen;
swf_SetTagPos(tag, 0);
font->version = 2;
fid = swf_GetU16(tag);
return id;
font->id = fid;
flags1 = swf_GetU8(tag);
- flags2 = swf_GetU8(tag); //reserved flags
+ langcode = swf_GetU8(tag); //reserved flags
if (flags1 & 1)
font->style |= FONT_STYLE_BOLD;
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);
maxcode = 0;
for (t = 0; t < glyphcount; t++) {
int code;
- if (flags1 & 4) // wide codes
+ if (flags1 & 4) // wide codes (always on for definefont3)
code = swf_GetU16(tag);
else
code = swf_GetU8(tag);
break;
case ST_DEFINEFONT2:
+ case ST_DEFINEFONT3:
nid = swf_FontExtract_DefineFont2(id, f, t);
break;
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;
}
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 */
}
-SWFFONT *swf_ReadFont(char *filename)
+SWFFONT *swf_ReadFont(const char *filename)
{
int f;
SWF swf;
memset(&swf, 0x00, sizeof(SWF));
- swf.fileVersion = 4;
+ swf.fileVersion = 9;
swf.frameRate = 0x4000;
/* if we use DefineFont1 to store the characters,
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, (char*)font->name);
+ t = swf_InsertTag(t, ST_EXPORTASSETS);
+ swf_SetU16(t, 1);
+ swf_SetU16(t, WRITEFONTID);
+ swf_SetString(t, (char*)font->name);
+
+ t = swf_AddAS3FontDefine(t, WRITEFONTID, (char*)font->name);
+ }
if (storeGlyphNames && font->glyphnames) {
int c;
swf_SetU16(t, font->numchars);
for (c = 0; c < font->numchars; c++) {
if (font->glyphnames[c])
- swf_SetString(t, (U8*)font->glyphnames[c]);
+ swf_SetString(t, font->glyphnames[c]);
else
- swf_SetString(t, (U8*)"");
+ swf_SetString(t, "");
}
}
}
-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);
swf_SetU16(tag, layout->indent); //indent
swf_SetU16(tag, layout->leading); //leading
}
- swf_SetString(tag, (U8*)variable);
+ swf_SetString(tag, variable);
if (flags & ET_HASTEXT)
- swf_SetString(tag, (U8*)text);
+ swf_SetString(tag, 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;
}
}
-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;