// Code generated by cmd/cgo; DO NOT EDIT.

//line /home/josie/.cache/paru/clone/wiiudownloader/src/pkg/mod/github.com/gotk3/gotk3@v0.6.5-0.20240618185848-ff349ae13f56/cairo/canvas.go:1:1
package cairo

// #include <stdlib.h>
// #include <cairo.h>
// #include <cairo-gobject.h>
import _ "unsafe"

import (
	"reflect"
	"runtime"
	"unsafe"

	"github.com/gotk3/gotk3/glib"
)

// Context is a representation of Cairo's cairo_t.
type Context struct {
	context * /*line :18:11*/_Ctype_cairo_t /*line :18:20*/
}

// native returns a pointer to the underlying cairo_t.
func (v *Context) native() * /*line :22:29*/_Ctype_cairo_t /*line :22:38*/ {
	if v == nil {
		return nil
	}
	return v.context
}

func (v *Context) GetCContext() * /*line :29:34*/_Ctype_cairo_t /*line :29:43*/ {
	return v.native()
}

// Native returns a pointer to the underlying cairo_t.
func (v *Context) Native() uintptr {
	return uintptr(unsafe.Pointer(v.native()))
}

func marshalContext(p uintptr) (interface{}, error) {
	c := ( /*line :39:7*/_Cfunc_g_value_get_boxed /*line :39:25*/)((* /*line :39:29*/_Ctype_GValue /*line :39:37*/)(unsafe.Pointer(p)))
	context := (* /*line :40:15*/_Ctype_cairo_t /*line :40:24*/)(unsafe.Pointer(c))
	return wrapContext(context), nil
}

func wrapContext(context * /*line :44:27*/_Ctype_cairo_t /*line :44:36*/) *Context {
	return &Context{context}
}

func WrapContext(p uintptr) *Context {
	context := (* /*line :49:15*/_Ctype_cairo_t /*line :49:24*/)(unsafe.Pointer(p))
	return wrapContext(context)
}

// Closes the context. The context must not be used afterwards.
func (v *Context) Close() {
	v.destroy()
}

// Create is a wrapper around cairo_create().
func Create(target *Surface) *Context {
	c := func() *_Ctype_struct__cairo{ _cgo0 := /*line :60:22*/target.native(); _cgoCheckPointer(_cgo0, nil); return /*line :60:38*/_Cfunc_cairo_create(_cgo0); }()
	ctx := wrapContext(c)
	runtime.SetFinalizer(ctx, func(v *Context) { glib.FinalizerStrategy(v.destroy) })
	return ctx
}

// reference is a wrapper around cairo_reference().
func (v *Context) reference() {
	v.context = func() *_Ctype_struct__cairo{ _cgo0 := /*line :68:32*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :68:43*/_Cfunc_cairo_reference(_cgo0); }()
}

// destroy is a wrapper around cairo_destroy().
func (v *Context) destroy() {
	if v.context != nil {
		func() { _cgo0 := /*line :74:19*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :74:30*/_Cfunc_cairo_destroy(_cgo0); }()
		v.context = nil
	}
}

// Status is a wrapper around cairo_status().
func (v *Context) Status() Status {
	c := func() _Ctype_cairo_status_t{ _cgo0 := /*line :81:22*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :81:33*/_Cfunc_cairo_status(_cgo0); }()
	return Status(c)
}

// Save is a wrapper around cairo_save().
func (v *Context) Save() {
	func() { _cgo0 := /*line :87:15*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :87:26*/_Cfunc_cairo_save(_cgo0); }()
}

// Restore is a wrapper around cairo_restore().
func (v *Context) Restore() {
	func() { _cgo0 := /*line :92:18*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :92:29*/_Cfunc_cairo_restore(_cgo0); }()
}

// GetTarget is a wrapper around cairo_get_target().
func (v *Context) GetTarget() *Surface {
	c := func() *_Ctype_struct__cairo_surface{ _cgo0 := /*line :97:26*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :97:37*/_Cfunc_cairo_get_target(_cgo0); }()
	s := wrapSurface(c)
	s.reference()
	runtime.SetFinalizer(s, func(v *Surface) { glib.FinalizerStrategy(v.destroy) })
	return s
}

