The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
/*
 * Copyright (c) 2003 by the gtk2-perl team (see the file AUTHORS)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the 
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
 * Boston, MA  02111-1307  USA.
 *
 * $Header: /cvsroot/gtk2-perl/gtk2-perl-xs/GnomeCanvas/xs/GnomeCanvasItem.xs,v 1.8 2004/08/16 02:10:26 muppetman Exp $
 */
#include "gnomecanvasperl.h"

MODULE = Gnome2::Canvas::Item	PACKAGE = Gnome2::Canvas::Item	PREFIX = gnome_canvas_item_

=for apidoc parent
=for signature $canvasgroup = $item->parent
Fetch I<$item>'s parent group item.
=cut

=for apidoc
=for signature $canvas = $item->canvas
Fetch the Gnome2::Canvas to which I<$item> is attached.
=cut
SV *
canvas (item)
	GnomeCanvasItem * item
    ALIAS:
	parent = 1
    CODE:
	RETVAL = NULL;
	switch (ix) {
	    case 0: RETVAL = newSVGnomeCanvas (item->canvas); break;
	    case 1: RETVAL = newSVGnomeCanvasGroup_ornull (item->parent); break;
	}
    OUTPUT:
	RETVAL


##  GnomeCanvasItem *gnome_canvas_item_new (GnomeCanvasGroup *parent, GType type, const gchar *first_arg_name, ...) 
=for apidoc
=for arg ... property name => value pairs
Factory constructor for Gnome2::Canvas::Item subclasses.
=cut
GnomeCanvasItem *
gnome_canvas_item_new (class, parent, object_class, ...)
	GnomeCanvasGroup *parent
	const char * object_class
    PREINIT:
	GValue value = {0, };
	GType gtype;
	int i;
    CODE:
	if (0 != ((items - 3) % 2))
		croak ("expected name => value pairs to follow object class;"
		       "odd number of arguments detected");
	gtype = gperl_object_type_from_package (object_class);
	if (!gtype)
		croak ("%s is not registered with gperl as an object type",
		       object_class);
	RETVAL = gnome_canvas_item_new (parent, gtype, NULL);
	for (i = 3; i < items ; i+=2) {
		const char * name = SvPV_nolen (ST (i));
		SV * newval = ST (i + 1);
		GParamSpec * pspec;
		pspec = g_object_class_find_property 
					(G_OBJECT_GET_CLASS (RETVAL), name);
		if (!pspec)
			croak ("property %s not found in object class %s",
			       name, g_type_name (gtype));
		g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
		gperl_value_from_sv (&value, newval);
		g_object_set_property (G_OBJECT (RETVAL), name, &value);
		g_value_unset (&value);
	}
    OUTPUT:
	RETVAL

 ## use g_object_set instead
##  void gnome_canvas_item_set (GnomeCanvasItem *item, const gchar *first_arg_name, ...) 
##  void gnome_canvas_item_set_valist (GnomeCanvasItem *item, const gchar *first_arg_name, va_list args) 

##  void gnome_canvas_item_move (GnomeCanvasItem *item, double dx, double dy) 
void
gnome_canvas_item_move (item, dx, dy)
	GnomeCanvasItem *item
	double dx
	double dy

##  void gnome_canvas_item_affine_relative (GnomeCanvasItem *item, const double affine[6]) 
=for apidoc
=for arg affine (arrayref) affine transformation matrix
Combines I<$affine> with I<$item>'s current transformation.
=cut
void
gnome_canvas_item_affine_relative (item, affine)
	GnomeCanvasItem *item
	SV * affine
    C_ARGS:
	item, SvArtAffine (affine)

##  void gnome_canvas_item_affine_absolute (GnomeCanvasItem *item, const double affine[6]) 
=for apidoc
=for arg affine (arrayref) affine transformation matrix
Replaces I<$item>'s transformation matrix.
=cut
void
gnome_canvas_item_affine_absolute (item, affine)
	GnomeCanvasItem *item
	SV * affine
    C_ARGS:
	item, SvArtAffine (affine)

##  void gnome_canvas_item_raise (GnomeCanvasItem *item, int positions) 
void
gnome_canvas_item_raise (item, positions)
	GnomeCanvasItem *item
	int positions

##  void gnome_canvas_item_lower (GnomeCanvasItem *item, int positions) 
void
gnome_canvas_item_lower (item, positions)
	GnomeCanvasItem *item
	int positions

