X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=lib%2Fmodules%2Fswftext.c;h=411ab9d829d4aa18911a9bad050fd092ce8a9674;hb=138f9803b5b4d091a6ac75487a21858a5bbbcb9f;hp=a5db863ff3a00826db52420a80cba92a56c971bc;hpb=71b9d237aeaf348d104d8a3c5db7188b992a5fbe;p=swftools.git diff --git a/lib/modules/swftext.c b/lib/modules/swftext.c index a5db863..411ab9d 100644 --- a/lib/modules/swftext.c +++ b/lib/modules/swftext.c @@ -107,16 +107,17 @@ int swf_FontExtract_DefineFontInfo(int id,SWFFONT * f,TAG * t) swf_SaveTagPos(t); swf_SetTagPos(t,0); - if(f->version>1) { - // DefineFont2 doesn't have FontInfo fields - fprintf(stderr, "fixme: FontInfo field for DefineFont2 encountered\n"); - return -1; - } fid = swf_GetU16(t); if (fid==id) { U8 l = swf_GetU8(t); int i; + + if(f->version>1) { + // DefineFont2 doesn't have FontInfo fields + fprintf(stderr, "fixme: FontInfo field for DefineFont2 encountered\n"); + return -1; + } if (l) { if (f->name) free(f->name); @@ -165,7 +166,7 @@ int swf_FontExtract_DefineFont2(int id,SWFFONT * font,TAG * tag) font->version=2; fid = swf_GetU16(tag); if(id && id!=fid) - return; + return id; font->id = fid; flags1 = swf_GetU8(tag); flags2 = swf_GetU8(tag); //reserved flags @@ -303,8 +304,10 @@ int swf_FontExtract_DefineTextCallback(int id,SWFFONT * f,TAG * t,int jobs, glyph = swf_GetBits(t,gbits); adv = swf_GetBits(t,abits); if (id==fid) // mitlesen ? - { int code = f->glyph2ascii[glyph]; - if (jobs&FEDTJ_PRINT) printf("%c",code); + if (jobs&FEDTJ_PRINT) { + { int code = f->glyph2ascii[glyph]; + printf("%c",code); + } if (jobs&FEDTJ_MODIFY) /*if (!f->glyph[code].advance)*/ f->glyph[glyph].advance = adv; } @@ -724,8 +727,6 @@ void swf_WriteFont(SWFFONT*font, char* filename) swf.fileVersion = 4; swf.frameRate = 0x4000; - swf.movieSize.xmax = 20*640; - swf.movieSize.ymax = 20*480; if(!useDefineFont2) /* if we use DefineFont1 to store the characters, @@ -756,18 +757,18 @@ void swf_WriteFont(SWFFONT*font, char* filename) { int textscale = 400; int s; int xmax = 0; - int ymax = textscale * 2 * 20; + int ymax = textscale * 2 * (font->maxascii/16+1); U8 gbits,abits; - char text[257]; + char text[MAX_CHAR_PER_FONT+1]; int x,y; - text[256]=0; - for(s=0;s<256;s++) + text[MAX_CHAR_PER_FONT]=0; + for(s=0;smaxascii;s++) { int g = font->ascii2glyph[s]; text[s] = s; if(g>=0) { - if(font->glyph[g].advance*textscale/100 > xmax) - xmax = font->glyph[g].advance*textscale/100; + if(font->glyph[g].advance*textscale/200 > xmax) + xmax = font->glyph[g].advance*textscale/200; } } swf.movieSize.xmax = xmax*20; @@ -795,11 +796,11 @@ void swf_WriteFont(SWFFONT*font, char* filename) rgb.r = 0x00; rgb.g = 0x00; rgb.b = 0x00; - for(y=0;y<16;y++) + for(y=0;y<=((font->maxascii-1)/16);y++) { int c=0,lastx=-1, firstx=0; for(x=0;x<16;x++) { - int g = font->ascii2glyph[y*16+x]; + int g = (y*16+xmaxascii)?font->ascii2glyph[y*16+x]:-1; if(g>=0 && font->glyph[g].shape) { c++; if(lastx<0) @@ -810,7 +811,7 @@ void swf_WriteFont(SWFFONT*font, char* filename) swf_TextSetInfoRecord(t,font,textscale,&rgb,lastx+1,textscale*y*2); for(x=0;x<16;x++) { - int g = font->ascii2glyph[y*16+x]; + int g = (y*16+xmaxascii)?font->ascii2glyph[y*16+x]:-1; if(g>=0 && font->glyph[g].shape) { if(lastx != x*xmax) { swf_TextSetInfoRecord(t,0,0,0,x*xmax+1,0); @@ -844,3 +845,40 @@ 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) +{ + swf_SetRect(tag,&r); + swf_ResetWriteBits(tag); + + flags &= ~(ET_HASTEXT|ET_HASTEXTCOLOR|ET_HASMAXLENGTH|ET_HASFONT|ET_HASLAYOUT); + if(text) flags |= ET_HASTEXT; + if(color) flags |= ET_HASTEXTCOLOR; + if(maxlength) flags |= ET_HASMAXLENGTH; + if(font) flags |= ET_HASFONT; + if(layout) flags |= ET_HASLAYOUT; + + swf_SetBits(tag, flags, 16); + + if(flags & ET_HASFONT) { + swf_SetU16(tag, font); //font + swf_SetU16(tag, height); //fontheight + } + if(flags & ET_HASTEXTCOLOR) { + swf_SetRGBA(tag, color); + } + if(flags & ET_HASMAXLENGTH) { + swf_SetU16(tag, maxlength); //maxlength + } + if(flags & ET_HASLAYOUT) { + swf_SetU8(tag,layout->align); //align + swf_SetU16(tag,layout->leftmargin); //left margin + swf_SetU16(tag,layout->rightmargin); //right margin + swf_SetU16(tag,layout->indent); //indent + swf_SetU16(tag,layout->leading); //leading + } + swf_SetString(tag, variable); + if(flags & ET_HASTEXT) + swf_SetString(tag,text); +} +