// PushGroup is a wrapper around cairo_push_group().
func (v *Context) PushGroup() {
	func() { _cgo0 := /*line :106:21*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :106:32*/_Cfunc_cairo_push_group(_cgo0); }()
}

// PushGroupWithContent is a wrapper around cairo_push_group_with_content().
func (v *Context) PushGroupWithContent(content Content) {
	func() { _cgo0 := /*line :111:34*/v.native(); var _cgo1 _Ctype_cairo_content_t = _Ctype_cairo_content_t /*line :111:63*/(content); _cgoCheckPointer(_cgo0, nil); /*line :111:73*/_Cfunc_cairo_push_group_with_content(_cgo0, _cgo1); }()
}

// TODO(jrick) PopGroup (depends on Pattern)
// cairo_pop_group

// PopGroupToSource is a wrapper around cairo_pop_group_to_source().
func (v *Context) PopGroupToSource() {
	func() { _cgo0 := /*line :119:30*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :119:41*/_Cfunc_cairo_pop_group_to_source(_cgo0); }()
}

// GetGroupTarget is a wrapper around cairo_get_group_target().
func (v *Context) GetGroupTarget() *Surface {
	c := func() *_Ctype_struct__cairo_surface{ _cgo0 := /*line :124:32*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :124:43*/_Cfunc_cairo_get_group_target(_cgo0); }()
	s := wrapSurface(c)
	s.reference()
	runtime.SetFinalizer(s, func(v *Surface) { glib.FinalizerStrategy(v.destroy) })
	return s
}

// SetSource is a wrapper around cairo_set_source().
func (v *Context) SetSource(p *Pattern) {
	func() { _cgo0 := /*line :133:21*/v.native(); _cgo1 := /*line :133:33*/p.native(); _cgoCheckPointer(_cgo0, nil); _cgoCheckPointer(_cgo1, nil); /*line :133:44*/_Cfunc_cairo_set_source(_cgo0, _cgo1); }()
}

// SetSourceRGB is a wrapper around cairo_set_source_rgb().
func (v *Context) SetSourceRGB(red, green, blue float64) {
	func() { _cgo0 := /*line :138:25*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :138:45*/(red); var _cgo2 _Ctype_double = _Ctype_double /*line :138:60*/(green); var _cgo3 _Ctype_double = _Ctype_double /*line :139:11*/(blue); _cgoCheckPointer(_cgo0, nil); /*line :139:18*/_Cfunc_cairo_set_source_rgb(_cgo0, _cgo1, _cgo2, _cgo3); }()
}

// SetSourceRGBA is a wrapper around cairo_set_source_rgba().
func (v *Context) SetSourceRGBA(red, green, blue, alpha float64) {
	func() { _cgo0 := /*line :144:26*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :144:46*/(red); var _cgo2 _Ctype_double = _Ctype_double /*line :144:61*/(green); var _cgo3 _Ctype_double = _Ctype_double /*line :145:11*/(blue); var _cgo4 _Ctype_double = _Ctype_double /*line :145:27*/(alpha); _cgoCheckPointer(_cgo0, nil); /*line :145:35*/_Cfunc_cairo_set_source_rgba(_cgo0, _cgo1, _cgo2, _cgo3, _cgo4); }()
}

// TODO(jrick) SetSource (depends on Pattern)
// cairo_set_source

// SetSourceSurface is a wrapper around cairo_set_source_surface().
func (v *Context) SetSourceSurface(surface *Surface, x, y float64) {
	func() { _cgo0 := /*line :153:29*/v.native(); _cgo1 := /*line :153:41*/surface.native(); var _cgo2 _Ctype_double = _Ctype_double /*line :153:67*/(x); var _cgo3 _Ctype_double = _Ctype_double /*line :154:11*/(y); _cgoCheckPointer(_cgo0, nil); _cgoCheckPointer(_cgo1, nil); /*line :154:15*/_Cfunc_cairo_set_source_surface(_cgo0, _cgo1, _cgo2, _cgo3); }()
}

// TODO(jrick) GetSource (depends on Pattern)
// cairo_get_source

