/*
 * Copyright (c) 2003-2005, 2014 by the gtk2-perl team (see the AUTHORS
 * file for a full list of 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 LICENSE file in the top-level directory of this distribution for
 * the full license terms.
 *
 */

#include "pango-perl.h"

MODULE = Pango::Font	PACKAGE = Pango

=for object Pango::FontDescription
=cut

### some constants...
double
scale (class)
    ALIAS:
	Pango::scale_xx_small = 1
	Pango::scale_x_small  = 2
	Pango::scale_small    = 3
	Pango::scale_medium   = 4
	Pango::scale_large    = 5
	Pango::scale_x_large  = 6
	Pango::scale_xx_large = 7
    CODE:
	switch (ix) {
		case 0: RETVAL = (double)PANGO_SCALE; break;
		case 1: RETVAL = PANGO_SCALE_XX_SMALL; break;
		case 2: RETVAL = PANGO_SCALE_X_SMALL; break;
		case 3: RETVAL = PANGO_SCALE_SMALL; break;
		case 4: RETVAL = PANGO_SCALE_MEDIUM; break;
		case 5: RETVAL = PANGO_SCALE_LARGE; break;
		case 6: RETVAL = PANGO_SCALE_X_LARGE; break;
		case 7: RETVAL = PANGO_SCALE_XX_LARGE; break;
		default:
			RETVAL = 0.0;
			g_assert_not_reached ();
	}
    OUTPUT:
	RETVAL

double
PANGO_PIXELS (class, d)
	double d
    ALIAS:
	Pango::pixels = 1
    C_ARGS:
	d
    CLEANUP:
	PERL_UNUSED_VAR (ix);

MODULE = Pango::Font	PACKAGE = Pango::FontDescription	PREFIX = pango_font_description_

##PangoFontDescription* pango_font_description_new (void)
PangoFontDescription_own *
pango_font_description_new (class)
    C_ARGS:
	/* void */

## guint pango_font_description_hash (const PangoFontDescription *desc)
guint
pango_font_description_hash (desc)
	PangoFontDescription *desc

## gboolean pango_font_description_equal (const PangoFontDescription *desc1, const PangoFontDescription *desc2)
gboolean
pango_font_description_equal (desc1, desc2)
	PangoFontDescription *desc1
	PangoFontDescription *desc2

# should be taken care of automagically
## void pango_font_description_free (PangoFontDescription *desc)
## void pango_font_descriptions_free (PangoFontDescription **descs, int n_descs)

## void pango_font_description_set_family (PangoFontDescription *desc, const char *family)
void
pango_font_description_set_family (desc, family)
	PangoFontDescription *desc
	const char *family

## void pango_font_description_set_family_static (PangoFontDescription *desc, const char *family)
void
pango_font_description_set_family_static (desc, family)
	PangoFontDescription *desc
	const char *family

## void pango_font_description_get_family (PangoFontDescription *desc, )
const char *
pango_font_description_get_family (desc)
	PangoFontDescription *desc

## void pango_font_description_set_style (PangoFontDescription *desc, PangoStyle style)
void
pango_font_description_set_style (desc, style)
	PangoFontDescription *desc
	PangoStyle style

## PangoStyle pango_font_description_get_style (const PangoFontDescription *desc)
PangoStyle
pango_font_description_get_style (desc)
	PangoFontDescription *desc

## void pango_font_description_set_variant (PangoFontDescription *desc, PangoVariant variant)
void
pango_font_description_set_variant (desc, variant)
	PangoFontDescription *desc
	PangoVariant variant

## PangoVariant pango_font_description_get_variant (const PangoFontDescription *desc)
PangoVariant
pango_font_description_get_variant (desc)
	PangoFontDescription *desc

## void pango_font_description_set_weight (PangoFontDescription *desc, PangoWeight weight)
void
pango_font_description_set_weight (desc, weight)
	PangoFontDescription *desc
	PangoWeight weight

## PangoWeight pango_font_description_get_weight (const PangoFontDescription *desc)
PangoWeight
pango_font_description_get_weight (desc)
	PangoFontDescription *desc

## void pango_font_description_set_stretch (PangoFontDescription *desc, PangoStretch stretch)
void
pango_font_description_set_stretch (desc, stretch)
	PangoFontDescription *desc
	PangoStretch stretch

## PangoStretch pango_font_description_get_stretch (const PangoFontDescription *desc)
PangoStretch
pango_font_description_get_stretch (desc)
	PangoFontDescription *desc

## void pango_font_description_set_size (PangoFontDescription *desc, gint size)
void
pango_font_description_set_size (desc, size)
	PangoFontDescription *desc
	gint size

