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.1 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.
 *
 * $Id$
 */
#include "gtk2perl.h"

/*
 * Programs and libraries can register their own GtkIconSizes, making the
 * standard enum handling rather incorrect.  so, we override that stuff
 * here.  FIXME if this stuff is ever needed outside this file, we'll have
 * to undef and prototype in gtk2perl.h, instead.
 */
#undef newSVGtkIconSize
#undef SvGtkIconSize

static SV *
newSVGtkIconSize (GtkIconSize size)
{
	/* crap.  there is no try.  do, or do not. */
	/* SV * sv = gperl_try_convert_back_enum (GTK_TYPE_ICON_SIZE, size); */
	SV * sv = gperl_convert_back_enum_pass_unknown (GTK_TYPE_ICON_SIZE,
							size);
	if (looks_like_number (sv)) {
		/* fall back... */
		const char * name;
		name = gtk_icon_size_get_name (size);
		if (name)
			sv_setpv (sv, name);
	}
	return sv;
}

static GtkIconSize
SvGtkIconSize (SV * sv)
{
	GtkIconSize size;
	if (gperl_try_convert_enum (GTK_TYPE_ICON_SIZE, sv, (gint*)&size))
		return size;
	/* fall back... */
	return gtk_icon_size_from_name (SvPV_nolen (sv));
}


MODULE = Gtk2::IconFactory	PACKAGE = Gtk2::IconFactory	PREFIX = gtk_icon_factory_

##  GtkIconFactory* gtk_icon_factory_new (void) 
GtkIconFactory_noinc *
gtk_icon_factory_new (class)
    C_ARGS:
	/*void*/

##  void gtk_icon_factory_add (GtkIconFactory *factory, const gchar *stock_id, GtkIconSet *icon_set) 
void
gtk_icon_factory_add (factory, stock_id, icon_set)
	GtkIconFactory *factory
	const gchar *stock_id
	GtkIconSet *icon_set

##  GtkIconSet* gtk_icon_factory_lookup (GtkIconFactory *factory, const gchar *stock_id) 
GtkIconSet*
gtk_icon_factory_lookup (factory, stock_id)
	GtkIconFactory *factory
	const gchar *stock_id

##  void gtk_icon_factory_add_default (GtkIconFactory *factory) 
void
gtk_icon_factory_add_default (factory)
	GtkIconFactory *factory

##  void gtk_icon_factory_remove_default (GtkIconFactory *factory) 
void
gtk_icon_factory_remove_default (factory)
	GtkIconFactory *factory

# apps should generally use themes for this, but the stock browser needs it
##  GtkIconSet* gtk_icon_factory_lookup_default (const gchar *stock_id) 
GtkIconSet*
gtk_icon_factory_lookup_default (class, stock_id)
	const gchar *stock_id
    CODE:
	RETVAL = gtk_icon_factory_lookup_default (stock_id);
	if (!RETVAL)
		XSRETURN_UNDEF;
    OUTPUT:
	RETVAL

MODULE = Gtk2::IconFactory	PACKAGE = Gtk2::IconSize	PREFIX = gtk_icon_size_

##  gboolean gtk_icon_size_lookup (GtkIconSize size, gint *width, gint *height) 
=for apidoc
=for signature (width, height) = Gtk2::IconSize->lookup ($size)
=cut
void
gtk_icon_size_lookup (class, size)
	GtkIconSize size
    PREINIT:
	gint width;
	gint height;
    PPCODE:
	if (!gtk_icon_size_lookup (size, &width, &height))
		XSRETURN_EMPTY;
	EXTEND (SP, 2);
	PUSHs (sv_2mortal (newSViv (width)));
	PUSHs (sv_2mortal (newSViv (height)));

#if GTK_CHECK_VERSION(2,2,0)