// SetAntialias is a wrapper around cairo_set_antialias().
func (v *Context) SetAntialias(antialias Antialias) {
	func() { _cgo0 := /*line :162:24*/v.native(); var _cgo1 _Ctype_cairo_antialias_t = _Ctype_cairo_antialias_t /*line :162:55*/(antialias); _cgoCheckPointer(_cgo0, nil); /*line :162:67*/_Cfunc_cairo_set_antialias(_cgo0, _cgo1); }()
}

// GetAntialias is a wrapper around cairo_get_antialias().
func (v *Context) GetAntialias() Antialias {
	c := func() _Ctype_cairo_antialias_t{ _cgo0 := /*line :167:29*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :167:40*/_Cfunc_cairo_get_antialias(_cgo0); }()
	return Antialias(c)
}

// SetDash is a wrapper around cairo_set_dash().
func (v *Context) SetDash(dashes []float64, offset float64) {
	header := (*reflect.SliceHeader)(unsafe.Pointer(&dashes))
	cdashes := (* /*line :174:15*/_Ctype_double /*line :174:23*/)(unsafe.Pointer(header.Data))
	func() { _cgo0 := /*line :175:19*/v.native(); var _cgo1 *_Ctype_double = /*line :175:31*/cdashes; var _cgo2 _Ctype_int = _Ctype_int /*line :175:45*/(header.Len); var _cgo3 _Ctype_double = _Ctype_double /*line :176:11*/(offset); _cgoCheckPointer(_cgo0, nil); /*line :176:20*/_Cfunc_cairo_set_dash(_cgo0, _cgo1, _cgo2, _cgo3); }()
}

// GetDashCount is a wrapper around cairo_get_dash_count().
func (v *Context) GetDashCount() int {
	c := func() _Ctype_int{ _cgo0 := /*line :181:30*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :181:41*/_Cfunc_cairo_get_dash_count(_cgo0); }()
	return int(c)
}

// GetDash is a wrapper around cairo_get_dash().
func (v *Context) GetDash() (dashes []float64, offset float64) {
	dashCount := v.GetDashCount()
	cdashes := (* /*line :188:15*/_Ctype_double /*line :188:23*/)(( /*line :188:25*/_Cfunc_calloc /*line :188:32*/)(8,  /*line :188:37*/_Ctype_size_t /*line :188:45*/(dashCount)))
	var coffset  /*line :189:14*/_Ctype_double /*line :189:22*/
	func() { _cgo0 := /*line :190:19*/v.native(); var _cgo1 *_Ctype_double = /*line :190:31*/cdashes; var _cgo2 *_Ctype_double = /*line :190:40*/&coffset; _cgoCheckPointer(_cgo0, nil); /*line :190:49*/_Cfunc_cairo_get_dash(_cgo0, _cgo1, _cgo2); }()
	header := (*reflect.SliceHeader)((unsafe.Pointer(&dashes)))
	header.Data = uintptr(unsafe.Pointer(cdashes))
	header.Len = dashCount
	header.Cap = dashCount
	return dashes, float64(coffset)
}

// SetFillRule is a wrapper around cairo_set_fill_rule().
func (v *Context) SetFillRule(fillRule FillRule) {
	func() { _cgo0 := /*line :200:24*/v.native(); var _cgo1 _Ctype_cairo_fill_rule_t = _Ctype_cairo_fill_rule_t /*line :200:55*/(fillRule); _cgoCheckPointer(_cgo0, nil); /*line :200:66*/_Cfunc_cairo_set_fill_rule(_cgo0, _cgo1); }()
}

// GetFillRule is a wrapper around cairo_get_fill_rule().
func (v *Context) GetFillRule() FillRule {
	c := func() _Ctype_cairo_fill_rule_t{ _cgo0 := /*line :205:29*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :205:40*/_Cfunc_cairo_get_fill_rule(_cgo0); }()
	return FillRule(c)
}

// SetLineCap is a wrapper around cairo_set_line_cap().
func (v *Context) SetLineCap(lineCap LineCap) {
	func() { _cgo0 := /*line :211:23*/v.native(); var _cgo1 _Ctype_cairo_line_cap_t = _Ctype_cairo_line_cap_t /*line :211:53*/(lineCap); _cgoCheckPointer(_cgo0, nil); /*line :211:63*/_Cfunc_cairo_set_line_cap(_cgo0, _cgo1); }()
}