##  void gnome_canvas_item_raise_to_top (GnomeCanvasItem *item) 
void
gnome_canvas_item_raise_to_top (item)
	GnomeCanvasItem *item

##  void gnome_canvas_item_lower_to_bottom (GnomeCanvasItem *item) 
void
gnome_canvas_item_lower_to_bottom (item)
	GnomeCanvasItem *item

##  void gnome_canvas_item_show (GnomeCanvasItem *item) 
void
gnome_canvas_item_show (item)
	GnomeCanvasItem *item

##  void gnome_canvas_item_hide (GnomeCanvasItem *item) 
void
gnome_canvas_item_hide (item)
	GnomeCanvasItem *item

##  int gnome_canvas_item_grab (GnomeCanvasItem *item, unsigned int event_mask, GdkCursor *cursor, guint32 etime) 
GdkGrabStatus
gnome_canvas_item_grab (item, event_mask, cursor, etime=GDK_CURRENT_TIME)
	GnomeCanvasItem *item
	GdkEventMask event_mask
	GdkCursor *cursor
	guint32 etime

##  void gnome_canvas_item_ungrab (GnomeCanvasItem *item, guint32 etime) 
void
gnome_canvas_item_ungrab (item, etime=GDK_CURRENT_TIME)
	GnomeCanvasItem *item
	guint32 etime

##  void gnome_canvas_item_w2i (GnomeCanvasItem *item, double *x, double *y) 
void gnome_canvas_item_w2i (GnomeCanvasItem * item, IN_OUTLIST double x, IN_OUTLIST double y)

##  void gnome_canvas_item_i2w (GnomeCanvasItem *item, double *x, double *y) 
void gnome_canvas_item_i2w (GnomeCanvasItem *item, IN_OUTLIST double x, IN_OUTLIST double y) 

##  void gnome_canvas_item_i2w_affine (GnomeCanvasItem *item, double affine[6]) 
##  void gnome_canvas_item_i2c_affine (GnomeCanvasItem *item, double affine[6]) 
=for apidoc i2c_affine
=for signature $affine = $item->i2c_affine
=for arg a (__hide__)
Fetch the affine transform that converts from item-relative coordinates to
canvas pixel coordinates.

Note: This method was completely broken for all
$Gnome2::Canvas::VERSION < 1.002.
=cut

=for apidoc
=for signature $affine = $item->i2w_affine
=for arg a (__hide__)
Fetch the affine transform that converts from item's coordinate system to
world coordinates.

Note: This method was completely broken for all
$Gnome2::Canvas::VERSION < 1.002.
=cut
SV *
gnome_canvas_item_i2w_affine (item, a=NULL)
	GnomeCanvasItem *item
	SV * a
    ALIAS:
	i2c_affine = 1
    PREINIT:
	double affine[6];
    CODE:
	if (a != NULL || items > 1)
		warn ("Gnome2::Canvas::%s() was broken before 1.002;"
		      " the second parameter does nothing (see the Gnome2::"
		      "Canvas manpage)",
		      ix == 0 ? "i2w_affine" : "i2c_affine");
	if (ix == 1)
		gnome_canvas_item_i2c_affine (item, affine);
	else
		gnome_canvas_item_i2w_affine (item, affine);
	RETVAL = newSVArtAffine (affine);
    OUTPUT:
	RETVAL


##  void gnome_canvas_item_reparent (GnomeCanvasItem *item, GnomeCanvasGroup *new_group) 
void
gnome_canvas_item_reparent (item, new_group)
	GnomeCanvasItem *item
	GnomeCanvasGroup *new_group

##  void gnome_canvas_item_grab_focus (GnomeCanvasItem *item) 
void
gnome_canvas_item_grab_focus (item)
	GnomeCanvasItem *item

##  void gnome_canvas_item_get_bounds (GnomeCanvasItem *item, double *x1, double *y1, double *x2, double *y2) 
void gnome_canvas_item_get_bounds (GnomeCanvasItem *item, OUTLIST double x1, OUTLIST double y1, OUTLIST double x2, OUTLIST double y2) 

##  void gnome_canvas_item_request_update (GnomeCanvasItem *item) 
void
gnome_canvas_item_request_update (item)
	GnomeCanvasItem *item