The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "GnomePrintDefs.h"

#include <libart_lgpl/art_affine.h>

static void     callXS (void (*subaddr)(CV* cv), CV *cv, SV **mark)
{
	int items;
	dSP;
	PUSHMARK (mark);
	(*subaddr)(cv);

	PUTBACK;  /* Forget the return values */
}

MODULE = Gnome::Print	PACKAGE = Gnome::Print	PREFIX = gnome_print_

void
_boot_all ()
	CODE:
	{
#include "GnomePrintobjects.xsh"
	}

void
init (Class)
	SV	*Class
	CODE:
	{
		static int did_it = 0;
		if (did_it)
			return;

		did_it = 1;
		GnomePrint_InstallTypedefs();
		GnomePrint_InstallObjects();
	}

# convenience functions ...

void
affine_rotate (Class, angle)
	SV *	Class
	double	angle
	PPCODE:
	{
		double m[6];
		int i;
		art_affine_rotate (m, angle);
		EXTEND(sp, 6);
		for (i=0; i < 6; ++i)
			PUSHs(sv_2mortal(newSVnv(m[i])));
	}

void
affine_scale (Class, sx, sy)
	SV *	Class
	double	sx
	double	sy
	PPCODE:
	{
		double m[6];
		int i;
		art_affine_scale (m, sx, sy);
		EXTEND(sp, 6);
		for (i=0; i < 6; ++i)
			PUSHs(sv_2mortal(newSVnv(m[i])));
	}

void
affine_translate (Class, dx, dy)
	SV *	Class
	double	dx
	double	dy
	PPCODE:
	{
		double m[6];
		int i;
		art_affine_translate (m, dx, dy);
		EXTEND(sp, 6);
		for (i=0; i < 6; ++i)
			PUSHs(sv_2mortal(newSVnv(m[i])));
	}

INCLUDE: ../build/boxed.xsh

INCLUDE: ../build/extension.xsh