// GetLineCap is a wrapper around cairo_get_line_cap().
func (v *Context) GetLineCap() LineCap {
	c := func() _Ctype_cairo_line_cap_t{ _cgo0 := /*line :216:28*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :216:39*/_Cfunc_cairo_get_line_cap(_cgo0); }()
	return LineCap(c)
}

// SetLineJoin is a wrapper around cairo_set_line_join().
func (v *Context) SetLineJoin(lineJoin LineJoin) {
	func() { _cgo0 := /*line :222:24*/v.native(); var _cgo1 _Ctype_cairo_line_join_t = _Ctype_cairo_line_join_t /*line :222:55*/(lineJoin); _cgoCheckPointer(_cgo0, nil); /*line :222:66*/_Cfunc_cairo_set_line_join(_cgo0, _cgo1); }()
}

// GetLineJoin is a wrapper around cairo_get_line_join().
func (v *Context) GetLineJoin() LineJoin {
	c := func() _Ctype_cairo_line_join_t{ _cgo0 := /*line :227:29*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :227:40*/_Cfunc_cairo_get_line_join(_cgo0); }()
	return LineJoin(c)
}

// SetLineWidth is a wrapper around cairo_set_line_width().
func (v *Context) SetLineWidth(width float64) {
	func() { _cgo0 := /*line :233:25*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :233:45*/(width); _cgoCheckPointer(_cgo0, nil); /*line :233:53*/_Cfunc_cairo_set_line_width(_cgo0, _cgo1); }()
}

// GetLineWidth is a wrapper cairo_get_line_width().
func (v *Context) GetLineWidth() float64 {
	c := func() _Ctype_double{ _cgo0 := /*line :238:30*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :238:41*/_Cfunc_cairo_get_line_width(_cgo0); }()
	return float64(c)
}

// SetMiterLimit is a wrapper around cairo_set_miter_limit().
func (v *Context) SetMiterLimit(limit float64) {
	func() { _cgo0 := /*line :244:26*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :244:46*/(limit); _cgoCheckPointer(_cgo0, nil); /*line :244:54*/_Cfunc_cairo_set_miter_limit(_cgo0, _cgo1); }()
}

// GetMiterLimit is a wrapper around cairo_get_miter_limit().
func (v *Context) GetMiterLimit() float64 {
	c := func() _Ctype_double{ _cgo0 := /*line :249:31*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :249:42*/_Cfunc_cairo_get_miter_limit(_cgo0); }()
	return float64(c)
}

// SetOperator is a wrapper around cairo_set_operator().
func (v *Context) SetOperator(op Operator) {
	func() { _cgo0 := /*line :255:23*/v.native(); var _cgo1 _Ctype_cairo_operator_t = _Ctype_cairo_operator_t /*line :255:53*/(op); _cgoCheckPointer(_cgo0, nil); /*line :255:58*/_Cfunc_cairo_set_operator(_cgo0, _cgo1); }()
}

// GetOperator is a wrapper around cairo_get_operator().
func (v *Context) GetOperator() Operator {
	c := func() _Ctype_cairo_operator_t{ _cgo0 := /*line :260:28*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :260:39*/_Cfunc_cairo_get_operator(_cgo0); }()
	return Operator(c)
}

// SetTolerance is a wrapper around cairo_set_tolerance().
func (v *Context) SetTolerance(tolerance float64) {
	func() { _cgo0 := /*line :266:24*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :266:44*/(tolerance); _cgoCheckPointer(_cgo0, nil); /*line :266:56*/_Cfunc_cairo_set_tolerance(_cgo0, _cgo1); }()
}

// GetTolerance is a wrapper around cairo_get_tolerance().
func (v *Context) GetTolerance() float64 {
	c := func() _Ctype_double{ _cgo0 := /*line :271:29*/v.native(); _cgoCheckPointer(_cgo0, nil); return /*line :271:40*/_Cfunc_cairo_get_tolerance(_cgo0); }()
	return float64(c)
}

// Clip is a wrapper around cairo_clip().
func (v *Context) Clip() {
	func() { _cgo0 := /*line :277:15*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :277:26*/_Cfunc_cairo_clip(_cgo0); }()
}

