TYPEMAP

# These are synonyms for Gtk::Gdk::Pixmap (which itself is a renamed Gtk::Gdk::Window)
Gtk::Gdk::Window	T_SimpleVal
Gtk::Gdk::Bitmap	T_SimpleVal

Gtk::Gdk::Cursor	T_MISCPTROBJ
Gtk::Gdk::GC		T_MISCPTROBJ
Gtk::Gdk::Image		T_SimpleVal
Gtk::Gdk::GCValues	T_MISCPTROBJ
Gtk::Gdk::Atom		T_SimpleVal

Gtk::MenuFactory	T_MISCPTROBJ
Gtk::SelectionData      T_MISCPTROBJ

upGtk::Widget		T_GtkUPPTROBJ

Gtk::Gdk::Event		T_SimpleVal
Gtk::Gdk::Rectangle	T_SimplePtr
Gtk::Gdk::Color		T_SimpleVal

bool				T_BOOL

INPUT

T_BOOL
	$var = (int)SvIV($arg)

T_GtkPTROBJ
	$var = Cast$type(SvGtkObjectRef($arg, \"${ntype}\"))

T_GtkUPPTROBJ
	$var = Cast$type(SvGtkObjectRef($arg, \"${ntype}\"))

T_GtkPTRREF
	$var = Cast$type(SvGtkObjectRef($arg, 0))

T_GtkUPPTRREF
	$var = Cast$type(SvGtkObjectRef($arg, 0))

T_MISCPTROBJ
	$var = ($type)SvMiscRef($arg, \"${ntype}\")

T_MISCPTRREF
	$var = ($type)SvMiscRef($arg, 0);

T_REFPTROBJ
	$var = ($type)SvMiscRef($arg, \"${ntype}\")

T_REFPTRREF
	$var = ($type)SvMiscRef($arg, 0);

T_SimpleVal
	$var = Sv" . ($foo=$ntype, $foo=~s/://g, $foo=~s/^GtkGdk/Gdk/, $foo) . "($arg)

T_SimplePtr
	$var = Sv" . ($foo=$ntype, $foo=~s/://g, $foo=~s/^GtkGdk/Gdk/, $foo) . "($arg,0)

OUTPUT

T_BOOL
	$arg = boolSV($var);

T_GtkPTROBJ
	sv_setsv($arg, newSVGtkObjectRef(GTK_OBJECT($var), \"${ntype}\"));
	SvREFCNT_dec(SvRV($arg));

T_GtkUPPTROBJ
	sv_setsv($arg, newSVGtkObjectRef(GTK_OBJECT($var), 0));
	SvREFCNT_dec(SvRV($arg));

T_MISCPTROBJ
	sv_setsv($arg, newSVMiscRef((void*)$var, \"${ntype}\", 0));
	SvREFCNT_dec(SvRV($arg));

T_REFPTROBJ
	{
		int n;
		sv_setsv($arg,newSVMiscRef((void*)$var, \"${ntype}\", &n));
		SvREFCNT_dec(SvRV($arg));
		if (n)
			@{[grep {s/://g, s/^GtkGdk/Gdk/, s/([a-z])([A-Z]+)/$1_$2/g, tr/A-Z/a-z/, 1} $ntype]}_ref($var);
	}

T_SimpleVal
	sv_setsv($arg,sv_2mortal(newSV@{[grep {s/://g,s/^GtkGdk/Gdk/,1} $ntype]}($var)));

T_SimplePtr
	sv_setsv($arg,sv_2mortal(newSV@{[grep {s/://g,s/^GtkGdk/Gdk/,1} $ntype]}($var)));