##  gboolean gtk_icon_size_lookup_for_settings (GtkSettings *settings, GtkIconSize size, gint *width, gint *height) 
=for apidoc
=for signature (width, height) = Gtk2::IconSize->lookup_for_settings ($settings, $size)
=cut
void
gtk_icon_size_lookup_for_settings (class, settings, size)
	GtkSettings *settings
	GtkIconSize size
    PREINIT:
	gint width;
	gint height;
    PPCODE:
	if (!gtk_icon_size_lookup_for_settings (settings, size, &width, &height))
		XSRETURN_EMPTY;
	EXTEND (SP, 2);
	PUSHs (sv_2mortal (newSViv (width)));
	PUSHs (sv_2mortal (newSViv (height)));

#endif /* >= 2.2.0 */

##  GtkIconSize gtk_icon_size_register (const gchar *name, gint width, gint height) 
GtkIconSize
gtk_icon_size_register (class, name, width, height)
	const gchar *name
	gint width
	gint height
    C_ARGS:
	name, width, height

##  void gtk_icon_size_register_alias (const gchar *alias, GtkIconSize target) 
void
gtk_icon_size_register_alias (class, alias, target)
	const gchar *alias
	GtkIconSize target
    C_ARGS:
	alias, target

##  GtkIconSize gtk_icon_size_from_name (const gchar *name) 
GtkIconSize
gtk_icon_size_from_name (class, name)
	const gchar *name
    C_ARGS:
	name

##  const gchar * gtk_icon_size_get_name (GtkIconSize size) 

MODULE = Gtk2::IconFactory	PACKAGE = Gtk2::IconSet	PREFIX = gtk_icon_set_

##  GtkIconSet* gtk_icon_set_new (void) 
GtkIconSet_own*
gtk_icon_set_new (class)
    C_ARGS:
	/*void*/

##  GtkIconSet* gtk_icon_set_new_from_pixbuf (GdkPixbuf *pixbuf) 
GtkIconSet_own*
gtk_icon_set_new_from_pixbuf (class, pixbuf)
	GdkPixbuf *pixbuf
    C_ARGS:
	pixbuf

 # these are done for you by the Glib bindings
###  GtkIconSet* gtk_icon_set_ref (GtkIconSet *icon_set) 
###  void gtk_icon_set_unref (GtkIconSet *icon_set) 
###  GtkIconSet* gtk_icon_set_copy (GtkIconSet *icon_set) 

#### apps should almost always use gtk_widget_render_icon
##  GdkPixbuf* gtk_icon_set_render_icon (GtkIconSet *icon_set, GtkStyle *style, GtkTextDirection direction, GtkStateType state, GtkIconSize size, GtkWidget *widget, const char *detail) 
GdkPixbuf_noinc*
gtk_icon_set_render_icon (icon_set, style, direction, state, size, widget, detail=NULL)
	GtkIconSet *icon_set
	GtkStyle_ornull *style
	GtkTextDirection direction
	GtkStateType state
	GtkIconSize size
	GtkWidget_ornull *widget
	const char *detail

##  void gtk_icon_set_add_source (GtkIconSet *icon_set, const GtkIconSource *source) 
void
gtk_icon_set_add_source (icon_set, source)
	GtkIconSet *icon_set
	GtkIconSource *source

##  void gtk_icon_set_get_sizes (GtkIconSet *icon_set, GtkIconSize **sizes, gint *n_sizes) 
=for apidoc
Returns a list of Gtk2::IconSize's.
=cut
void
gtk_icon_set_get_sizes (icon_set)
	GtkIconSet *icon_set
    PREINIT:
	GtkIconSize * sizes = NULL;
	gint n_sizes, i;
    PPCODE:
	gtk_icon_set_get_sizes (icon_set, &sizes, &n_sizes);
	EXTEND (SP, n_sizes);
	for (i = 0 ; i < n_sizes ; i++)
		PUSHs (sv_2mortal (newSVGtkIconSize (sizes[i])));
	g_free (sizes);
	

MODULE = Gtk2::IconFactory	PACKAGE = Gtk2::IconSource	PREFIX = gtk_icon_source_