// ClipPreserve is a wrapper around cairo_clip_preserve().
func (v *Context) ClipPreserve() {
	func() { _cgo0 := /*line :282:24*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :282:35*/_Cfunc_cairo_clip_preserve(_cgo0); }()
}

// ClipExtents is a wrapper around cairo_clip_extents().
func (v *Context) ClipExtents() (x1, y1, x2, y2 float64) {
	var cx1, cy1, cx2, cy2  /*line :287:25*/_Ctype_double /*line :287:33*/
	func() { _cgo0 := /*line :288:23*/v.native(); var _cgo1 *_Ctype_double = /*line :288:35*/&cx1; var _cgo2 *_Ctype_double = /*line :288:41*/&cy1; var _cgo3 *_Ctype_double = /*line :288:47*/&cx2; var _cgo4 *_Ctype_double = /*line :288:53*/&cy2; _cgoCheckPointer(_cgo0, nil); /*line :288:58*/_Cfunc_cairo_clip_extents(_cgo0, _cgo1, _cgo2, _cgo3, _cgo4); }()
	return float64(cx1), float64(cy1), float64(cx2), float64(cy2)
}

// InClip is a wrapper around cairo_in_clip().
func (v *Context) InClip(x, y float64) bool {
	c := func() _Ctype_cairo_bool_t{ _cgo0 := /*line :294:23*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :294:43*/(x); var _cgo2 _Ctype_double = _Ctype_double /*line :294:56*/(y); _cgoCheckPointer(_cgo0, nil); return /*line :294:60*/_Cfunc_cairo_in_clip(_cgo0, _cgo1, _cgo2); }()
	return gobool(c)
}

// ResetClip is a wrapper around cairo_reset_clip().
func (v *Context) ResetClip() {
	func() { _cgo0 := /*line :300:21*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :300:32*/_Cfunc_cairo_reset_clip(_cgo0); }()
}

// Rectangle is a wrapper around cairo_rectangle().
func (v *Context) Rectangle(x, y, w, h float64) {
	func() { _cgo0 := /*line :305:20*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :305:40*/(x); var _cgo2 _Ctype_double = _Ctype_double /*line :305:53*/(y); var _cgo3 _Ctype_double = _Ctype_double /*line :305:66*/(w); var _cgo4 _Ctype_double = _Ctype_double /*line :305:79*/(h); _cgoCheckPointer(_cgo0, nil); /*line :305:83*/_Cfunc_cairo_rectangle(_cgo0, _cgo1, _cgo2, _cgo3, _cgo4); }()
}

// Arc is a wrapper around cairo_arc().
func (v *Context) Arc(xc, yc, radius, angle1, angle2 float64) {
	func() { _cgo0 := /*line :310:14*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :310:34*/(xc); var _cgo2 _Ctype_double = _Ctype_double /*line :310:48*/(yc); var _cgo3 _Ctype_double = _Ctype_double /*line :310:62*/(radius); var _cgo4 _Ctype_double = _Ctype_double /*line :310:80*/(angle1); var _cgo5 _Ctype_double = _Ctype_double /*line :310:98*/(angle2); _cgoCheckPointer(_cgo0, nil); /*line :310:107*/_Cfunc_cairo_arc(_cgo0, _cgo1, _cgo2, _cgo3, _cgo4, _cgo5); }()
}

// ArcNegative is a wrapper around cairo_arc_negative().
func (v *Context) ArcNegative(xc, yc, radius, angle1, angle2 float64) {
	func() { _cgo0 := /*line :315:23*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :315:43*/(xc); var _cgo2 _Ctype_double = _Ctype_double /*line :315:57*/(yc); var _cgo3 _Ctype_double = _Ctype_double /*line :315:71*/(radius); var _cgo4 _Ctype_double = _Ctype_double /*line :315:89*/(angle1); var _cgo5 _Ctype_double = _Ctype_double /*line :315:107*/(angle2); _cgoCheckPointer(_cgo0, nil); /*line :315:116*/_Cfunc_cairo_arc_negative(_cgo0, _cgo1, _cgo2, _cgo3, _cgo4, _cgo5); }()
}