## gint pango_font_description_get_size (const PangoFontDescription *desc)
gint
pango_font_description_get_size (desc)
	PangoFontDescription *desc

## PangoFontMask pango_font_description_get_set_fields (const PangoFontDescription *desc)
PangoFontMask
pango_font_description_get_set_fields (desc)
	PangoFontDescription *desc

## void pango_font_description_unset_fields (PangoFontDescription *desc, PangoFontMask to_unset)
void
pango_font_description_unset_fields (desc, to_unset)
	PangoFontDescription *desc
	PangoFontMask to_unset

## void pango_font_description_merge (PangoFontDescription *desc, const PangoFontDescription *desc_to_merge, gboolean replace_existing)
void
pango_font_description_merge (desc, desc_to_merge, replace_existing)
	PangoFontDescription *desc
	PangoFontDescription *desc_to_merge
	gboolean replace_existing

## void pango_font_description_merge_static (PangoFontDescription *desc, const PangoFontDescription *desc_to_merge, gboolean replace_existing)
void
pango_font_description_merge_static (desc, desc_to_merge, replace_existing)
	PangoFontDescription *desc
	PangoFontDescription *desc_to_merge
	gboolean replace_existing

## gboolean pango_font_description_better_match (const PangoFontDescription *desc, const PangoFontDescription *old_match, const PangoFontDescription *new_match)
gboolean
pango_font_description_better_match (desc, old_match, new_match)
	PangoFontDescription *desc
	PangoFontDescription_ornull *old_match
	PangoFontDescription *new_match


##PangoFontDescription *pango_font_description_from_string (const char *str)
PangoFontDescription_own *
pango_font_description_from_string (class, str)
	const char * str
    C_ARGS:
	str

## char * pango_font_description_to_string (const PangoFontDescription *desc)
char *
pango_font_description_to_string (desc)
	PangoFontDescription *desc
    CLEANUP:
	g_free (RETVAL);

## char * pango_font_description_to_filename (const PangoFontDescription *desc)
char *
pango_font_description_to_filename (desc)
	PangoFontDescription *desc
    CLEANUP:
	g_free (RETVAL);

#if PANGO_CHECK_VERSION (1, 8, 0)

void pango_font_description_set_absolute_size (PangoFontDescription *desc, double size);

gboolean pango_font_description_get_size_is_absolute (const PangoFontDescription *desc);

#endif

#if PANGO_CHECK_VERSION (1, 16, 0)

void pango_font_description_set_gravity (PangoFontDescription *desc, PangoGravity gravity);

PangoGravity pango_font_description_get_gravity (const PangoFontDescription *desc);

#endif

MODULE = Pango::Font	PACKAGE = Pango::FontMetrics	PREFIX = pango_font_metrics_

# should happen automagicly
## void pango_font_metrics_unref (PangoFontMetrics *metrics)

## int pango_font_metrics_get_ascent (PangoFontMetrics *metrics)
int
pango_font_metrics_get_ascent (metrics)
	PangoFontMetrics *metrics

## int pango_font_metrics_get_descent (PangoFontMetrics *metrics)
int
pango_font_metrics_get_descent (metrics)
	PangoFontMetrics *metrics

## int pango_font_metrics_get_approximate_char_width (PangoFontMetrics *metrics)
int
pango_font_metrics_get_approximate_char_width (metrics)
	PangoFontMetrics *metrics

## int pango_font_metrics_get_approximate_digit_width (PangoFontMetrics *metrics)
int
pango_font_metrics_get_approximate_digit_width (metrics)
	PangoFontMetrics *metrics

#if PANGO_CHECK_VERSION (1, 6, 0)

## int pango_font_metrics_get_underline_position (PangoFontMetrics *metrics)
int
pango_font_metrics_get_underline_position (metrics)
	PangoFontMetrics *metrics

## int pango_font_metrics_get_underline_thickness (PangoFontMetrics *metrics)
int
pango_font_metrics_get_underline_thickness (metrics)
	PangoFontMetrics *metrics

## int pango_font_metrics_get_strikethrough_position (PangoFontMetrics *metrics)
int
pango_font_metrics_get_strikethrough_position (metrics)
	PangoFontMetrics *metrics

## int pango_font_metrics_get_strikethrough_thickness (PangoFontMetrics *metrics)
int
pango_font_metrics_get_strikethrough_thickness (metrics)
	PangoFontMetrics *metrics

#endif

MODULE = Pango::Font	PACKAGE = Pango::FontFamily	PREFIX = pango_font_family_