##  GtkIconSource* gtk_icon_source_new (void) 
GtkIconSource_own*
gtk_icon_source_new (class)
    C_ARGS:
	/*void*/

 # these are done for you by the Glib::Boxed bindings
##  GtkIconSource* gtk_icon_source_copy (const GtkIconSource *source) 
##  void gtk_icon_source_free (GtkIconSource *source) 

##  void gtk_icon_source_set_filename (GtkIconSource *source, const gchar *filename) 
void
gtk_icon_source_set_filename (source, filename)
	GtkIconSource *source
	GPerlFilename filename

GPerlFilename_const
gtk_icon_source_get_filename (source)
	GtkIconSource *source

##  void gtk_icon_source_set_pixbuf (GtkIconSource *source, GdkPixbuf *pixbuf) 
void
gtk_icon_source_set_pixbuf (source, pixbuf)
	GtkIconSource *source
	GdkPixbuf *pixbuf

##  GdkPixbuf* gtk_icon_source_get_pixbuf (const GtkIconSource *source) 
GdkPixbuf_ornull*
gtk_icon_source_get_pixbuf (source)
	GtkIconSource *source

##  void gtk_icon_source_set_direction_wildcarded (GtkIconSource *source, gboolean setting) 
void
gtk_icon_source_set_direction_wildcarded (source, setting)
	GtkIconSource *source
	gboolean setting

##  void gtk_icon_source_set_state_wildcarded (GtkIconSource *source, gboolean setting) 
void
gtk_icon_source_set_state_wildcarded (source, setting)
	GtkIconSource *source
	gboolean setting

##  void gtk_icon_source_set_size_wildcarded (GtkIconSource *source, gboolean setting) 
void
gtk_icon_source_set_size_wildcarded (source, setting)
	GtkIconSource *source
	gboolean setting

##  gboolean gtk_icon_source_get_size_wildcarded (const GtkIconSource *source) 
gboolean
gtk_icon_source_get_size_wildcarded (source)
	GtkIconSource *source

##  gboolean gtk_icon_source_get_state_wildcarded (const GtkIconSource *source) 
gboolean
gtk_icon_source_get_state_wildcarded (source)
	GtkIconSource *source

##  gboolean gtk_icon_source_get_direction_wildcarded (const GtkIconSource *source) 
gboolean
gtk_icon_source_get_direction_wildcarded (source)
	GtkIconSource *source

##  void gtk_icon_source_set_direction (GtkIconSource *source, GtkTextDirection direction) 
void
gtk_icon_source_set_direction (source, direction)
	GtkIconSource *source
	GtkTextDirection direction

##  void gtk_icon_source_set_state (GtkIconSource *source, GtkStateType state) 
void
gtk_icon_source_set_state (source, state)
	GtkIconSource *source
	GtkStateType state

##  void gtk_icon_source_set_size (GtkIconSource *source, GtkIconSize size) 
void
gtk_icon_source_set_size (source, size)
	GtkIconSource *source
	GtkIconSize size

##  GtkTextDirection gtk_icon_source_get_direction (const GtkIconSource *source) 
GtkTextDirection
gtk_icon_source_get_direction (source)
	GtkIconSource *source

##  GtkStateType gtk_icon_source_get_state (const GtkIconSource *source) 
GtkStateType
gtk_icon_source_get_state (source)
	GtkIconSource *source

##  GtkIconSize gtk_icon_source_get_size (const GtkIconSource *source) 
GtkIconSize
gtk_icon_source_get_size (source)
	GtkIconSource *source

#if GTK_CHECK_VERSION(2,4,0)

##  void gtk_icon_source_set_icon_name (GtkIconSource *source, const gchar *icon_name) 
void
gtk_icon_source_set_icon_name (source, icon_name)
	GtkIconSource *source
	const gchar *icon_name

##  const gchar *gtk_icon_source_get_icon_name (const GtkIconSource *source) 
const gchar *
gtk_icon_source_get_icon_name (source)
	GtkIconSource *source

#endif