// LineTo is a wrapper around cairo_line_to().
func (v *Context) LineTo(x, y float64) {
	func() { _cgo0 := /*line :320:18*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :320:38*/(x); var _cgo2 _Ctype_double = _Ctype_double /*line :320:51*/(y); _cgoCheckPointer(_cgo0, nil); /*line :320:55*/_Cfunc_cairo_line_to(_cgo0, _cgo1, _cgo2); }()
}

// CurveTo is a wrapper around cairo_curve_to().
func (v *Context) CurveTo(x1, y1, x2, y2, x3, y3 float64) {
	func() { _cgo0 := /*line :325:19*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :325:39*/(x1); var _cgo2 _Ctype_double = _Ctype_double /*line :325:53*/(y1); var _cgo3 _Ctype_double = _Ctype_double /*line :325:67*/(x2); var _cgo4 _Ctype_double = _Ctype_double /*line :325:81*/(y2); var _cgo5 _Ctype_double = _Ctype_double /*line :325:95*/(x3); var _cgo6 _Ctype_double = _Ctype_double /*line :325:109*/(y3); _cgoCheckPointer(_cgo0, nil); /*line :325:114*/_Cfunc_cairo_curve_to(_cgo0, _cgo1, _cgo2, _cgo3, _cgo4, _cgo5, _cgo6); }()
}

// MoveTo is a wrapper around cairo_move_to().
func (v *Context) MoveTo(x, y float64) {
	func() { _cgo0 := /*line :330:18*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :330:38*/(x); var _cgo2 _Ctype_double = _Ctype_double /*line :330:51*/(y); _cgoCheckPointer(_cgo0, nil); /*line :330:55*/_Cfunc_cairo_move_to(_cgo0, _cgo1, _cgo2); }()
}

// TODO(jrick) CopyClipRectangleList (depends on RectangleList)
// cairo_copy_clip_rectangle_list

// Fill is a wrapper around cairo_fill().
func (v *Context) Fill() {
	func() { _cgo0 := /*line :338:15*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :338:26*/_Cfunc_cairo_fill(_cgo0); }()
}

// ClosePath is a wrapper around cairo_close_path().
func (v *Context) ClosePath() {
	func() { _cgo0 := /*line :343:21*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :343:32*/_Cfunc_cairo_close_path(_cgo0); }()
}

// NewPath is a wrapper around cairo_new_path().
func (v *Context) NewPath() {
	func() { _cgo0 := /*line :348:19*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :348:30*/_Cfunc_cairo_new_path(_cgo0); }()
}

// GetCurrentPoint is a wrapper around cairo_get_current_point().
func (v *Context) GetCurrentPoint() (x, y float64) {
	func() { _cgo0 := /*line :353:28*/v.native(); var _cgo1 *_Ctype_double = /*line :353:40*/(*_Ctype_double /*line :353:50*/)(&x); var _cgo2 *_Ctype_double = /*line :353:57*/(*_Ctype_double /*line :353:67*/)(&y); _cgoCheckPointer(_cgo0, nil); /*line :353:73*/_Cfunc_cairo_get_current_point(_cgo0, _cgo1, _cgo2); }()
	return
}

// FillPreserve is a wrapper around cairo_fill_preserve().
func (v *Context) FillPreserve() {
	func() { _cgo0 := /*line :359:24*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :359:35*/_Cfunc_cairo_fill_preserve(_cgo0); }()
}

// FillExtents is a wrapper around cairo_fill_extents().
func (v *Context) FillExtents() (x1, y1, x2, y2 float64) {
	var cx1, cy1, cx2, cy2  /*line :364:25*/_Ctype_double /*line :364:33*/
	func() { _cgo0 := /*line :365:23*/v.native(); var _cgo1 *_Ctype_double = /*line :365:35*/&cx1; var _cgo2 *_Ctype_double = /*line :365:41*/&cy1; var _cgo3 *_Ctype_double = /*line :365:47*/&cx2; var _cgo4 *_Ctype_double = /*line :365:53*/&cy2; _cgoCheckPointer(_cgo0, nil); /*line :365:58*/_Cfunc_cairo_fill_extents(_cgo0, _cgo1, _cgo2, _cgo3, _cgo4); }()
	return float64(cx1), float64(cy1), float64(cx2), float64(cy2)
}