BOOT:
	gperl_object_set_no_warn_unreg_subclass (PANGO_TYPE_FONT_FAMILY, TRUE);

## void pango_font_family_list_faces (PangoFontFamily *family, PangoFontFace ***faces, int *n_faces)
=for apidoc
=for apidoc @faces = $family->list_faces
Lists the different font faces that make up family. The faces in a family
share a common design, but differ in slant, weight, width and other aspects.
=cut
void
pango_font_family_list_faces (family)
	PangoFontFamily *family
    PREINIT:
	PangoFontFace ** faces = NULL;
	int n_faces;
    PPCODE:
	pango_font_family_list_faces(family, &faces, &n_faces);
	if (n_faces > 0) {
		int i;
		EXTEND(SP,n_faces);
		for (i = 0 ; i < n_faces ; i++)
			PUSHs(sv_2mortal(newSVPangoFontFace(faces[i])));
		g_free (faces);
	}


const char * pango_font_family_get_name (PangoFontFamily * family)

#if PANGO_CHECK_VERSION(1, 4, 0)

gboolean pango_font_family_is_monospace (PangoFontFamily * family)

#endif

MODULE = Pango::Font	PACKAGE = Pango::FontFace	PREFIX = pango_font_face_

#
# PangoFontFace
#

BOOT:
	gperl_object_set_no_warn_unreg_subclass (PANGO_TYPE_FONT_FACE, TRUE);

 ## PangoFontDescription *pango_font_face_describe (PangoFontFace *face);
PangoFontDescription_own * pango_font_face_describe (PangoFontFace *face);

 ## G_CONST_RETURN char *pango_font_face_get_face_name (PangoFontFace *face);
const char *pango_font_face_get_face_name (PangoFontFace *face);

#if PANGO_CHECK_VERSION(1, 4, 0)

 ## void pango_font_face_list_sizes (PangoFontFace  *face, int **sizes, int *n_sizes);
=for apidoc
=for signature @sizes = $face->list_sizes
List the sizes available for a bitmapped font.  For scalable fonts, this will
return an empty list.
=cut
void
pango_font_face_list_sizes (PangoFontFace *face)
    PREINIT:
	int *sizes=NULL, n_sizes, i;
    PPCODE:
	pango_font_face_list_sizes (face, &sizes, &n_sizes);
	if (n_sizes > 0) {
		EXTEND (SP, n_sizes);
		for (i = 0 ; i < n_sizes ; i++)
			PUSHs (sv_2mortal (newSViv (sizes[i])));
		g_free (sizes);
	}

#endif

#if PANGO_CHECK_VERSION(1, 18, 0)

gboolean pango_font_face_is_synthesized (PangoFontFace *face);

#endif

MODULE = Pango::Font	PACKAGE = Pango::Font	PREFIX = pango_font_

## PangoFontMetrics * pango_font_get_metrics (PangoFont *font, PangoLanguage *language)
PangoFontMetrics *
pango_font_get_metrics (font, language)
	PangoFont *font
	PangoLanguage *language

## PangoFontDescription* pango_font_describe (PangoFont *font)
PangoFontDescription_own *
pango_font_describe (font)
	PangoFont *font

#if PANGO_CHECK_VERSION(1, 14, 0)

 ## PangoFontDescription *pango_font_describe_with_absolute_size (PangoFont *font);
PangoFontDescription_own *pango_font_describe_with_absolute_size (PangoFont *font);

#endif

## void pango_font_get_glyph_extents (PangoFont *font, PangoGlyph glyph, PangoRectangle *ink_rect, PangoRectangle *logical_rect)
void
pango_font_get_glyph_extents (font, glyph)
	PangoFont *font
	PangoGlyph glyph
    PREINIT:
	PangoRectangle ink_rect;
	PangoRectangle logical_rect;
    PPCODE:
	pango_font_get_glyph_extents (font, glyph, &ink_rect, &logical_rect);
	EXTEND (sp, 2);
	PUSHs (sv_2mortal (newSVPangoRectangle (&ink_rect)));
	PUSHs (sv_2mortal (newSVPangoRectangle (&logical_rect)));

#if PANGO_CHECK_VERSION(1, 10, 0)

PangoFontMap * pango_font_get_font_map (PangoFont *font);

#endif

### no typemaps for this stuff.
### it looks like it would only be useful from C, though.
### PangoCoverage * pango_font_get_coverage (PangoFont *font, PangoLanguage *language)
### PangoEngineShape * pango_font_find_shaper (PangoFont *font, PangoLanguage *language, guint32 ch)