📄 ffont.cpp
字号:
{
if((*i)->returnGlyphBits() > gbits) { gbits=(*i)->returnGlyphBits(); }
if((*i)->returnAdvBits() > abits) { abits=(*i)->returnAdvBits(); }
}
}
WRITE_UWORD2(data.GetID(), tmp);
tmp << data.rect;
tmp << data.matrix;
tmp << (char)gbits;
tmp << (char)abits;
for(std::vector<FlashTextRecord *>::iterator i2 = data.records.begin(); i2 != data.records.end(); i2++)
{
(*i2)->SetTagVersion(2);
(*i2)->Write(tmp,gbits,abits);
}
tmp << (char)0;
out << FlashTagHeader(33, tmp.pcount());
out.write(tmp.rdbuf()->str(), tmp.pcount());
return out;
}
std::istream &operator >> (std::istream &in, FlashTagDefineText2 &data)
{
UWORD id;
READ_UWORD(id);
data.SetID(id);
in >> data.rect;
in >> data.matrix;
int gbits = in.get();
int abits = in.get();
for(;;)
{
int c = in.get();
if(in.eof())
{
break;
//throw;
}
if(c == 0)
{
break;
}
if(GetIsolatedBits(c,7,8) == 1)
{
in.putback(c);
FlashTextRecordStyle *s = new FlashTextRecordStyle();
s->SetTagVersion(2);
s->Read(in, gbits, abits);
data.AddTextRecord(s);
data.gc_records.push_back(s);
}
else
{
in.putback(c);
FlashTextRecordGlyph *g = new FlashTextRecordGlyph();
g->Read(in, gbits, abits);
data.AddTextRecord(g);
data.gc_records.push_back(g);
}
}
return in;
}
std::ostream &operator << (std::ostream &out, FlashKerningRecord &data)
{
if(data.GetTagVersion() > 1)
{
WRITE_UWORD(data.code1);
WRITE_UWORD(data.code2);
WRITE_SWORD(data.adjustment);
}
else
{
out.put((unsigned char)data.code1);
out.put((unsigned char)data.code2);
WRITE_SWORD(data.adjustment);
}
return out;
}
std::istream &operator >> (std::istream &in, FlashKerningRecord &data)
{
if(data.GetTagVersion() > 1)
{
READ_UWORD(data.code1);
READ_UWORD(data.code2);
READ_SWORD(data.adjustment);
}
else
{
data.code1 = in.get();
data.code2 = in.get();
READ_SWORD(data.adjustment);
}
return in;
}
// TODO: Error checking nGlyph?!
void FlashTagDefineFont2::FlashFontLayout::Write(std::ostream &out)
{
WRITE_SWORD(fontAscent);
WRITE_SWORD(fontDescent);
WRITE_SWORD(fontLeading);
for(std::vector<SWORD>::iterator i=fontAdvanceTable.begin(); i != fontAdvanceTable.end(); i++)
{
WRITE_SWORD(*i);
}
for(std::vector<FlashRect>::iterator i2=fontBoundsTable.begin(); i2 != fontBoundsTable.end(); i2++)
{
out << *i2;
}
WRITE_UWORD((UWORD)fontKerningTable.size());
for(std::vector<FlashKerningRecord>::iterator i3=fontKerningTable.begin(); i3 != fontKerningTable.end(); i3++)
{
out << *i3;
}
}
void FlashTagDefineFont2::FlashFontLayout::Read(std::istream &in, UWORD NumGlyphs)
{
READ_SWORD(fontAscent);
READ_SWORD(fontDescent);
READ_SWORD(fontLeading);
for(int i = 0; i < NumGlyphs; i++)
{
SWORD tmp;
READ_SWORD(tmp);
fontAdvanceTable.push_back(tmp);
}
for(int i2 = 0; i2 < NumGlyphs; i2++)
{
FlashRect tmp;
in >> tmp;
fontBoundsTable.push_back(tmp);
}
UWORD size;
READ_UWORD(size);
for(int i3 = 0; i3 < NumGlyphs; i3++)
{
FlashKerningRecord r;
in >> r;
fontKerningTable.push_back(r);
}
}
std::ostream &operator << (std::ostream &out, FlashTagDefineFont2 &data)
{
std::ostringstream tmp(std::ios_base::binary);
std::ostringstream tmp3(std::ios_base::binary);
tmp.put((unsigned char)strlen(data.fontname));
tmp << data.fontname;
WRITE_UWORD2((UWORD)data.shapes.size(),tmp);
std::ostringstream tmp2(std::ios_base::binary);
std::vector<UDWORD> offsets;
for(std::vector<FlashShape>::iterator i = data.shapes.begin(); i != data.shapes.end(); i++)
{
offsets.push_back(tmp3.str().size());
tmp3 << *i;
}
bool longoffsets;
if(offsets.size() > 0) longoffsets = offsets[offsets.size()-1] > (64*1024);
else longoffsets = false;
for(std::vector<UDWORD>::iterator i2 = offsets.begin(); i2 != offsets.end(); i2++)
{
if(longoffsets)
{
WRITE_UDWORD2((UDWORD)*i2+offsets.size()*4+2,tmp2);
}
else
{
WRITE_UWORD2((UWORD)(*i2+offsets.size()*2+2),tmp2);
}
}
tmp.write(tmp2.str().c_str(), tmp2.str().size());
WRITE_UWORD2((UWORD)(offsets.size()*2+tmp3.str().size()+2),tmp);
tmp.write(tmp3.str().c_str(), tmp3.str().size());
bool longcodes = data.shapes.size() > (64*1024);
if(longcodes)
{
for(std::vector<UWORD>::iterator i = data.codes.begin(); i != data.codes.end(); i++)
{
WRITE_UWORD2(*i,tmp);
}
}
else
{
for(std::vector<UWORD>::iterator i = data.codes.begin(); i != data.codes.end(); i++)
{
tmp.put((unsigned char)*i);
}
}
if(data.layout)
{
data.layout_data.Write(tmp);
}
out << FlashTagHeader(48,tmp.str().size()+4);
WRITE_UWORD(data.GetID());
out.put((char)((data.layout << 7) | (longoffsets << 3) | (longcodes << 2) | (data.flags)));
out.put(0);
out.write(tmp.str().c_str(), tmp.str().size());
return out;
}
std::istream &operator >> (std::istream &in, FlashTagDefineFont2 &data)
{
return in;
}
std::ostream &operator << (std::ostream &out, FlashTagDefineEditBox &data)
{
std::ostrstream tmp;
WRITE_UWORD2(data.GetID(), tmp);
tmp << data.mr;
tmp.put((unsigned char)(data.mflags >> 8));
tmp.put((unsigned char)(data.mflags & 0xff));
if(data.mflags & FTDEB_HASFONT)
{
WRITE_UWORD2(data.mfontID,tmp);
WRITE_UWORD2(data.mfontHeight,tmp);
}
if(data.mflags & FTDEB_HASTEXTCOLOR)
{
data.mcolor.SetAlphaWriteMode(true);
tmp << data.mcolor;
}
if(data.mflags & FTDEB_HASMAXLENGTH)
{
WRITE_UWORD2(data.mmaxLength, tmp);
}
if(data.mflags & FTDEB_HASLAYOUT)
{
tmp.put(data.malign);
WRITE_UWORD2(data.mleftmargin, tmp);
WRITE_UWORD2(data.mrightmargin, tmp);
WRITE_UWORD2(data.mindent, tmp);
WRITE_UWORD2(data.mleading, tmp);
}
tmp << data.mvariable;
tmp.put((char)0);
if(data.mflags & FTDEB_HASTEXT)
{
tmp << data.minitialtext;
tmp.put((char)0);
}
out << FlashTagHeader(37, tmp.pcount());
out.write(tmp.rdbuf()->str(),tmp.pcount());
return out;
}
std::istream &operator >> (std::istream &in, FlashTagDefineEditBox &data)
{
UWORD id;
READ_UWORD(id);
data.SetID(id);
in >> data.mr;
int c = in.get();
//if c == EOF throw
int c2 = in.get();
//if c2 == EOF throw
data.mflags = ((unsigned char)c);
data.mflags = (data.mflags << 8) | (c2 & 0xff);
if(data.mflags & FTDEB_HASFONT)
{
READ_UWORD(data.mfontID);
READ_UWORD(data.mfontHeight);
}
if(data.mflags & FTDEB_HASTEXTCOLOR)
{
data.mcolor.SetAlphaWriteMode(true);
in >> data.mcolor;
}
if(data.mflags & FTDEB_HASMAXLENGTH)
{
READ_UWORD(data.mmaxLength);
}
if(data.mflags & FTDEB_HASLAYOUT)
{
data.malign = in.get();
// if(data.malign == EOF) throw
READ_UWORD(data.mleftmargin);
READ_UWORD(data.mrightmargin);
READ_UWORD(data.mindent);
READ_UWORD(data.mleading);
}
{
std::vector<int> text;
for(;;)
{
int i = in.get();
//if(i == EOF) throw;
text.push_back(i);
if(i==0) break;
}
data.mvariable = (char *)malloc(text.size());
data.gc.push_back(data.mvariable);
{
for(unsigned int i = 0; i < text.size(); i++)
{
unsigned char *c = (unsigned char *)data.mvariable;
c[i] = text[i];
}
}
}
if(data.mflags & FTDEB_HASTEXT)
{
std::vector<int> text;
for(;;)
{
int i = in.get();
//if(i == EOF) throw;
text.push_back(i);
if(i==0) break;
}
data.minitialtext = (char *)malloc(text.size());
data.gc.push_back(data.minitialtext);
{
for(unsigned int i = 0; i < text.size(); i++)
{
unsigned char *c = (unsigned char *)data.minitialtext;
c[i] = text[i];
}
}
}
return in;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -