MODULE = SFML		PACKAGE = SFML::Graphics::CircleShape

CircleShape*
CircleShape::new(...)
	CODE:
		RETVAL = new CircleShape();
		ARG_P_BEGIN
			ARG_P_OPTION("radius")
				RETVAL->setRadius(SvNV(ARG_P));
			ARG_P_OPTION_END
			ARG_P_OPTION("pointCount")
				RETVAL->setPointCount(SvIV(ARG_P));
			ARG_P_OPTION_END
		ARG_P_END
	OUTPUT:
		RETVAL

CircleShape*
CircleShape::DESTROY()

void
CircleShape::setRadius(radius)
	float radius

float
CircleShape::getRadius()

void
CircleShape::setPointCount(count)
	unsigned int count

unsigned int
CircleShape::getPointCount()

void
CircleShape::getPoint(index)
	unsigned int index
	CODE:
		Vector2f v = THIS->getPoint(index);
		EXTEND(SP,1);
		XPUSHs(sv_2mortal(newSVnv(v.x)));
		XPUSHs(sv_2mortal(newSVnv(v.y)));

void
CircleShape::setTexture(texture, ...)
	Texture* texture
	CODE:
		if(items >1)
			THIS->setTexture(texture, SvTRUE(ST(2)));
		else
			THIS->setTexture(texture);

void
CircleShape::setTextureRect(left, top, width, height)
	int left
	int top
	int width
	int height
	CODE:
		THIS->setTextureRect(IntRect(left,top,width,height));

void
CircleShape::setFillColor(color)
	Color* color
	CODE:
		THIS->setFillColor(*color);

void
CircleShape::setOutlineColor(color)
	Color* color
	CODE:
		THIS->setOutlineColor(*color);

void
CircleShape::setOutlineThickness(thickness)
	float thickness

void
CircleShape::getTextureRect()
	CODE:
		EXTEND(SP,4);
		IntRect r = THIS->getTextureRect();
		XPUSHs(sv_2mortal(newSViv(r.top)));
		XPUSHs(sv_2mortal(newSViv(r.left)));
		XPUSHs(sv_2mortal(newSViv(r.width)));
		XPUSHs(sv_2mortal(newSViv(r.height)));

Color*
CircleShape::getFillColor()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->getFillColor());
	OUTPUT:
		RETVAL

Color*
CircleShape::getOutlineColor()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->getOutlineColor());
	OUTPUT:
		RETVAL

float
CircleShape::getOutlineThickness()

void
CircleShape::getLocalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getLocalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
CircleShape::getGlobalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getGlobalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
CircleShape::setPosition(x,y)
	float x
	float y

void
CircleShape::setRotation(angle)
	float angle

void
CircleShape::setScale(factorX, factorY)
	float factorX
	float factorY

void
CircleShape::setOrigin(x,y)
	float x
	float y

void
CircleShape::getPosition()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getPosition();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

float
CircleShape::getRotation()

void
CircleShape::getScale()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getScale();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
CircleShape::getOrigin()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getOrigin();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
CircleShape::move(offsetX, offsetY)
	float offsetX
	float offsetY

void
CircleShape::rotate(angle)
	float angle

void
CircleShape::scale(factorX, factorY)
	float factorX
	float factorY

Transform*
CircleShape::getTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getTransform());
	OUTPUT:
		RETVAL

Transform*
CircleShape::getInverseTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getInverseTransform());
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::Color

Color*
Color::new(...)
	CODE:
		if(items == 5)
			RETVAL = new Color(SvUV(ST(1)), SvUV(ST(2)), SvUV(ST(3)), SvUV(ST(4)));
		else if(items == 4)
			RETVAL = new Color(SvUV(ST(1)), SvUV(ST(2)), SvUV(ST(3)));
		else if(items == 1)
			RETVAL = new Color();
		else {
			croak_xs_usage(cv,  "THIS, red=0, green=0, blue=0, alpha=255");
			XSRETURN_UNDEF;
		}
	OUTPUT:
		RETVAL

void
Color::DESTROY()

unsigned int
Color::getA()
	CODE:
		RETVAL = THIS->a;
	OUTPUT:
		RETVAL

unsigned int
Color::getR()
	CODE:
		RETVAL = THIS->r;
	OUTPUT:
		RETVAL

unsigned int
Color::getG()
	CODE:
		RETVAL = THIS->g;
	OUTPUT:
		RETVAL

unsigned int
Color::getB()
	CODE:
		RETVAL = THIS->b;
	OUTPUT:
		RETVAL

unsigned int
Color::getRGBA()
	CODE:
		RETVAL = THIS->a & (THIS->b << 8) & (THIS->g << 16) & (THIS->b << 24);
	OUTPUT:
		RETVAL

void
Color::setA(a)
	unsigned int a
	CODE:
		THIS->a = a;

void
Color::setR(r)
	unsigned int r
	CODE:
		THIS->r = r;

void
Color::setG(g)
	unsigned int g
	CODE:
		THIS->g = g;

void
Color::setB(b)
	unsigned int b
	CODE:
		THIS->b = b;

void
Color::setRGBA(rgba)
	unsigned int rgba
	CODE:
		THIS->a = rgba & 0x000000FF >> 0;
		THIS->b = rgba & 0x0000FF00 >> 8;
		THIS->g = rgba & 0x00FF0000 >> 16;
		THIS->r = rgba & 0xFF000000 >> 24;

bool
color_eq(left, right, swap)
	Color* left
	Color* right
	bool swap
	OVERLOAD: ==
	CODE:
		RETVAL = (*left) == (*right);
	OUTPUT:
		RETVAL

bool
color_ne(left, right, swap)
	Color* left
	Color* right
	bool swap
	OVERLOAD: !=
	CODE:
		RETVAL = (*left) != (*right);
	OUTPUT:
		RETVAL

Color*
color_pl(left, right, swap)
	Color* left
	Color* right
	bool swap
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	OVERLOAD: +
	CODE:
		RETVAL = new Color((*left) + (*right));
	OUTPUT:
		RETVAL

Color*
color_ti(left, right, swap)
	Color* left
	Color* right
	bool swap
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	OVERLOAD: *
	CODE:
		RETVAL = new Color((*right) * (*left));
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::ConvexShape

ConvexShape*
ConvexShape::new(...)
	CODE:
		if(items == 1)
			RETVAL = new ConvexShape();
		else if(items == 2)
			RETVAL = new ConvexShape(SvUV(ST(1)));
		else
			croak_xs_usage(cv,  "THIS, pointCount=0");
	OUTPUT:
		RETVAL

void
ConvexShape::DESTROY()

void
ConvexShape::setPointCount(count)
	unsigned int count

unsigned int
ConvexShape::getPointCount()

void
ConvexShape::setPoint(index, x, y)
	unsigned int index
	float x
	float y
	CODE:
		THIS->setPoint(index, Vector2f(x,y));

void
ConvexShape::getPoint(index)
	unsigned int index
	CODE:
		EXTEND(SP,2);
		Vector2f v = THIS->getPoint(index);
		XPUSHs(sv_2mortal(newSVnv(v.x)));
		XPUSHs(sv_2mortal(newSVnv(v.y)));

void
ConvexShape::setTexture(texture, ...)
	Texture* texture
	CODE:
		if(items == 1)
			THIS->setTexture(texture);
		else if(items == 2)
			THIS->setTexture(texture, SvTRUE(ST(2)));
		else
			croak_xs_usage(cv, "THIS, texture, resetRect=true");

void
ConvexShape::setTextureRect(x,y,width,height)
	int x
	int y
	int width
	int height
	CODE:
		THIS->setTextureRect(IntRect(x,y,width,height));

void
ConvexShape::setFillColor(color)
	Color* color
	CODE:
		THIS->setFillColor(*color);

void
ConvexShape::setOutlineColor(color)
	Color* color
	CODE:
		THIS->setFillColor(*color);

void
ConvexShape::setOutlineThickness(thickness)
	float thickness

void
ConvexShape::getTextureRect()
	CODE:
		EXTEND(SP,4);
		IntRect r = THIS->getTextureRect();
		XPUSHs(sv_2mortal(newSViv(r.top)));
		XPUSHs(sv_2mortal(newSViv(r.left)));
		XPUSHs(sv_2mortal(newSViv(r.width)));
		XPUSHs(sv_2mortal(newSViv(r.height)));

Color*
ConvexShape::getFillColor()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->getFillColor());
	OUTPUT:
		RETVAL

Color*
ConvexShape::getOutlineColor()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->getFillColor());
	OUTPUT:
		RETVAL

float
ConvexShape::getOutlineThickness()

void
ConvexShape::getLocalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getLocalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
ConvexShape::getGlobalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getGlobalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
ConvexShape::setPosition(x,y)
	float x
	float y

void
ConvexShape::setRotation(angle)
	float angle

void
ConvexShape::setScale(factorX, factorY)
	float factorX
	float factorY

void
ConvexShape::setOrigin(x,y)
	float x
	float y

void
ConvexShape::getPosition()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getPosition();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

float
ConvexShape::getRotation()

void
CircleShape::getScale()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getScale();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
ConvexShape::getOrigin()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getOrigin();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
ConvexShape::move(offsetX, offsetY)
	float offsetX
	float offsetY

void
ConvexShape::rotate(angle)
	float angle

void
ConvexShape::scale(factorX, factorY)
	float factorX
	float factorY

Transform*
ConvexShape::getTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getTransform());
	OUTPUT:
		RETVAL

Transform*
ConvexShape::getInverseTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getInverseTransform());
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::Font

Font*
Font::new(...)
	CODE:
		SV* pv = SvRV(ST(1));
		if(items == 2){
			if(sv_isobject(ST(1)) && SvTYPE(pv) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Font"))
				RETVAL = new Font(*((Font*)SvIV(pv)));
			else {
				warn( "SFML::Graphics::Font::new() -- Argument is not a blessed SV reference" );
				XSRETURN_UNDEF;
			}
		} else if (items == 1)
			RETVAL = new Font();
		else
			croak_xs_usage(cv, "CLASS, [copy]");
	OUTPUT:
		RETVAL

Font*
Font::DESTROY()

bool
Font::loadFromFile(filename)
	char * filename
	CODE:
		RETVAL = THIS->loadFromFile(std::string(filename));
	OUTPUT:
		RETVAL

bool
Font::loadFromMemory(data)
	SV* data
	CODE:
		STRLEN len;
		void * dt = SvPV(data, len);
		RETVAL = THIS->loadFromMemory(dt, len);
	OUTPUT:
		RETVAL

Glyph*
Font::getGlyph(codePoint, characterSize, bold)
	unsigned int codePoint
	unsigned int characterSize
	bool bold
	PREINIT:
		const char * CLASS = "SFML::Graphics::Glyph";
	CODE:
		RETVAL = new Glyph(THIS->getGlyph(codePoint, characterSize, bold));
	OUTPUT:
		RETVAL

int
Font::getKerning(first, second, characterSize);
	unsigned int first
	unsigned int second
	unsigned int characterSize

int
Font::getLineSpacing(characterSize)
	unsigned int characterSize

Texture*
Font::getTexture(characterSize)
	unsigned int characterSize
	PREINIT:
		const char * CLASS = "SFML::Graphics::Texture";
	CODE:
		RETVAL = (Texture*)(void*)&THIS->getTexture(characterSize);
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::Glyph

Glyph*
Glyph::new()

void
Glyph::DESTROY()

int
Glyph::getAdvance()
	CODE:
		RETVAL = THIS->advance;
	OUTPUT:
		RETVAL

void
Glyph::setAdvance(advance)
	int advance
	CODE:
		THIS->advance = advance;

void
Glyph::getBounds()
	CODE:
		EXTEND(SP,4);
		XPUSHs(sv_2mortal(newSViv(THIS->bounds.top)));
		XPUSHs(sv_2mortal(newSViv(THIS->bounds.left)));
		XPUSHs(sv_2mortal(newSViv(THIS->bounds.width)));
		XPUSHs(sv_2mortal(newSViv(THIS->bounds.height)));

void
Glyph::getTextureRect()
	CODE:
		EXTEND(SP,4);
		XPUSHs(sv_2mortal(newSViv(THIS->textureRect.top)));
		XPUSHs(sv_2mortal(newSViv(THIS->textureRect.left)));
		XPUSHs(sv_2mortal(newSViv(THIS->textureRect.width)));
		XPUSHs(sv_2mortal(newSViv(THIS->textureRect.height)));

void
Glyph::setBounds(top, left, width, height)
	int top
	int left
	int width
	int height
	CODE:
		THIS->bounds.top = top;
		THIS->bounds.left = left;
		THIS->bounds.width = width;
		THIS->bounds.height = height;

void
Glyph::setTextureRect(top, left, width, height)
	int top
	int left
	int width
	int height
	CODE:
		THIS->bounds.top = top;
		THIS->bounds.left = left;
		THIS->bounds.width = width;
		THIS->bounds.height = height;

MODULE = SFML		PACKAGE = SFML::Graphics::Image

Image*
Image::new(...)
	CODE:
		SV* pv = SvRV(ST(1));
		if(items == 2){
			if(sv_isobject(ST(1)) && SvTYPE(pv) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Image"))
				RETVAL = new Image(*((Image*)SvIV(pv)));
			else {
				warn( "SFML::Graphics::Image::new() -- Argument is not a blessed SV reference" );
				XSRETURN_UNDEF;
			}
		} else if (items == 1)
			RETVAL = new Image();
		else
			croak_xs_usage(cv, "CLASS, [copy]");
	OUTPUT:
		RETVAL

void
Image::DESTROY()

void
Image::create(width, height, ...)
	unsigned int width
	unsigned int height
	CODE:
		if(items == 4 && sv_isobject(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVMG && sv_isa(ST(3), "SFML::Graphics::Color"))
			THIS->create(width, height, *((Color*) SvIV(SvRV(ST(3)))));
		else if(items == 4){
			SV* pv = SvRV(ST(3));
			if(SvPOK(pv))
				THIS->create(width, height, (Uint8*) SvPV_nolen(pv));
			else
				THIS->create(width, height, (Uint8*) SvIV(pv));
		} else if(items == 3)
			THIS->create(width, height);
		else
			croak_xs_usage(cv, "THIS, width, height, (pixels | color)");

bool
Image::loadFromFile(filename)
	char * filename
	CODE:
		RETVAL = THIS->loadFromFile(std::string(filename));
	OUTPUT:
		RETVAL

bool
Image::loadFromMemory(data, size)
	void * data
	unsigned int size

bool
Image::saveToFile(filename)
	char * filename
	CODE:
		RETVAL = THIS->saveToFile(std::string(filename));
	OUTPUT:
		RETVAL

void
Image::getSize()
	CODE:
		EXTEND(SP,2);
		Vector2u r = THIS->getSize();
		XPUSHs(sv_2mortal(newSVuv(r.x)));
		XPUSHs(sv_2mortal(newSVuv(r.y)));

void
Image::createMaskFromColor(color, ...)
	Color* color
	CODE:
		if(items == 3)
			THIS->createMaskFromColor(*color, SvUV(ST(2)));
		else if (items == 2)
			THIS->createMaskFromColor(*color);
		else
			croak_xs_usage(cv, "THIS, color, alpha=0");

void
Image::copy(source, destX, destY, ...)
	Image* source
	unsigned int destX
	unsigned int destY
	CODE:
		if(items == 4)
			THIS->copy(*source, destX, destY);
		else if(items == 8)
			THIS->copy(*source, destX, destY, IntRect(SvIV(ST(4)), SvIV(ST(5)), SvIV(ST(6)), SvIV(ST(6))));
		else if(items == 9)
			THIS->copy(*source, destX, destY, IntRect(SvIV(ST(4)), SvIV(ST(5)), SvIV(ST(6)), SvIV(ST(6))), SvTRUE(ST(7)));
		else
			croak_xs_usage(cv, "THIS, source, destX, destY, sourceRect(top, left, width, height), applyAlpha");

void
Image::setPixel(x, y, color)
	unsigned int x
	unsigned int y
	Color* color
	CODE:
		THIS->setPixel(x,y,*color);

Color*
Image::getPixel(x,y)
	unsigned int x
	unsigned int y
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->getPixel(x,y));
	OUTPUT:
		RETVAL

void*
Image::getPixelsPtr()
	CODE:
		RETVAL = (void*) THIS->getPixelsPtr();
	OUTPUT:
		RETVAL

void
Image::flipHorizontally()

void
Image::flipVertically()

MODULE = SFML		PACKAGE = SFML::Graphics::RectangleShape

RectangleShape*
RectangleShape::new(...)
	CODE:
		if(items == 3)
			RETVAL = new RectangleShape(Vector2f(SvNV(ST(1)), SvNV(ST(2))));
		else if(items == 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::RectangleShape"))
			RETVAL = new RectangleShape(*((RectangleShape*)SvIV(SvRV(ST(1)))));
		else
			croak_xs_usage(cv, "THIS, ( copy | size(x,y) )");
	OUTPUT:
		RETVAL

void
RectangleShape::DESTROY()

unsigned int
RectangleShape::getPointCount()

void
RectangleShape::getPoint(index)
	unsigned int index
	CODE:
		Vector2f v = THIS->getPoint(index);
		EXTEND(SP,1);
		XPUSHs(sv_2mortal(newSVnv(v.x)));
		XPUSHs(sv_2mortal(newSVnv(v.y)));

void
RectangleShape::getSize()
	CODE:
		Vector2f v = THIS->getSize();
		EXTEND(SP,1);
		XPUSHs(sv_2mortal(newSVnv(v.x)));
		XPUSHs(sv_2mortal(newSVnv(v.y)));

void
RectangleShape::setSize(x,y)
	float x
	float y
	CODE:
		THIS->setSize(Vector2f(x,y));

void
RectangleShape::setTexture(texture, ...)
	Texture* texture
	CODE:
		if(items >1)
			THIS->setTexture(texture, SvTRUE(ST(2)));
		else
			THIS->setTexture(texture);

void
RectangleShape::setTextureRect(left, top, width, height)
	int left
	int top
	int width
	int height
	CODE:
		THIS->setTextureRect(IntRect(left,top,width,height));

void
RectangleShape::setFillColor(color)
	Color* color
	CODE:
		THIS->setFillColor(*color);

void
RectangleShape::setOutlineColor(color)
	Color* color
	CODE:
		THIS->setOutlineColor(*color);

void
RectangleShape::setOutlineThickness(thickness)
	float thickness

void
RectangleShape::getTextureRect()
	CODE:
		EXTEND(SP,4);
		IntRect r = THIS->getTextureRect();
		XPUSHs(sv_2mortal(newSViv(r.top)));
		XPUSHs(sv_2mortal(newSViv(r.left)));
		XPUSHs(sv_2mortal(newSViv(r.width)));
		XPUSHs(sv_2mortal(newSViv(r.height)));

Color*
RectangleShape::getFillColor()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->getFillColor());
	OUTPUT:
		RETVAL

Color*
RectangleShape::getOutlineColor()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->getOutlineColor());
	OUTPUT:
		RETVAL

float
RectangleShape::getOutlineThickness()

void
RectangleShape::getLocalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getLocalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
RectangleShape::getGlobalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getGlobalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
RectangleShape::setPosition(x,y)
	float x
	float y

void
RectangleShape::setRotation(angle)
	float angle

void
RectangleShape::setScale(factorX, factorY)
	float factorX
	float factorY

void
RectangleShape::setOrigin(x,y)
	float x
	float y

void
RectangleShape::getPosition()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getPosition();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

float
RectangleShape::getRotation()

void
RectangleShape::getScale()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getScale();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
RectangleShape::getOrigin()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getOrigin();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
RectangleShape::move(offsetX, offsetY)
	float offsetX
	float offsetY

void
RectangleShape::rotate(angle)
	float angle

void
RectangleShape::scale(factorX, factorY)
	float factorX
	float factorY

Transform*
RectangleShape::getTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getTransform());
	OUTPUT:
		RETVAL

