Beispiel #1
0
Gura_ImplementMethod(GlyphSlot, Get_Glyph)
{
	Signal &sig = env.GetSignal();
	FT_GlyphSlot glyphSlot = Object_GlyphSlot::GetObjectThis(arg)->GetEntity();
	std::unique_ptr<FT_Glyph> pGlyph(new FT_Glyph);
	FT_Error err = ::FT_Get_Glyph(glyphSlot, pGlyph.get());
	if (err != 0) {
		SetError_Freetype(sig, err);
		return Value::Nil;
	}
	return Value(new Object_Glyph(nullptr, pGlyph.release()));
}
Beispiel #2
0
Gura_ImplementMethod(GlyphSlot, Render)
{
	Signal &sig = env.GetSignal();
	FT_GlyphSlot glyphSlot = Object_GlyphSlot::GetObjectThis(arg)->GetEntity();
	FT_Render_Mode render_mode = static_cast<FT_Render_Mode>(arg.GetInt(0));
	FT_Error err = ::FT_Render_Glyph(glyphSlot, render_mode);
	if (err != 0) {
		SetError_Freetype(sig, err);
		return Value::Nil;
	}
	return arg.GetValueThis();
}
Beispiel #3
0
Gura_ImplementMethod(Glyph, Copy)
{
	Signal &sig = env.GetSignal();
	FT_Glyph *pGlyph = Object_Glyph::GetObjectThis(arg)->GetEntity();
	std::unique_ptr<FT_Glyph> pGlyphTgt(new FT_Glyph);
	FT_Error err = ::FT_Glyph_Copy(*pGlyph, pGlyphTgt.get());
	if (err != 0) {
		SetError_Freetype(sig, err);
		return Value::Nil;
	}
	return Value(new Object_Glyph(nullptr, pGlyphTgt.release()));
}
Beispiel #4
0
Gura_ImplementMethod(Glyph, Stroke)
{
	Signal &sig = env.GetSignal();
	FT_Glyph *pGlyph = Object_Glyph::GetObjectThis(arg)->GetEntity();
	FT_Stroker stroker = Object_Stroker::GetObject(arg, 0)->GetEntity();
	FT_Error err = ::FT_Glyph_Stroke(pGlyph, stroker, false);
	if (err != 0) {
		SetError_Freetype(sig, err);
		return Value::Nil;
	}
	return arg.GetValueThis();
}
Beispiel #5
0
Gura_ImplementMethod(Outline, Embolden)
{
	Signal &sig = env.GetSignal();
	FT_Outline *outline = Object_Outline::GetObjectThis(arg)->GetEntity();
	FT_Pos strength = static_cast<FT_Pos>(arg.GetDouble(0) * (1 << 6)); // 26.6
	FT_Error err = ::FT_Outline_Embolden(outline, strength);
	if (err != 0) {
		SetError_Freetype(sig, err);
		return Value::Nil;
	}
	return arg.GetValueThis();
}
Beispiel #6
0
bool Handler::OpenFace(Signal &sig, int index, FT_Face *aface)
{
	::memset(_pStreamRec, 0x00, sizeof(FT_StreamRec));
	_pStreamRec->descriptor.pointer = this;
	_pStreamRec->size = 0x7fffffffL;
	_pStreamRec->pos = 0;
	_pStreamRec->base = nullptr;
	_pStreamRec->read = ReadStub;
	_pStreamRec->close = nullptr;
	FT_Open_Args ftargs;
	::memset(&ftargs, 0x00, sizeof(ftargs));
	ftargs.flags = FT_OPEN_STREAM;
	ftargs.stream = _pStreamRec;
	FT_Error err = ::FT_Open_Face(g_lib, &ftargs, index, aface);
	if (err != 0) {
		SetError_Freetype(sig, err);
		return false;
	}
	return true;
}