⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ffont.cpp

📁 这是一个用VC++开发的flashsource端的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		{
			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 + -