Transform*
RectangleShape::getInverseTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getInverseTransform());
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::RenderStates

RenderStates*
RenderStates::new(...)
	CODE:
		bool error = false;
		if(items == 1)
			RETVAL = new RenderStates();
		else if(items == 2 ){
			if(sv_isobject(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVMG){
				SV* s = SvRV(ST(1));
				if(sv_isa(s, "SFML::Graphics::RenderStates"))
					RETVAL = new RenderStates(*((RenderStates*)SvIV(s)));
				else if(sv_isa(ST(1), "SFML::Graphics::Transform"))
					RETVAL = new RenderStates(*((Transform*)SvIV(s)));
				else if(sv_isa(ST(1), "SFML::Graphics::Texture"))
					RETVAL = new RenderStates((Texture*)SvIV(s));
				else if(sv_isa(ST(1), "SFML::Graphics::Shader"))
					RETVAL = new RenderStates((Shader*)SvIV(s));
				else
					error = true;
			} else
				RETVAL = new RenderStates((BlendMode)SvIV(ST(1)));
		} else if(items == 5) {
			for(int i = 2; i < 5; i++){
				error = (!(sv_isobject(ST(i)) && SvTYPE(SvRV(ST(i))) == SVt_PVMG)) | error;
			}
			if(!error &&
				sv_isa(ST(2), "SFML::Graphics::Transform") &&
				sv_isa(ST(3), "SFML::Graphics::Texture") &&
				sv_isa(ST(4), "SFML::Graphics::Shader"))
				RETVAL = new RenderStates((BlendMode)SvIV(ST(4)),
					*((Transform*)SvIV(SvRV(ST(4)))),
					(Texture*)SvIV(SvRV(ST(4))),
					(Shader*)SvIV(SvRV(ST(4))));
		}
		if(error){
			croak_xs_usage(cv, "THIS, (theBlendMode | theTransform | theTexture | "
				"theShader | theBlendMode, theTransform, theTexture, theShader");
			XSRETURN_UNDEF;
		}
	OUTPUT:
		RETVAL

void
RenderStates::DESTROY();

int
RenderStates::getBlendMode()
	CODE:
		RETVAL = THIS->blendMode;
	OUTPUT:
		RETVAL

Transform*
RenderStates::getTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = &THIS->transform;
	OUTPUT:
		RETVAL

Texture*
RenderStates::getTexture()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Texture";
	CODE:
		RETVAL = (Texture *) (void *) THIS->texture;
	OUTPUT:
		RETVAL

Shader*
RenderStates::getShader()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Shader";
	CODE:
		RETVAL = (Shader *) (void *) THIS->shader;
	OUTPUT:
		RETVAL

void
RenderStates::setBlendMode(blendMode)
	int blendMode
	CODE:
		THIS->blendMode = (BlendMode)blendMode;

void
RenderStates::setTransform(transform)
	Transform* transform
	CODE:
		THIS->transform = *transform;

void
RenderStates::setTexture(texture)
	Texture* texture
	CODE:
		THIS->texture = texture;

void
RenderStates::setShader(shader)
	Shader* shader
	CODE:
		THIS->shader = shader;

MODULE = SFML		PACKAGE = SFML::Graphics::RenderTexture

RenderTexture*
RenderTexture::new()

void
RenderTexture::DESTROY()

bool
RenderTexture::create(width, height, ...)
	unsigned int width
	unsigned int height
	CODE:
		if(items == 3)
			RETVAL = THIS->create(width, height);
		else if(items == 4)
			RETVAL = THIS->create(width, height, SvTRUE(ST(3)));
		else
			croak_xs_usage(cv, "THIS, width, height, depthBuffer=false");
	OUTPUT:
		RETVAL

void
RenderTexture::setSmooth(smooth)
	bool smooth

bool
RenderTexture::isSmooth()

bool
RenderTexture::setActive(...)
	CODE:
		if(items == 2)
			RETVAL = THIS->setActive(SvTRUE(ST(1)));
		else if(items == 1)
			RETVAL = THIS->setActive();
		else
			croak_xs_usage(cv, "THIS, active=true");
	OUTPUT:
		RETVAL

void
RenderTexture::display()

void
RenderTexture::getSize()
	CODE:
		EXTEND(SP,2);
		Vector2u r = THIS->getSize();
		XPUSHs(sv_2mortal(newSVuv(r.x)));
		XPUSHs(sv_2mortal(newSVuv(r.y)));

Texture*
RenderTexture::getTexture()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Texture";
	CODE:
		RETVAL = (Texture*)(void*)&THIS->getTexture();
	OUTPUT:
		RETVAL

void
RenderTexture::clear(...)
	CODE:
		if(items == 2 && sv_isobject(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Color"))
			THIS->setActive(SvTRUE(ST(1)));
		else if(items == 1)
			THIS->setActive();
		else
			croak_xs_usage(cv, "THIS, color=black");

void
RenderTexture::setView(view)
	View* view
	CODE:
		THIS->setView(*view);

View*
RenderTexture::getView()
	PREINIT:
		const char * CLASS = "SFML::Graphics::View";
	CODE:
		RETVAL = (View*)(void*)&THIS->getView();
	OUTPUT:
		RETVAL

View*
RenderTexture::getDefaultView()
	PREINIT:
		const char * CLASS = "SFML::Graphics::View";
	CODE:
		RETVAL = (View*)(void*)&THIS->getDefaultView();
	OUTPUT:
		RETVAL

void
RenderTexture::getViewport(view)
	View* view;
	CODE:
		EXTEND(SP,4);
		IntRect r = THIS->getViewport(*view);
		XPUSHs(sv_2mortal(newSViv(r.top)));
		XPUSHs(sv_2mortal(newSViv(r.left)));
		XPUSHs(sv_2mortal(newSViv(r.width)));
		XPUSHs(sv_2mortal(newSViv(r.height)));

void
RenderTexture::mapPixelToCoords(x, y, ...)
	int x
	int y
	CODE:
		Vector2f r;
		if(items == 2 && sv_isobject(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Color"))
			r = THIS->mapPixelToCoords(Vector2i(x,y), *((View*)SvIV(SvRV(ST(1)))));
		else if(items == 1)
			r = THIS->mapPixelToCoords(Vector2i(x,y));
		else
			croak_xs_usage(cv, "THIS, x, y, [view]");
		EXTEND(SP,2);
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
RenderTexture::mapCoordsToPixel(x, y, ...)
	float x
	float y
	CODE:
		Vector2i r;
		if(items == 2 && sv_isobject(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Color"))
			r = THIS->mapCoordsToPixel(Vector2f(x,y), *((View*)SvIV(SvRV(ST(1)))));
		else if(items == 1)
			r = THIS->mapCoordsToPixel(Vector2f(x,y));
		else
			croak_xs_usage(cv, "THIS, x, y, [view]");
		EXTEND(SP,2);
		XPUSHs(sv_2mortal(newSViv(r.x)));
		XPUSHs(sv_2mortal(newSViv(r.y)));

void
RenderTexture::draw(...)
	CODE:
		if((items == 3 || items == 2) &&
			sv_isobject(ST(1)) &&
			SvTYPE(SvRV(ST(1))) == SVt_PVMG){ // First option
			if(items == 3 && sv_isobject(ST(2)) && SvTYPE(SvRV(ST(2))) == SVt_PVMG && sv_isa(SvRV(ST(2)), "SFML::Graphics::RenderStates"))
				THIS->draw(*((Drawable*)SvIV(SvRV(ST(1)))), *((RenderStates*)SvIV(SvRV(ST(2)))));
			else
				THIS->draw(*((Drawable*)SvIV(SvRV(ST(1)))));
		} else if((items == 4 || items == 3) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { // Second option
			AV* a = (AV*) SvRV(ST(1));
			unsigned int len = av_len(a);
			Vertex* vdata = (Vertex*) malloc(sizeof(Vertex)*len);
			for(int i=0; i < len; i++){
				vdata[i] = *((Vertex*)SvIV(SvRV(av_pop(a))));
			}
			if(items == 4 && sv_isobject(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVMG && sv_isa(SvRV(ST(3)), "SFML::Graphics::RenderStates"))
				THIS->draw(vdata, len, (PrimitiveType) SvIV(ST(2)),*((RenderStates*)SvIV(SvRV(ST(3)))));
			else
				THIS->draw(vdata, len, (PrimitiveType) SvIV(ST(2)));
		} else
			croak_xs_usage(cv, "THIS, (drawable, renderStates=default | vertices, type, renderStates=default)");

void
RenderTexture::pushGLStates()

void
RenderTexture::popGLStates()

void
RenderTexture::resetGLStates()

void
RenderTexture::setRepeated(repeated)
	bool repeated

bool
RenderTexture::isRepeated()

MODULE = SFML		PACKAGE = SFML::Graphics::RenderWindow

RenderWindow*
RenderWindow::new(...)
	CODE:
		RETVAL = 0;
		if (items == 1){
			RETVAL = new RenderWindow();
		} else if (items > 1 && sv_isobject(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Window::VideoMode")){
			char * title = SvPV_nolen(ST(2));
			VideoMode* mode = (VideoMode*)SvIV(SvRV(ST(1)));
			if (items == 4){
				RETVAL = new RenderWindow(*mode, std::string(title), SvIV(ST(3)));
			} else if(items == 5 &&
				sv_isobject(ST(4)) &&
				SvTYPE(SvRV(ST(4))) == SVt_PVMG &&
				sv_isa(ST(4), "SFML::Window::ContextSettings")){
				RETVAL = new RenderWindow(*mode, std::string(title), SvIV(ST(3)), *((ContextSettings*) SvIV(SvRV(ST(4)))));
			} else if(items == 3){
				RETVAL = new RenderWindow(*mode, std::string(title));
			}
		}
		if(RETVAL == 0)
			croak_xs_usage(cv, "THIS, mode, title, style=SFML::Window::Style::Default, contextSettings=default");
	OUTPUT:
		RETVAL

void
RenderWindow::DESTROY()

void
RenderWindow::create(mode, title, ...)
	VideoMode* mode
	char * title
	CODE:
		bool error = true;
		if (items == 4){
			error = false;
			THIS->create(*mode, std::string(title), SvIV(ST(3)));
		} else if(items == 5 &&
			sv_isobject(ST(4)) &&
			SvTYPE(SvRV(ST(4))) == SVt_PVMG &&
			sv_isa(ST(4), "SFML::Window::ContextSettings")){
			error = false;
			THIS->create(*mode, std::string(title), SvIV(ST(3)), *((ContextSettings*) SvIV(SvRV(ST(4)))));
		} else if(items == 3){
			error = false;
			THIS->create(*mode, std::string(title));
		}
		if(error)
			croak_xs_usage(cv, "CLASS, mode, title, style=SFML::Window::Style::Default, contextSettings=default");

void
RenderWindow::close()

bool
RenderWindow::isOpen()

ContextSettings*
RenderWindow::getSettings()
	PREINIT:
		const char * CLASS = "SFML::Window::ContextSettings";
	CODE:
		RETVAL = new ContextSettings(THIS->getSettings());
	OUTPUT:
		RETVAL

void
RenderWindow::getPosition()
	PREINIT:
		Vector2i v;
	PPCODE:
		v = THIS->getPosition();
		EXTEND(SP, 2);
		PUSHs(sv_2mortal(newSViv(v.x)));
		PUSHs(sv_2mortal(newSViv(v.y)));

void
RenderWindow::setPosition(x,y)
	int x
	int y
	CODE:
		THIS->setPosition(Vector2i(x,y));

void
RenderWindow::getSize()
	PREINIT:
	Vector2u v;
	PPCODE:
		v = THIS->getSize();
		//fprintf(stderr, "Size to %u, %u\n", v.x, v.y); 
		EXTEND(SP, 2);
		PUSHs(sv_2mortal(newSVuv(v.x)));
		PUSHs(sv_2mortal(newSVuv(v.y)));

void
RenderWindow::setSize(x,y)
	unsigned int x
	unsigned int y
	CODE:
		THIS->setSize(Vector2u(x,y));

void
RenderWindow::setTitle(title)
	char * title
	CODE:
		THIS->setTitle(std::string(title));

void
RenderWindow::setVisible(...)
	CODE:
		if(items >= 1)
			THIS->setVisible(SvTRUE(ST(1)));
		else
			THIS->setVisible(true);

void
RenderWindow::setVerticalSyncEnabled(...)
	CODE:
		if(items >= 1)
			THIS->setVerticalSyncEnabled(SvTRUE(ST(1)));
		else
			THIS->setVerticalSyncEnabled(true);

void
RenderWindow::setMouseCursorVisible(...)
	CODE:
		if(items >= 1)
			THIS->setMouseCursorVisible(SvTRUE(ST(1)));
		else
			THIS->setMouseCursorVisible(true);

void
RenderWindow::setKeyRepeatEnabled(...)
	CODE:
		if(items >= 1)
			THIS->setKeyRepeatEnabled(SvTRUE(ST(1)));
		else
			THIS->setKeyRepeatEnabled(true);

void
RenderWindow::setFramerateLimit(limit)
	unsigned int limit

void
RenderWindow::setJoystickThreshold(threshold)
	float threshold

void
RenderWindow::setIcon(x,y,pixels)
	unsigned int x
	unsigned int y
	void * pixels
	CODE:
		THIS->setIcon(x,y,(Uint8*)pixels);

bool
RenderWindow::pollEvent(event)
	Event* event
	PREINIT:
		const char * CLASS = "SFML::Window::Event";
	CODE:
		RETVAL = THIS->pollEvent(*event);
	OUTPUT:
		RETVAL

bool
RenderWindow::waitEvent(event)
	Event* event
	PREINIT:
		const char * CLASS = "SFML::Window::Event";
	CODE:
		RETVAL = THIS->waitEvent(*event);
	OUTPUT:
		RETVAL

bool
RenderWindow::setActive(...)
	CODE:
		if(items == 2)
			RETVAL = THIS->setActive(SvTRUE(ST(1)));
		else if(items == 1)
			RETVAL = THIS->setActive();
		else
			croak_xs_usage(cv, "THIS, active=true");
	OUTPUT:
		RETVAL

void
RenderWindow::display()

void
RenderWindow::clear(...)
	CODE:
		if(items == 2 && sv_isobject(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Color"))
			THIS->setActive(SvTRUE(ST(1)));
		else if(items == 1)
			THIS->setActive();
		else
			croak_xs_usage(cv, "THIS, color=black");

void
RenderWindow::setView(view)
	View* view
	CODE:
		THIS->setView(*view);

View*
RenderWindow::getView()
	PREINIT:
		const char * CLASS = "SFML::Graphics::View";
	CODE:
		RETVAL = (View*)(void*)&THIS->getView();
	OUTPUT:
		RETVAL

View*
RenderWindow::getDefaultView()
	PREINIT:
		const char * CLASS = "SFML::Graphics::View";
	CODE:
		RETVAL = (View*)(void*)&THIS->getDefaultView();
	OUTPUT:
		RETVAL

void
RenderWindow::getViewport(view)
	View* view;
	CODE:
		EXTEND(SP,4);
		IntRect r = THIS->getViewport(*view);
		XPUSHs(sv_2mortal(newSViv(r.top)));
		XPUSHs(sv_2mortal(newSViv(r.left)));
		XPUSHs(sv_2mortal(newSViv(r.width)));
		XPUSHs(sv_2mortal(newSViv(r.height)));

void
RenderWindow::mapPixelToCoords(x, y, ...)
	int x
	int y
	CODE:
		Vector2f r;
		if(items == 2 && sv_isobject(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Color"))
			r = THIS->mapPixelToCoords(Vector2i(x,y), *((View*)SvIV(SvRV(ST(1)))));
		else if(items == 1)
			r = THIS->mapPixelToCoords(Vector2i(x,y));
		else
			croak_xs_usage(cv, "THIS, x, y, [view]");
		EXTEND(SP,2);
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
RenderWindow::mapCoordsToPixel(x, y, ...)
	float x
	float y
	CODE:
		Vector2i r;
		if(items == 2 && sv_isobject(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Color"))
			r = THIS->mapCoordsToPixel(Vector2f(x,y), *((View*)SvIV(SvRV(ST(1)))));
		else if(items == 1)
			r = THIS->mapCoordsToPixel(Vector2f(x,y));
		else
			croak_xs_usage(cv, "THIS, x, y, [view]");
		EXTEND(SP,2);
		XPUSHs(sv_2mortal(newSViv(r.x)));
		XPUSHs(sv_2mortal(newSViv(r.y)));

void
RenderWindow::draw(...)
	CODE:
		if((items == 3 || items == 2) &&
			sv_isobject(ST(1)) &&
			SvTYPE(SvRV(ST(1))) == SVt_PVMG){ // First option
			if(items == 3 && sv_isobject(ST(2)) && SvTYPE(SvRV(ST(2))) == SVt_PVMG && sv_isa(ST(2), "SFML::Graphics::RenderStates"))
				THIS->draw(*((Drawable*)SvIV(SvRV(ST(1)))), *((RenderStates*)SvIV(SvRV(ST(2)))));
			else
				THIS->draw(*((Drawable*)SvIV(SvRV(ST(1)))));
		} else if((items == 4 || items == 3) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { // Second option
			AV* a = (AV*) SvRV(ST(1));
			unsigned int len = av_len(a);
			Vertex* vdata = (Vertex*) malloc(sizeof(Vertex)*len);
			for(int i=0; i < len; i++){
				vdata[i] = *((Vertex*)SvIV(SvRV(av_pop(a))));
			}
			if(items == 4 && sv_isobject(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVMG && sv_isa(ST(3), "SFML::Graphics::RenderStates"))
				THIS->draw(vdata, len, (PrimitiveType) SvIV(ST(2)),*((RenderStates*)SvIV(SvRV(ST(3)))));
			else
				THIS->draw(vdata, len, (PrimitiveType) SvIV(ST(2)));
		} else
			croak_xs_usage(cv, "THIS, (drawable, renderStates=default | vertices, type, renderStates=default)");

void
RenderWindow::pushGLStates()

void
RenderWindow::popGLStates()

void
RenderWindow::resetGLStates()

Image*
RenderWindow::capture()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Image";
	CODE:
		RETVAL = new Image(THIS->capture());
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::Shader

Shader*
Shader::new()

void
Shader::DESTROY()

bool
Shader::loadFromFile(vfilename, sfilename)
	string vfilename
	string sfilename

bool
Shader::loadFromMemory(vstringy, sstringy)
	string vstringy
	string sstringy

void
Shader::setParameter(name, ...)
	string name
	CODE:
		if(items == 3)
			if(sv_isobject(ST(2)) && SvTYPE(SvRV(ST(2))) == SVt_PVMG){
				if(sv_isa(ST(2), "SFML::Graphics::Texture"))
					THIS->setParameter(name, *((Texture*)SvIV(SvRV(ST(2)))));
				else if(sv_isa(ST(2), "SFML::Graphics::Transform"))
					THIS->setParameter(name, *((Transform*)SvIV(SvRV(ST(2)))));
				else if(sv_isa(ST(2), "SFML::Graphics::Color"))
					THIS->setParameter(name, *((Color*)SvIV(SvRV(ST(2)))));
				else
					warn("Unknown object type!");
			} else {
				THIS->setParameter(name, SvNV(ST(2)));
			}
		else if(items == 4)
			THIS->setParameter(name, SvNV(ST(2)), SvNV(ST(3)));
		else if(items == 5)
			THIS->setParameter(name, SvNV(ST(2)), SvNV(ST(3)), SvNV(ST(4)));
		else if(items == 6)
			THIS->setParameter(name, SvNV(ST(2)), SvNV(ST(3)), SvNV(ST(4)), SvNV(ST(5)));
		else
			croak_xs_usage(cv, "THIS, (texture | transform | color | x | x,y | x,y,z | x,y,z,w)");

void
bind(shader)
	Shader* shader
	CODE:
		sf::Shader::bind(shader);

bool
isAvailable()
	CODE:
		RETVAL = sf::Shader::isAvailable();
	OUTPUT:
		RETVAL

MODULE = SFML			PACKAGE = SFML::Graphics::Sprite

Sprite*
Sprite::new(...)
	CODE:
		if(items == 1)
			RETVAL = new Sprite();
		else if((items == 2 || items == 6) && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Texture"))
			if(items == 6)
				RETVAL = new Sprite(*((Texture*)SvIV(SvRV(ST(1)))), IntRect(SvIV(ST(2)), SvIV(ST(3)), SvIV(ST(4)), SvIV(ST(5))));
			else
				RETVAL = new Sprite(*((Texture*)SvIV(SvRV(ST(1)))));
		else if(items == 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Sprite"))
			RETVAL = new Sprite(*((Sprite*)SvIV(SvRV(ST(1)))));
		else
			croak_xs_usage(cv, "THIS, [ copy | texture, [top, left, width, height] ]");
	OUTPUT:
		RETVAL

void
Sprite::DESTROY()

void
Sprite::setTexture(texture, ...)
	Texture* texture
	CODE:
		if(items >1)
			THIS->setTexture(*texture, SvTRUE(ST(2)));
		else
			THIS->setTexture(*texture);

void
Sprite::setTextureRect(left, top, width, height)
	int left
	int top
	int width
	int height
	CODE:
		THIS->setTextureRect(IntRect(left,top,width,height));

void
Sprite::setColor(color)
	Color* color
	CODE:
		THIS->setColor(*color);

void
Sprite::getTextureRect()
	CODE:
		EXTEND(SP,4);
		IntRect r = THIS->getTextureRect();
		XPUSHs(sv_2mortal(newSViv(r.top)));
		XPUSHs(sv_2mortal(newSViv(r.left)));
		XPUSHs(sv_2mortal(newSViv(r.width)));
		XPUSHs(sv_2mortal(newSViv(r.height)));

Color*
Sprite::getColor()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->getColor());
	OUTPUT:
		RETVAL

void
Sprite::getLocalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getLocalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
Sprite::getGlobalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getGlobalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
Sprite::setPosition(x,y)
	float x
	float y

void
Sprite::setRotation(angle)
	float angle

void
Sprite::setScale(factorX, factorY)
	float factorX
	float factorY

void
Sprite::setOrigin(x,y)
	float x
	float y

void
Sprite::getPosition()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getPosition();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

float
Sprite::getRotation()

void
Sprite::getScale()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getScale();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
Sprite::getOrigin()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getOrigin();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
Sprite::move(offsetX, offsetY)
	float offsetX
	float offsetY

void
Sprite::rotate(angle)
	float angle

void
Sprite::scale(factorX, factorY)
	float factorX
	float factorY

Transform*
Sprite::getTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getTransform());
	OUTPUT:
		RETVAL

Transform*
Sprite::getInverseTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getInverseTransform());
	OUTPUT:
		RETVAL

Texture*
Sprite::getTexture()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Texture";
	CODE:
		RETVAL = (Texture *) (void *) THIS->getTexture();
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::Text

Text*
Text::new(...)
	CODE:
		if(items == 1)
			RETVAL = new Text();
		else if((items == 3 || items == 4) && SvTYPE(SvRV(ST(2))) == SVt_PVMG && sv_isa(ST(2), "SFML::Graphics::Font"))
			if(items == 4)
				RETVAL = new Text(string(SvPV_nolen(ST(1))), *((Font*)SvIV(SvRV(ST(2)))), SvIV(ST(3)));
			else
				RETVAL = new Text(string(SvPV_nolen(ST(1))), *((Font*)SvIV(SvRV(ST(2)))));
		else if(items == 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Text"))
			RETVAL = new Text(*((Text*)SvIV(SvRV(ST(1)))));
		else
			croak_xs_usage(cv, "THIS, [ copy | text, font, characterSize=30 ]");
	OUTPUT:
		RETVAL

void
Text::DESTROY()

void
Text::setFont(font)
	Font* font
	CODE:
		THIS->setFont(*font);

void
Text::setString(text)
	string text

void
Text::setStyle(style)
	unsigned int style

void
Text::setColor(color)
	Color* color
	CODE:
		THIS->setColor(*color);

string
Text::getString()

Font*
Text::getFont()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Font";
	CODE:
		RETVAL = (Font*)(void*) THIS->getFont();
	OUTPUT:
		RETVAL

unsigned int
Text::getCharacterSize()

void
Text::setCharacterSize(size)
	unsigned int size

unsigned int
Text::getStyle()

Color*
Text::getColor()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->getColor());
	OUTPUT:
		RETVAL

void
Text::findCharacterPos(index)
	unsigned int index
	CODE:
		EXTEND(SP,2);
		Vector2f s = THIS->findCharacterPos(index);
		XPUSHs(sv_2mortal(newSVnv(s.x)));
		XPUSHs(sv_2mortal(newSVnv(s.y)));

void
Text::getLocalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getLocalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
Text::getGlobalBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getGlobalBounds();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
Text::setPosition(x,y)
	float x
	float y

void
Text::setRotation(angle)
	float angle

void
Text::setScale(factorX, factorY)
	float factorX
	float factorY

void
Text::setOrigin(x,y)
	float x
	float y

void
Text::getPosition()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getPosition();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

float
Text::getRotation()

void
Text::getScale()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getScale();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
Text::getOrigin()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getOrigin();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
Text::move(offsetX, offsetY)
	float offsetX
	float offsetY

void
Text::rotate(angle)
	float angle

void
Text::scale(factorX, factorY)
	float factorX
	float factorY

Transform*
Text::getTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getTransform());
	OUTPUT:
		RETVAL

Transform*
Text::getInverseTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getInverseTransform());
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::Texture

Texture*
Texture::new(...)
	CODE:
		if(items == 1)
			RETVAL = new Texture();
		else if(items == 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Texture"))
			RETVAL = new Texture(*((Texture*)SvIV(SvRV(ST(1)))));
		else
			croak_xs_usage(cv, "THIS, [ copy ]");
	OUTPUT:
		RETVAL

void
Texture::DESTROY()

bool
Texture::create(width, height)
	unsigned int width
	unsigned int height

bool
Texture::loadFromFile(filename, ...)
	string filename
	CODE:
		if(items == 6)
			RETVAL = THIS->loadFromFile(filename, IntRect(SvIV(ST(2)), SvIV(ST(3)), SvIV(ST(4)), SvIV(ST(5))));
		else if(items == 2)
			RETVAL = THIS->loadFromFile(filename);
		else
			croak_xs_usage(cv, "THIS, filename, [ top, left, width, height ]");
	OUTPUT:
		RETVAL

bool
Texture::loadFromMemory(...)
	CODE:
		std::size_t len;
		void * data = SvPV(ST(1),len);
		if(items == 6)
			RETVAL = THIS->loadFromMemory(data, len, IntRect(SvIV(ST(2)), SvIV(ST(3)), SvIV(ST(4)), SvIV(ST(5))));
		else if(items == 2)
			RETVAL = THIS->loadFromMemory(data, len);
		else
			croak_xs_usage(cv, "THIS, data, [ top, left, width, height ]");
	OUTPUT:
		RETVAL

bool
Texture::loadFromImage(image, ...)
	Image* image
	CODE:
		if(items == 6)
			RETVAL = THIS->loadFromImage(*image, IntRect(SvIV(ST(2)), SvIV(ST(3)), SvIV(ST(4)), SvIV(ST(5))));
		else if(items == 2)
			RETVAL = THIS->loadFromImage(*image);
		else
			croak_xs_usage(cv, "THIS, image, [ top, left, width, height ]");
	OUTPUT:
		RETVAL

void
Texture::getSize()
	CODE:
		EXTEND(SP,2);
		Vector2u r = THIS->getSize();
		XPUSHs(sv_2mortal(newSVuv(r.x)));
		XPUSHs(sv_2mortal(newSVuv(r.y)));

Image*
Texture::copyToImage()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Image";
	CODE:
		RETVAL = new Image(THIS->copyToImage());
	OUTPUT:
		RETVAL

void
Texture::update(...)
	CODE:
		bool error = false;
		if(items >= 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG){
			if(sv_isa(ST(1), "SFML::Graphics::Image")){
				if(items == 2)
					THIS->update(*((Image*)SvIV(SvRV(ST(1)))));
				else if(items == 4)
					THIS->update(*((Image*)SvIV(SvRV(ST(1)))), SvUV(ST(2)), SvUV(ST(3)));
				else
					error = true;
			} else if(sv_isa(ST(2), "SFML::Graphics::Window")){
				if(items == 2)
					THIS->update(*((Window*)SvIV(SvRV(ST(1)))));
				else if(items == 4)
					THIS->update(*((Window*)SvIV(SvRV(ST(1)))), SvUV(ST(2)), SvUV(ST(3)));
				else
					error = true;
			} else {
				if(items == 2)
					THIS->update((Uint8*)SvPV_nolen(ST(1)));
				else if(items == 6)
					THIS->update((Uint8*)SvPV_nolen(ST(1)), SvUV(ST(2)), SvUV(ST(3)), SvUV(ST(4)), SvUV(ST(5)));
				else
					error = true;
			}
		}
		if(error)
			croak_xs_usage(cv, "THIS, ( image, [ x, y ] | window, [ x, y ] | pixels [ width, height, x, y ] )");

bool
Texture::isSmooth()

void
Texture::setSmooth(smooth)
	bool smooth

void
Texture::setRepeated(repeated)
	bool repeated

bool
Texture::isRepeated()

MODULE = SFML		PACKAGE = SFML::Graphics::Transform

Transform*
Transform::new(...)
	CODE:
		if(items == 1)
			RETVAL = new Transform();
		else if(items == 10)
			RETVAL = new Transform(
				SvNV(ST(1)), SvNV(ST(2)), SvNV(ST(3)),
				SvNV(ST(4)), SvNV(ST(5)), SvNV(ST(6)),
				SvNV(ST(7)), SvNV(ST(8)), SvNV(ST(9)));
		else if(items == 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Transform"))
			RETVAL = new Transform(*((Transform*)SvIV(SvRV(ST(1)))));
		else
			croak_xs_usage(cv, "THIS, [ copy | a00, a01, a02, a10, a11, a12, a20, a21, a22 ]");
	OUTPUT:
		RETVAL

void
Transform::DESTROY()

void
Transform::getMatrix()
	CODE:
		const float * res = THIS->getMatrix();
		EXTEND(SP,16);
		for(int i=0; i<16;i++)
			XPUSHs(sv_2mortal(newSVnv(res[i])));

Transform*
Transform::getInverse()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getInverse());
	OUTPUT:
		RETVAL

void
Transform::transformPoint(x,y)
	float x
	float y
	CODE:
		EXTEND(SP,2);
		Vector2f v = THIS->transformPoint(x,y);
		XPUSHs(sv_2mortal(newSVnv(v.x)));
		XPUSHs(sv_2mortal(newSVnv(v.y)));

void
Transform::transformRect(top, left, width, height)
	float top
	float left
	float width
	float height
	CODE:
		EXTEND(SP,4);
		FloatRect v = THIS->transformRect(FloatRect(top,left,width,height));
		XPUSHs(sv_2mortal(newSVnv(v.top)));
		XPUSHs(sv_2mortal(newSVnv(v.left)));
		XPUSHs(sv_2mortal(newSVnv(v.width)));
		XPUSHs(sv_2mortal(newSVnv(v.height)));

Transform*
Transform::combine(transform)
	Transform* transform
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = &THIS->combine(*transform);
	OUTPUT:
		RETVAL

Transform*
Transform::translate(x, y)
	float x
	float y
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = &THIS->translate(x,y);
	OUTPUT:
		RETVAL

Transform*
Transform::rotate(angle, ...)
	float angle
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		if(items == 2)
			RETVAL = &THIS->rotate(angle);
		else if(items == 4)
			RETVAL = &THIS->rotate(angle, SvNV(ST(2)), SvNV(ST(3)));
		else
			croak_xs_usage(cv, "THIS, angle, [ centerX, centerY ]");
	OUTPUT:
		RETVAL

Transform*
Transform::scale(x, y, ...)
	float x
	float y
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		if(items == 3)
			RETVAL = &THIS->scale(x, y);
		else if(items == 5)
			RETVAL = &THIS->scale(x, y, SvNV(ST(3)), SvNV(ST(4)));
		else
			croak_xs_usage(cv, "THIS, x, y, [ centerX, centerY ]");
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::Transformable

Transformable*
Transformable::new(...)
	CODE:
		if(items == 1)
			RETVAL = new Transformable();
		else if(items == 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Transformable"))
			RETVAL = new Transformable(*((Transformable*)SvIV(SvRV(ST(1)))));
		else
			croak_xs_usage(cv, "THIS, [ copy ]");
	OUTPUT:
		RETVAL

void
Transformable::DESTROY()

void
Transformable::setPosition(x,y)
	float x
	float y

void
Transformable::setRotation(angle)
	float angle

void
Transformable::setScale(factorX, factorY)
	float factorX
	float factorY

void
Transformable::setOrigin(x,y)
	float x
	float y

void
Transformable::getPosition()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getPosition();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
Transformable::getScale()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getScale();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

void
Transformable::getOrigin()
	CODE:
		EXTEND(SP,2);
		Vector2f r = THIS->getOrigin();
		XPUSHs(sv_2mortal(newSVnv(r.x)));
		XPUSHs(sv_2mortal(newSVnv(r.y)));

float
Transformable::getRotation()

void
Transformable::move(offsetX, offsetY)
	float offsetX
	float offsetY

void
Transformable::rotate(angle)
	float angle

void
Transformable::scale(factorX, factorY)
	float factorX
	float factorY

Transform*
Transformable::getTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getTransform());
	OUTPUT:
		RETVAL

Transform*
Transformable::getInverseTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getInverseTransform());
	OUTPUT:
		RETVAL

MODULE = SFML		PACKAGE = SFML::Graphics::Vertex

Vertex*
Vertex::new(...)
	CODE:
		if(items == 1)
			RETVAL = new Vertex();
		else if(items == 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::Vertex"))
			RETVAL = new Vertex(*((Vertex*)SvIV(SvRV(ST(1)))));
		else if(items == 3)
			RETVAL = new Vertex(Vector2f(SvNV(ST(1)), SvNV(ST(2))));
		else if((items == 4 || items == 6) && SvTYPE(SvRV(ST(3))) == SVt_PVMG && sv_isa(ST(3), "SFML::Graphics::Color")) {
			if(items == 4)
				RETVAL = new Vertex(Vector2f(SvNV(ST(1)), SvNV(ST(2))), *((Color*)SvIV(SvRV(ST(3)))));
			else
				RETVAL = new Vertex(Vector2f(SvNV(ST(1)), SvNV(ST(2))), *((Color*)SvIV(SvRV(ST(3)))), Vector2f(SvNV(ST(4)), SvNV(ST(5))));
		} else if (items == 5)
			RETVAL = new Vertex(Vector2f(SvNV(ST(1)), SvNV(ST(2))), Vector2f(SvNV(ST(4)), SvNV(ST(5))));
		else
			croak_xs_usage(cv, "THIS, [ ( copy | thePosition [, ( theColor [ u, v ] | u, v ) ] ]");
	OUTPUT:
		RETVAL

void
Vertex::DESTROY()

void
Vertex::getPosition()
	CODE:
		EXTEND(SP,2);
		XPUSHs(sv_2mortal(newSVnv(THIS->position.x)));
		XPUSHs(sv_2mortal(newSVnv(THIS->position.y)));

void
Vertex::setPosition(x,y)
	float x
	float y
	CODE:
		THIS->position.x = x;
		THIS->position.y = y;

void
Vertex::setColor(color)
	Color* color
	CODE:
		THIS->color = *color;

Color*
Vertex::getColor()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Color";
	CODE:
		RETVAL = new Color(THIS->color);
	OUTPUT:
		RETVAL

void
Vertex::getTexCoords()
	CODE:
		EXTEND(SP,2);
		XPUSHs(sv_2mortal(newSVnv(THIS->texCoords.x)));
		XPUSHs(sv_2mortal(newSVnv(THIS->texCoords.y)));

void
Vertex::setTexCoords(x,y)
	float x
	float y
	CODE:
		THIS->texCoords.x = x;
		THIS->texCoords.y = y;

MODULE = SFML		PACKAGE = SFML::Graphics::VertexArray

VertexArray*
VertexArray::new(...)
	CODE:
		if(items == 1)
			RETVAL = new VertexArray();
		else if(items == 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::VertexArray"))
			RETVAL = new VertexArray(*((VertexArray*)SvIV(SvRV(ST(1)))));
		else if(items == 2)
			RETVAL = new VertexArray((PrimitiveType)SvIV(ST(1)));
		else if(items == 3)
			RETVAL = new VertexArray((PrimitiveType)SvIV(ST(1)), SvUV(ST(2)));
		else
			croak_xs_usage(cv, "THIS, [ ( copy | type, vertexCount=0 ]");
	OUTPUT:
		RETVAL

void
VertexArray::DESTROY()

unsigned int
VertexArray::getVertexCount()

Vertex*
VertexArray::get(index)
	unsigned int index
	PREINIT:
		const char * CLASS = "SFML::Graphics::Vertex";
	CODE:
		RETVAL = &((*THIS)[index]);
	OUTPUT:
		RETVAL

void
VertexArray::set(index, vertex)
	unsigned int index
	Vertex* vertex
	CODE:
		(*THIS)[index] = *vertex;

void
VertexArray::clear()

void
VertexArray::resize(vertexCount)
	unsigned int vertexCount

void
VertexArray::append(vertex)
	Vertex* vertex
	CODE:
		THIS->append(*vertex);

void
VertexArray::setPrimitiveType(type)
	int type
	CODE:
		THIS->setPrimitiveType((PrimitiveType)type);

int
VertexArray::getPrimitiveType()

void
VertexArray::getBounds()
	CODE:
		EXTEND(SP,4);
		FloatRect bounds = THIS->getBounds();
		XPUSHs(sv_2mortal(newSViv(bounds.top)));
		XPUSHs(sv_2mortal(newSViv(bounds.left)));
		XPUSHs(sv_2mortal(newSViv(bounds.width)));
		XPUSHs(sv_2mortal(newSViv(bounds.height)));

MODULE = SFML		PACKAGE = SFML::Graphics::View

View*
View::new(...)
	CODE:
		if(items == 1)
			RETVAL = new View();
		else if(items == 2 && SvTYPE(SvRV(ST(1))) == SVt_PVMG && sv_isa(ST(1), "SFML::Graphics::View"))
			RETVAL = new View(*((View*)SvIV(SvRV(ST(1)))));
		else
			croak_xs_usage(cv, "THIS, [ copy ]");
	OUTPUT:
		RETVAL

void
View::DESTROY()

void
View::setCenter(x, y)
	float x
	float y

void
View::setSize(width, height)
	float width
	float height

void
View::setRotation(angle)
	float angle

void
View::setViewport(top, left, width, height)
	float top
	float left
	float width
	float height
	CODE:
		THIS->setViewport(FloatRect(top, left, width, height));

void
View::reset(top, left, width, height)
	float top
	float left
	float width
	float height
	CODE:
		THIS->setViewport(FloatRect(top, left, width, height));

void
View::getCenter()
	CODE:
		Vector2f v = THIS->getCenter();
		EXTEND(SP,1);
		XPUSHs(sv_2mortal(newSVnv(v.x)));
		XPUSHs(sv_2mortal(newSVnv(v.y)));

void
View::getSize()
	CODE:
		Vector2f v = THIS->getSize();
		EXTEND(SP,1);
		XPUSHs(sv_2mortal(newSVnv(v.x)));
		XPUSHs(sv_2mortal(newSVnv(v.y)));

float
View::getRotation()

void
View::getViewport()
	CODE:
		EXTEND(SP,4);
		FloatRect r = THIS->getViewport();
		XPUSHs(sv_2mortal(newSVnv(r.top)));
		XPUSHs(sv_2mortal(newSVnv(r.left)));
		XPUSHs(sv_2mortal(newSVnv(r.width)));
		XPUSHs(sv_2mortal(newSVnv(r.height)));

void
View::move(offsetX, offsetY)
	float offsetX
	float offsetY

void
View::rotate(angle)
	float angle

void
View::zoom(factor)
	float factor

Transform*
View::getTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getTransform());
	OUTPUT:
		RETVAL

Transform*
View::getInverseTransform()
	PREINIT:
		const char * CLASS = "SFML::Graphics::Transform";
	CODE:
		RETVAL = new Transform(THIS->getInverseTransform());
	OUTPUT:
		RETVAL