The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
/*
 * Copyright (c) 2005, 2011 by the gtk2-perl team (see the file AUTHORS)
 *
 * Licensed under the LGPL, see LICENSE file for more information.
 *
 * $Id$
 */

#include "gtk2perl.h"
#include <cairo-perl.h>

MODULE = Gtk2::Gdk::Cairo	PACKAGE = Gtk2::Gdk::Cairo::Context	PREFIX = gdk_cairo_

=for position SYNOPSIS

=head1 HIERARCHY

    Cairo::Context
    +---- Gtk2::Gdk::Cairo::Context   (Perl subclass)

=head1 DESCRIPTION

This is some inter-operation between Cairo (see L<Cairo>) and Gdk
things.

A C<Gtk2::Gdk::Cairo::Context> lets Cairo draw on a Gdk drawable
(window or pixmap).  It's a Perl-level subclass of C<Cairo::Context>
and the various functions below can be used as methods on it.

The methods can also be used on other C<Cairo::Context> as plain
functions.  For example C<set_source_pixbuf> can setup to draw from a
C<Gtk2::Gdk::Pixbuf> to any Cairo context,

    my $cr = Cairo::Context->create ($surface);
    Gtk2::Gdk::Cairo::Context::set_source_pixbuf ($cr, $pixbuf, $x,$y);
    $cr->paint;

=cut

BOOT:
	gperl_set_isa ("Gtk2::Gdk::Cairo::Context", "Cairo::Context");

# cairo_t *gdk_cairo_create (GdkDrawable *drawable);
=for signature gdkcr = Gtk2::Gdk::Cairo::Context->create ($drawable)
=cut
SV *
gdk_cairo_create (class, GdkDrawable *drawable)
    PREINIT:
	cairo_t *cr;
    CODE:
	/* We own cr. */
	cr = gdk_cairo_create (drawable);
	RETVAL = newSV (0);
	sv_setref_pv (RETVAL, "Gtk2::Gdk::Cairo::Context", (void *) cr);
    OUTPUT:
	RETVAL

=for signature $gdkcr->set_source_color ($color)
=for signature Gtk2::Gdk::Cairo::Context::set_source_color ($anycr, $color)
=cut
void gdk_cairo_set_source_color (cairo_t *cr, GdkColor *color);

=for signature $gdkcr->set_source_pixbuf ($pixbuf, $pixbuf_x, $pixbuf_y)
=for signature Gtk2::Gdk::Cairo::Context::set_source_pixbuf ($anycr, $pixbuf, $pixbuf_x, $pixbuf_y)
=cut
void gdk_cairo_set_source_pixbuf (cairo_t *cr, GdkPixbuf *pixbuf, double pixbuf_x, double pixbuf_y);

# void gdk_cairo_rectangle (cairo_t *cr, GdkRectangle *rectangle);
=for apidoc
=for signature $gdkcr->rectangle ($rectangle)
=for signature $gdkcr->rectangle ($x, $y, $width, $height)
=for signature Gtk2::Gdk::Cairo::Context::rectangle ($anycr, $rectangle)
=for arg rectangle (Gtk2::Gdk::Rectangle)
=for arg cr (__hide__)
=for arg ... (__hide__)
The 4-argument x,y,width,height is the base L<Cairo::Context> style.  This
extends to also take a C<Gtk2::Gdk::Rectangle>.
=cut
void
gdk_cairo_rectangle (cairo_t *cr, ...)
    CODE:
	if (items == 2) {
		GdkRectangle *rect = SvGdkRectangle (ST (1));
		gdk_cairo_rectangle (cr, rect);
	} else if (items == 5) {
		double x = SvNV (ST(1));
		double y = SvNV (ST(2));
		double width = SvNV (ST(3));
		double height = SvNV (ST(4));
		cairo_rectangle (cr, x, y, width, height);
	} else {
		croak ("Usage: Gtk2::Gdk::Cairo::Context::rectangle (cr, rectangle)");
	}

=for signature $gdkcr->region ($region)
=for signature Gtk2::Gdk::Cairo::Context::region ($anycr, $region)
=cut
void gdk_cairo_region (cairo_t *cr, GdkRegion *region);

#if GTK_CHECK_VERSION (2, 10, 0)

=for signature $gdkcr->set_source_pixmap ($pixmap, $pixmap_x, $pixmap_y)
=for signature Gtk2::Gdk::Cairo::Context::set_source_pixmap ($anycr, $pixmap, $pixmap_x, $pixmap_y)
=cut
void gdk_cairo_set_source_pixmap (cairo_t *cr, GdkPixmap *pixmap, double pixmap_x, double pixmap_y);

#endif

#if GTK_CHECK_VERSION (2, 18, 0)

=for signature $gdkcr->reset_clip ($drawable)
=for signature Gtk2::Gdk::Cairo::Context::reset_clip ($anycr, $drawable)
=cut
void gdk_cairo_reset_clip (cairo_t *cr, GdkDrawable *drawable);

#endif

# ---------------------------------------------------------------------------- #

#if GTK_CHECK_VERSION (2, 10, 0)

MODULE = Gtk2::Gdk::Cairo	PACKAGE = Gtk2::Gdk::Screen	PREFIX = gdk_screen_

const cairo_font_options_t_ornull* gdk_screen_get_font_options (GdkScreen *screen);

void gdk_screen_set_font_options (GdkScreen *screen, const cairo_font_options_t_ornull *options);

#endif

# ---------------------------------------------------------------------------- #

MODULE = Gtk2::Gdk::Cairo	PACKAGE = Gtk2::Gdk::Window	PREFIX = gdk_window_

#if GTK_CHECK_VERSION (2, 22, 0)

cairo_surface_t * gdk_window_create_similar_surface (GdkWindow *window, cairo_content_t content, int width, int height);

cairo_pattern_t * gdk_window_get_background_pattern (GdkWindow *window);

#endif