// InFill is a wrapper around cairo_in_fill().
func (v *Context) InFill(x, y float64) bool {
	c := func() _Ctype_cairo_bool_t{ _cgo0 := /*line :371:23*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :371:43*/(x); var _cgo2 _Ctype_double = _Ctype_double /*line :371:56*/(y); _cgoCheckPointer(_cgo0, nil); return /*line :371:60*/_Cfunc_cairo_in_fill(_cgo0, _cgo1, _cgo2); }()
	return gobool(c)
}

// TODO(jrick) Mask (depends on Pattern)
// cairo_mask_surface

// MaskSurface is a wrapper around cairo_mask_surface().
func (v *Context) MaskSurface(surface *Surface, surfaceX, surfaceY float64) {
	func() { _cgo0 := /*line :380:23*/v.native(); _cgo1 := /*line :380:35*/surface.native(); var _cgo2 _Ctype_double = _Ctype_double /*line :380:61*/(surfaceX); var _cgo3 _Ctype_double = _Ctype_double /*line :381:11*/(surfaceY); _cgoCheckPointer(_cgo0, nil); _cgoCheckPointer(_cgo1, nil); /*line :381:22*/_Cfunc_cairo_mask_surface(_cgo0, _cgo1, _cgo2, _cgo3); }()
}

// Paint is a wrapper around cairo_paint().
func (v *Context) Paint() {
	func() { _cgo0 := /*line :386:16*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :386:27*/_Cfunc_cairo_paint(_cgo0); }()
}

// PaintWithAlpha is a wrapper around cairo_paint_with_alpha().
func (v *Context) PaintWithAlpha(alpha float64) {
	func() { _cgo0 := /*line :391:27*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :391:47*/(alpha); _cgoCheckPointer(_cgo0, nil); /*line :391:55*/_Cfunc_cairo_paint_with_alpha(_cgo0, _cgo1); }()
}

// Stroke is a wrapper around cairo_stroke().
func (v *Context) Stroke() {
	func() { _cgo0 := /*line :396:17*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :396:28*/_Cfunc_cairo_stroke(_cgo0); }()
}

// StrokePreserve is a wrapper around cairo_stroke_preserve().
func (v *Context) StrokePreserve() {
	func() { _cgo0 := /*line :401:26*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :401:37*/_Cfunc_cairo_stroke_preserve(_cgo0); }()
}

// StrokeExtents is a wrapper around cairo_stroke_extents().
func (v *Context) StrokeExtents() (x1, y1, x2, y2 float64) {
	var cx1, cy1, cx2, cy2  /*line :406:25*/_Ctype_double /*line :406:33*/
	func() { _cgo0 := /*line :407:25*/v.native(); var _cgo1 *_Ctype_double = /*line :407:37*/&cx1; var _cgo2 *_Ctype_double = /*line :407:43*/&cy1; var _cgo3 *_Ctype_double = /*line :407:49*/&cx2; var _cgo4 *_Ctype_double = /*line :407:55*/&cy2; _cgoCheckPointer(_cgo0, nil); /*line :407:60*/_Cfunc_cairo_stroke_extents(_cgo0, _cgo1, _cgo2, _cgo3, _cgo4); }()
	return float64(cx1), float64(cy1), float64(cx2), float64(cy2)
}

// InStroke is a wrapper around cairo_in_stroke().
func (v *Context) InStroke(x, y float64) bool {
	c := func() _Ctype_cairo_bool_t{ _cgo0 := /*line :413:25*/v.native(); var _cgo1 _Ctype_double = _Ctype_double /*line :413:45*/(x); var _cgo2 _Ctype_double = _Ctype_double /*line :413:58*/(y); _cgoCheckPointer(_cgo0, nil); return /*line :413:62*/_Cfunc_cairo_in_stroke(_cgo0, _cgo1, _cgo2); }()
	return gobool(c)
}

// CopyPage is a wrapper around cairo_copy_page().
func (v *Context) CopyPage() {
	func() { _cgo0 := /*line :419:20*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :419:31*/_Cfunc_cairo_copy_page(_cgo0); }()
}

// ShowPage is a wrapper around cairo_show_page().
func (v *Context) ShowPage() {
	func() { _cgo0 := /*line :424:20*/v.native(); _cgoCheckPointer(_cgo0, nil); /*line :424:31*/_Cfunc_cairo_show_page(_cgo0); }()
}
