1// Copyright 2015 Google Inc. All Rights Reserved. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15// Autogenerated by gen.go, do not edit. 16 17package cairo 18 19import ( 20 "fmt" 21 "io" 22 "runtime" 23 "unsafe" 24) 25 26/* 27#cgo pkg-config: cairo 28#include <cairo.h> 29#if CAIRO_HAS_SVG_SURFACE 30#include <cairo-svg.h> 31#endif 32#if CAIRO_HAS_XLIB_SURFACE 33#include <cairo-xlib.h> 34#endif 35#include <stdlib.h> 36 37int gocairoWriteFunc(int key, const unsigned char* data, unsigned int length); 38int gocairoReadFunc(int key, const unsigned char* data, unsigned int length); 39 40// A cairo_write_func_t for use in cairo_surface_write_to_png. 41cairo_status_t gocairo_write_func(void *closure, 42 const unsigned char *data, 43 unsigned int length) { 44 return gocairoWriteFunc(*(int*)closure, data, length) 45 ? CAIRO_STATUS_SUCCESS 46 : CAIRO_STATUS_WRITE_ERROR; 47} 48 49// A cairo_read_func_t for use in cairo_image_surface_create_from_png_stream. 50cairo_status_t gocairo_read_func(void *closure, 51 const unsigned char *data, 52 unsigned int length) { 53 return gocairoReadFunc(*(int*)closure, data, length) 54 ? CAIRO_STATUS_SUCCESS 55 : CAIRO_STATUS_WRITE_ERROR; 56} 57*/ 58import "C" 59 60// Error implements the error interface. 61func (s Status) Error() string { 62 return C.GoString(C.cairo_status_to_string(C.cairo_status_t(s))) 63} 64 65// WriteToPNG encodes a Surface to an io.Writer as a PNG file. 66func (surface *Surface) WriteToPNG(w io.Writer) error { 67 data := writeClosure{w: w} 68 key := goPointers.put(data) 69 status := C.cairo_surface_write_to_png_stream((*C.cairo_surface_t)(surface.Ptr), 70 (C.cairo_write_func_t)(unsafe.Pointer(C.gocairo_write_func)), 71 unsafe.Pointer(&key)) 72 goPointers.clear(key) 73 // TODO: which should we prefer between writeClosure.err and status? 74 // Perhaps test against CAIRO_STATUS_WRITE_ERROR? Needs a test case. 75 return Status(status).toError() 76} 77 78// ImageSurfaceCreateFromPNGStream creates an ImageSurface from a stream of 79// PNG data. 80func ImageSurfaceCreateFromPNGStream(r io.Reader) (*ImageSurface, error) { 81 data := readClosure{r: r} 82 key := goPointers.put(data) 83 surf := &ImageSurface{wrapSurface(C.cairo_image_surface_create_from_png_stream( 84 (C.cairo_read_func_t)(unsafe.Pointer(C.gocairo_read_func)), 85 unsafe.Pointer(&key)))} 86 goPointers.clear(key) 87 // TODO: which should we prefer between readClosure.err and status? 88 // Perhaps test against CAIRO_STATUS_WRITE_ERROR? Needs a test case. 89 return surf, surf.status() 90} 91 92// PathIter creates an iterator over the segments within the path. 93func (p *Path) Iter() *PathIter { 94 return &PathIter{path: p, i: 0} 95} 96 97// PathIter iterates a Path. 98type PathIter struct { 99 path *Path 100 i C.int 101} 102 103// Next returns the next PathSegment, or returns nil at the end of the path. 104func (pi *PathIter) Next() *PathSegment { 105 if pi.i >= pi.path.Ptr.num_data { 106 return nil 107 } 108 // path.data is an array of cairo_path_data_t, but the union makes 109 // things complicated. 110 dataArray := (*[1 << 30]C.cairo_path_data_t)(unsafe.Pointer(pi.path.Ptr.data)) 111 seg, ofs := decodePathSegment(unsafe.Pointer(&dataArray[pi.i])) 112 pi.i += C.int(ofs) 113 return seg 114} 115 116type ImageSurface struct { 117 *Surface 118} 119type RecordingSurface struct { 120 *Surface 121} 122type SurfaceObserver struct { 123 *Surface 124} 125type ToyFontFace struct { 126 *FontFace 127} 128type MeshPattern struct { 129 *Pattern 130} 131type SVGSurface struct { 132 *Surface 133} 134type XlibSurface struct { 135 *Surface 136} 137type XlibDevice struct { 138 *Device 139} 140 141// See cairo_version(). 142// 143// C API documentation: http://cairographics.org/manual/cairo-Version-Information.html#cairo-version 144func Version() int { 145 ret := int(C.cairo_version()) 146 return ret 147} 148 149// See cairo_version_string(). 150// 151// C API documentation: http://cairographics.org/manual/cairo-Version-Information.html#cairo-version-string 152func VersionString() string { 153 ret := C.GoString(C.cairo_version_string()) 154 return ret 155} 156 157// See cairo_t. 158// 159// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-t 160type Context struct { 161 Ptr *C.cairo_t 162} 163 164func freeContext(obj *Context) { 165 C.cairo_destroy(obj.Ptr) 166} 167func wrapContext(p *C.cairo_t) *Context { 168 ret := &Context{p} 169 runtime.SetFinalizer(ret, freeContext) 170 return ret 171} 172 173// Wrap a C cairo_t* found from some external source as a *Context. The Go side will destroy the reference when it's no longer used. 174func WrapContext(p unsafe.Pointer) *Context { 175 return wrapContext((*C.cairo_t)(p)) 176} 177 178// Construct a Context from a C cairo_t* found from some exernal source. It is the caller's responsibility to ensure the pointer lives. 179func BorrowContext(p unsafe.Pointer) *Context { 180 return &Context{(*C.cairo_t)(p)} 181} 182 183// See cairo_surface_t. 184// 185// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-t 186type Surface struct { 187 Ptr *C.cairo_surface_t 188} 189 190func freeSurface(obj *Surface) { 191 C.cairo_surface_destroy(obj.Ptr) 192} 193func wrapSurface(p *C.cairo_surface_t) *Surface { 194 ret := &Surface{p} 195 runtime.SetFinalizer(ret, freeSurface) 196 return ret 197} 198 199// Wrap a C cairo_surface_t* found from some external source as a *Surface. The Go side will destroy the reference when it's no longer used. 200func WrapSurface(p unsafe.Pointer) *Surface { 201 return wrapSurface((*C.cairo_surface_t)(p)) 202} 203 204// Construct a Surface from a C cairo_surface_t* found from some exernal source. It is the caller's responsibility to ensure the pointer lives. 205func BorrowSurface(p unsafe.Pointer) *Surface { 206 return &Surface{(*C.cairo_surface_t)(p)} 207} 208 209// See cairo_device_t. 210// 211// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-t 212type Device struct { 213 Ptr *C.cairo_device_t 214} 215 216func freeDevice(obj *Device) { 217 C.cairo_device_destroy(obj.Ptr) 218} 219func wrapDevice(p *C.cairo_device_t) *Device { 220 ret := &Device{p} 221 runtime.SetFinalizer(ret, freeDevice) 222 return ret 223} 224 225// Wrap a C cairo_device_t* found from some external source as a *Device. The Go side will destroy the reference when it's no longer used. 226func WrapDevice(p unsafe.Pointer) *Device { 227 return wrapDevice((*C.cairo_device_t)(p)) 228} 229 230// Construct a Device from a C cairo_device_t* found from some exernal source. It is the caller's responsibility to ensure the pointer lives. 231func BorrowDevice(p unsafe.Pointer) *Device { 232 return &Device{(*C.cairo_device_t)(p)} 233} 234 235// See cairo_matrix_t. 236// 237// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-t 238type Matrix struct { 239 Xx float64 240 Yx float64 241 Xy float64 242 Yy float64 243 X0 float64 244 Y0 float64 245} 246 247// See cairo_pattern_t. 248// 249// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-t 250type Pattern struct { 251 Ptr *C.cairo_pattern_t 252} 253 254func freePattern(obj *Pattern) { 255 C.cairo_pattern_destroy(obj.Ptr) 256} 257func wrapPattern(p *C.cairo_pattern_t) *Pattern { 258 ret := &Pattern{p} 259 runtime.SetFinalizer(ret, freePattern) 260 return ret 261} 262 263// Wrap a C cairo_pattern_t* found from some external source as a *Pattern. The Go side will destroy the reference when it's no longer used. 264func WrapPattern(p unsafe.Pointer) *Pattern { 265 return wrapPattern((*C.cairo_pattern_t)(p)) 266} 267 268// Construct a Pattern from a C cairo_pattern_t* found from some exernal source. It is the caller's responsibility to ensure the pointer lives. 269func BorrowPattern(p unsafe.Pointer) *Pattern { 270 return &Pattern{(*C.cairo_pattern_t)(p)} 271} 272 273// See cairo_status_t. 274// 275// C API documentation: http://cairographics.org/manual/cairo-Error-handling.html#cairo-status-t 276type Status int 277 278const ( 279 StatusSuccess Status = C.CAIRO_STATUS_SUCCESS 280 StatusNoMemory Status = C.CAIRO_STATUS_NO_MEMORY 281 StatusInvalidRestore Status = C.CAIRO_STATUS_INVALID_RESTORE 282 StatusInvalidPopGroup Status = C.CAIRO_STATUS_INVALID_POP_GROUP 283 StatusNoCurrentPoint Status = C.CAIRO_STATUS_NO_CURRENT_POINT 284 StatusInvalidMatrix Status = C.CAIRO_STATUS_INVALID_MATRIX 285 StatusInvalidStatus Status = C.CAIRO_STATUS_INVALID_STATUS 286 StatusNullPointer Status = C.CAIRO_STATUS_NULL_POINTER 287 StatusInvalidString Status = C.CAIRO_STATUS_INVALID_STRING 288 StatusInvalidPathData Status = C.CAIRO_STATUS_INVALID_PATH_DATA 289 StatusReadError Status = C.CAIRO_STATUS_READ_ERROR 290 StatusWriteError Status = C.CAIRO_STATUS_WRITE_ERROR 291 StatusSurfaceFinished Status = C.CAIRO_STATUS_SURFACE_FINISHED 292 StatusSurfaceTypeMismatch Status = C.CAIRO_STATUS_SURFACE_TYPE_MISMATCH 293 StatusPatternTypeMismatch Status = C.CAIRO_STATUS_PATTERN_TYPE_MISMATCH 294 StatusInvalidContent Status = C.CAIRO_STATUS_INVALID_CONTENT 295 StatusInvalidFormat Status = C.CAIRO_STATUS_INVALID_FORMAT 296 StatusInvalidVisual Status = C.CAIRO_STATUS_INVALID_VISUAL 297 StatusFileNotFound Status = C.CAIRO_STATUS_FILE_NOT_FOUND 298 StatusInvalidDash Status = C.CAIRO_STATUS_INVALID_DASH 299 StatusInvalidDscComment Status = C.CAIRO_STATUS_INVALID_DSC_COMMENT 300 StatusInvalidIndex Status = C.CAIRO_STATUS_INVALID_INDEX 301 StatusClipNotRepresentable Status = C.CAIRO_STATUS_CLIP_NOT_REPRESENTABLE 302 StatusTempFileError Status = C.CAIRO_STATUS_TEMP_FILE_ERROR 303 StatusInvalidStride Status = C.CAIRO_STATUS_INVALID_STRIDE 304 StatusFontTypeMismatch Status = C.CAIRO_STATUS_FONT_TYPE_MISMATCH 305 StatusUserFontImmutable Status = C.CAIRO_STATUS_USER_FONT_IMMUTABLE 306 StatusUserFontError Status = C.CAIRO_STATUS_USER_FONT_ERROR 307 StatusNegativeCount Status = C.CAIRO_STATUS_NEGATIVE_COUNT 308 StatusInvalidClusters Status = C.CAIRO_STATUS_INVALID_CLUSTERS 309 StatusInvalidSlant Status = C.CAIRO_STATUS_INVALID_SLANT 310 StatusInvalidWeight Status = C.CAIRO_STATUS_INVALID_WEIGHT 311 StatusInvalidSize Status = C.CAIRO_STATUS_INVALID_SIZE 312 StatusUserFontNotImplemented Status = C.CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED 313 StatusDeviceTypeMismatch Status = C.CAIRO_STATUS_DEVICE_TYPE_MISMATCH 314 StatusDeviceError Status = C.CAIRO_STATUS_DEVICE_ERROR 315 StatusInvalidMeshConstruction Status = C.CAIRO_STATUS_INVALID_MESH_CONSTRUCTION 316 StatusDeviceFinished Status = C.CAIRO_STATUS_DEVICE_FINISHED 317 StatusJbig2GlobalMissing Status = C.CAIRO_STATUS_JBIG2_GLOBAL_MISSING 318 StatusLastStatus Status = C.CAIRO_STATUS_LAST_STATUS 319) 320 321// See cairo_content_t. 322// 323// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-content-t 324type Content int 325 326const ( 327 ContentColor Content = C.CAIRO_CONTENT_COLOR 328 ContentAlpha Content = C.CAIRO_CONTENT_ALPHA 329 ContentColorAlpha Content = C.CAIRO_CONTENT_COLOR_ALPHA 330) 331 332// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 333func (i Content) String() string { 334 switch i { 335 case ContentColor: 336 return "ContentColor" 337 case ContentAlpha: 338 return "ContentAlpha" 339 case ContentColorAlpha: 340 return "ContentColorAlpha" 341 default: 342 return fmt.Sprintf("Content(%d)", i) 343 } 344} 345 346// See cairo_format_t. 347// 348// C API documentation: http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-format-t 349type Format int 350 351const ( 352 FormatInvalid Format = C.CAIRO_FORMAT_INVALID 353 FormatARGB32 Format = C.CAIRO_FORMAT_ARGB32 354 FormatRGB24 Format = C.CAIRO_FORMAT_RGB24 355 FormatA8 Format = C.CAIRO_FORMAT_A8 356 FormatA1 Format = C.CAIRO_FORMAT_A1 357 FormatRGB16565 Format = C.CAIRO_FORMAT_RGB16_565 358 FormatRGB30 Format = C.CAIRO_FORMAT_RGB30 359) 360 361// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 362func (i Format) String() string { 363 switch i { 364 case FormatInvalid: 365 return "FormatInvalid" 366 case FormatARGB32: 367 return "FormatARGB32" 368 case FormatRGB24: 369 return "FormatRGB24" 370 case FormatA8: 371 return "FormatA8" 372 case FormatA1: 373 return "FormatA1" 374 case FormatRGB16565: 375 return "FormatRGB16565" 376 case FormatRGB30: 377 return "FormatRGB30" 378 default: 379 return fmt.Sprintf("Format(%d)", i) 380 } 381} 382 383// See cairo_create(). 384// 385// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-create 386func Create(target *Surface) *Context { 387 ret := wrapContext(C.cairo_create(target.Ptr)) 388 if err := ret.status(); err != nil { 389 panic(err) 390 } 391 return ret 392} 393 394// See cairo_save(). 395// 396// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-save 397func (cr *Context) Save() { 398 C.cairo_save(cr.Ptr) 399 if err := cr.status(); err != nil { 400 panic(err) 401 } 402} 403 404// See cairo_restore(). 405// 406// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-restore 407func (cr *Context) Restore() { 408 C.cairo_restore(cr.Ptr) 409 if err := cr.status(); err != nil { 410 panic(err) 411 } 412} 413 414// See cairo_push_group(). 415// 416// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-push-group 417func (cr *Context) PushGroup() { 418 C.cairo_push_group(cr.Ptr) 419 if err := cr.status(); err != nil { 420 panic(err) 421 } 422} 423 424// See cairo_push_group_with_content(). 425// 426// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-push-group-with-content 427func (cr *Context) PushGroupWithContent(content Content) { 428 C.cairo_push_group_with_content(cr.Ptr, C.cairo_content_t(content)) 429 if err := cr.status(); err != nil { 430 panic(err) 431 } 432} 433 434// See cairo_pop_group(). 435// 436// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-pop-group 437func (cr *Context) PopGroup() *Pattern { 438 ret := wrapPattern(C.cairo_pop_group(cr.Ptr)) 439 if err := cr.status(); err != nil { 440 panic(err) 441 } 442 return ret 443} 444 445// See cairo_pop_group_to_source(). 446// 447// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-pop-group-to-source 448func (cr *Context) PopGroupToSource() { 449 C.cairo_pop_group_to_source(cr.Ptr) 450 if err := cr.status(); err != nil { 451 panic(err) 452 } 453} 454 455// See cairo_operator_t. 456// 457// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-operator-t 458type Operator int 459 460const ( 461 OperatorClear Operator = C.CAIRO_OPERATOR_CLEAR 462 OperatorSource Operator = C.CAIRO_OPERATOR_SOURCE 463 OperatorOver Operator = C.CAIRO_OPERATOR_OVER 464 OperatorIn Operator = C.CAIRO_OPERATOR_IN 465 OperatorOut Operator = C.CAIRO_OPERATOR_OUT 466 OperatorAtop Operator = C.CAIRO_OPERATOR_ATOP 467 OperatorDest Operator = C.CAIRO_OPERATOR_DEST 468 OperatorDestOver Operator = C.CAIRO_OPERATOR_DEST_OVER 469 OperatorDestIn Operator = C.CAIRO_OPERATOR_DEST_IN 470 OperatorDestOut Operator = C.CAIRO_OPERATOR_DEST_OUT 471 OperatorDestAtop Operator = C.CAIRO_OPERATOR_DEST_ATOP 472 OperatorXOR Operator = C.CAIRO_OPERATOR_XOR 473 OperatorAdd Operator = C.CAIRO_OPERATOR_ADD 474 OperatorSaturate Operator = C.CAIRO_OPERATOR_SATURATE 475 OperatorMultiply Operator = C.CAIRO_OPERATOR_MULTIPLY 476 OperatorScreen Operator = C.CAIRO_OPERATOR_SCREEN 477 OperatorOverlay Operator = C.CAIRO_OPERATOR_OVERLAY 478 OperatorDarken Operator = C.CAIRO_OPERATOR_DARKEN 479 OperatorLighten Operator = C.CAIRO_OPERATOR_LIGHTEN 480 OperatorColorDodge Operator = C.CAIRO_OPERATOR_COLOR_DODGE 481 OperatorColorBurn Operator = C.CAIRO_OPERATOR_COLOR_BURN 482 OperatorHardLight Operator = C.CAIRO_OPERATOR_HARD_LIGHT 483 OperatorSoftLight Operator = C.CAIRO_OPERATOR_SOFT_LIGHT 484 OperatorDifference Operator = C.CAIRO_OPERATOR_DIFFERENCE 485 OperatorExclusion Operator = C.CAIRO_OPERATOR_EXCLUSION 486 OperatorHslHue Operator = C.CAIRO_OPERATOR_HSL_HUE 487 OperatorHslSaturation Operator = C.CAIRO_OPERATOR_HSL_SATURATION 488 OperatorHslColor Operator = C.CAIRO_OPERATOR_HSL_COLOR 489 OperatorHslLuminosity Operator = C.CAIRO_OPERATOR_HSL_LUMINOSITY 490) 491 492// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 493func (i Operator) String() string { 494 switch i { 495 case OperatorClear: 496 return "OperatorClear" 497 case OperatorSource: 498 return "OperatorSource" 499 case OperatorOver: 500 return "OperatorOver" 501 case OperatorIn: 502 return "OperatorIn" 503 case OperatorOut: 504 return "OperatorOut" 505 case OperatorAtop: 506 return "OperatorAtop" 507 case OperatorDest: 508 return "OperatorDest" 509 case OperatorDestOver: 510 return "OperatorDestOver" 511 case OperatorDestIn: 512 return "OperatorDestIn" 513 case OperatorDestOut: 514 return "OperatorDestOut" 515 case OperatorDestAtop: 516 return "OperatorDestAtop" 517 case OperatorXOR: 518 return "OperatorXOR" 519 case OperatorAdd: 520 return "OperatorAdd" 521 case OperatorSaturate: 522 return "OperatorSaturate" 523 case OperatorMultiply: 524 return "OperatorMultiply" 525 case OperatorScreen: 526 return "OperatorScreen" 527 case OperatorOverlay: 528 return "OperatorOverlay" 529 case OperatorDarken: 530 return "OperatorDarken" 531 case OperatorLighten: 532 return "OperatorLighten" 533 case OperatorColorDodge: 534 return "OperatorColorDodge" 535 case OperatorColorBurn: 536 return "OperatorColorBurn" 537 case OperatorHardLight: 538 return "OperatorHardLight" 539 case OperatorSoftLight: 540 return "OperatorSoftLight" 541 case OperatorDifference: 542 return "OperatorDifference" 543 case OperatorExclusion: 544 return "OperatorExclusion" 545 case OperatorHslHue: 546 return "OperatorHslHue" 547 case OperatorHslSaturation: 548 return "OperatorHslSaturation" 549 case OperatorHslColor: 550 return "OperatorHslColor" 551 case OperatorHslLuminosity: 552 return "OperatorHslLuminosity" 553 default: 554 return fmt.Sprintf("Operator(%d)", i) 555 } 556} 557 558// See cairo_set_operator(). 559// 560// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-operator 561func (cr *Context) SetOperator(op Operator) { 562 C.cairo_set_operator(cr.Ptr, C.cairo_operator_t(op)) 563 if err := cr.status(); err != nil { 564 panic(err) 565 } 566} 567 568// See cairo_set_source(). 569// 570// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-source 571func (cr *Context) SetSource(source *Pattern) { 572 C.cairo_set_source(cr.Ptr, source.Ptr) 573 if err := cr.status(); err != nil { 574 panic(err) 575 } 576} 577 578// See cairo_set_source_rgb(). 579// 580// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-source-rgb 581func (cr *Context) SetSourceRGB(red, green, blue float64) { 582 C.cairo_set_source_rgb(cr.Ptr, C.double(red), C.double(green), C.double(blue)) 583 if err := cr.status(); err != nil { 584 panic(err) 585 } 586} 587 588// See cairo_set_source_rgba(). 589// 590// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-source-rgba 591func (cr *Context) SetSourceRGBA(red, green, blue, alpha float64) { 592 C.cairo_set_source_rgba(cr.Ptr, C.double(red), C.double(green), C.double(blue), C.double(alpha)) 593 if err := cr.status(); err != nil { 594 panic(err) 595 } 596} 597 598// See cairo_set_source_surface(). 599// 600// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-source-surface 601func (cr *Context) SetSourceSurface(surface *Surface, x, y float64) { 602 C.cairo_set_source_surface(cr.Ptr, surface.Ptr, C.double(x), C.double(y)) 603 if err := cr.status(); err != nil { 604 panic(err) 605 } 606} 607 608// See cairo_set_tolerance(). 609// 610// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-tolerance 611func (cr *Context) SetTolerance(tolerance float64) { 612 C.cairo_set_tolerance(cr.Ptr, C.double(tolerance)) 613 if err := cr.status(); err != nil { 614 panic(err) 615 } 616} 617 618// See cairo_antialias_t. 619// 620// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-antialias-t 621type Antialias int 622 623const ( 624 AntialiasDefault Antialias = C.CAIRO_ANTIALIAS_DEFAULT 625 AntialiasNone Antialias = C.CAIRO_ANTIALIAS_NONE 626 AntialiasGray Antialias = C.CAIRO_ANTIALIAS_GRAY 627 AntialiasSubpixel Antialias = C.CAIRO_ANTIALIAS_SUBPIXEL 628 AntialiasFast Antialias = C.CAIRO_ANTIALIAS_FAST 629 AntialiasGood Antialias = C.CAIRO_ANTIALIAS_GOOD 630 AntialiasBest Antialias = C.CAIRO_ANTIALIAS_BEST 631) 632 633// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 634func (i Antialias) String() string { 635 switch i { 636 case AntialiasDefault: 637 return "AntialiasDefault" 638 case AntialiasNone: 639 return "AntialiasNone" 640 case AntialiasGray: 641 return "AntialiasGray" 642 case AntialiasSubpixel: 643 return "AntialiasSubpixel" 644 case AntialiasFast: 645 return "AntialiasFast" 646 case AntialiasGood: 647 return "AntialiasGood" 648 case AntialiasBest: 649 return "AntialiasBest" 650 default: 651 return fmt.Sprintf("Antialias(%d)", i) 652 } 653} 654 655// See cairo_set_antialias(). 656// 657// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-antialias 658func (cr *Context) SetAntialias(antialias Antialias) { 659 C.cairo_set_antialias(cr.Ptr, C.cairo_antialias_t(antialias)) 660 if err := cr.status(); err != nil { 661 panic(err) 662 } 663} 664 665// See cairo_fill_rule_t. 666// 667// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill-rule-t 668type FillRule int 669 670const ( 671 FillRuleWinding FillRule = C.CAIRO_FILL_RULE_WINDING 672 FillRuleEvenOdd FillRule = C.CAIRO_FILL_RULE_EVEN_ODD 673) 674 675// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 676func (i FillRule) String() string { 677 switch i { 678 case FillRuleWinding: 679 return "FillRuleWinding" 680 case FillRuleEvenOdd: 681 return "FillRuleEvenOdd" 682 default: 683 return fmt.Sprintf("FillRule(%d)", i) 684 } 685} 686 687// See cairo_set_fill_rule(). 688// 689// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-fill-rule 690func (cr *Context) SetFillRule(fillRule FillRule) { 691 C.cairo_set_fill_rule(cr.Ptr, C.cairo_fill_rule_t(fillRule)) 692 if err := cr.status(); err != nil { 693 panic(err) 694 } 695} 696 697// See cairo_set_line_width(). 698// 699// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-line-width 700func (cr *Context) SetLineWidth(width float64) { 701 C.cairo_set_line_width(cr.Ptr, C.double(width)) 702 if err := cr.status(); err != nil { 703 panic(err) 704 } 705} 706 707// See cairo_line_cap_t. 708// 709// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-line-cap-t 710type LineCap int 711 712const ( 713 LineCapButt LineCap = C.CAIRO_LINE_CAP_BUTT 714 LineCapRound LineCap = C.CAIRO_LINE_CAP_ROUND 715 LineCapSquare LineCap = C.CAIRO_LINE_CAP_SQUARE 716) 717 718// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 719func (i LineCap) String() string { 720 switch i { 721 case LineCapButt: 722 return "LineCapButt" 723 case LineCapRound: 724 return "LineCapRound" 725 case LineCapSquare: 726 return "LineCapSquare" 727 default: 728 return fmt.Sprintf("LineCap(%d)", i) 729 } 730} 731 732// See cairo_set_line_cap(). 733// 734// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-line-cap 735func (cr *Context) SetLineCap(lineCap LineCap) { 736 C.cairo_set_line_cap(cr.Ptr, C.cairo_line_cap_t(lineCap)) 737 if err := cr.status(); err != nil { 738 panic(err) 739 } 740} 741 742// See cairo_line_join_t. 743// 744// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-line-join-t 745type LineJoin int 746 747const ( 748 LineJoinMiter LineJoin = C.CAIRO_LINE_JOIN_MITER 749 LineJoinRound LineJoin = C.CAIRO_LINE_JOIN_ROUND 750 LineJoinBevel LineJoin = C.CAIRO_LINE_JOIN_BEVEL 751) 752 753// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 754func (i LineJoin) String() string { 755 switch i { 756 case LineJoinMiter: 757 return "LineJoinMiter" 758 case LineJoinRound: 759 return "LineJoinRound" 760 case LineJoinBevel: 761 return "LineJoinBevel" 762 default: 763 return fmt.Sprintf("LineJoin(%d)", i) 764 } 765} 766 767// See cairo_set_line_join(). 768// 769// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-line-join 770func (cr *Context) SetLineJoin(lineJoin LineJoin) { 771 C.cairo_set_line_join(cr.Ptr, C.cairo_line_join_t(lineJoin)) 772 if err := cr.status(); err != nil { 773 panic(err) 774 } 775} 776 777// See cairo_set_dash(). 778// 779// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-dash 780func (cr *Context) SetDash(dashes []float64, offset float64) { 781 C.cairo_set_dash(cr.Ptr, (*C.double)(sliceBytes(unsafe.Pointer(&dashes))), C.int(len(dashes)), C.double(offset)) 782 if err := cr.status(); err != nil { 783 panic(err) 784 } 785} 786 787// See cairo_set_miter_limit(). 788// 789// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-set-miter-limit 790func (cr *Context) SetMiterLimit(limit float64) { 791 C.cairo_set_miter_limit(cr.Ptr, C.double(limit)) 792 if err := cr.status(); err != nil { 793 panic(err) 794 } 795} 796 797// See cairo_translate(). 798// 799// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-translate 800func (cr *Context) Translate(tx, ty float64) { 801 C.cairo_translate(cr.Ptr, C.double(tx), C.double(ty)) 802 if err := cr.status(); err != nil { 803 panic(err) 804 } 805} 806 807// See cairo_scale(). 808// 809// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-scale 810func (cr *Context) Scale(sx, sy float64) { 811 C.cairo_scale(cr.Ptr, C.double(sx), C.double(sy)) 812 if err := cr.status(); err != nil { 813 panic(err) 814 } 815} 816 817// See cairo_rotate(). 818// 819// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-rotate 820func (cr *Context) Rotate(angle float64) { 821 C.cairo_rotate(cr.Ptr, C.double(angle)) 822 if err := cr.status(); err != nil { 823 panic(err) 824 } 825} 826 827// See cairo_transform(). 828// 829// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-transform 830func (cr *Context) Transform(matrix *Matrix) { 831 C.cairo_transform(cr.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(matrix))) 832 if err := cr.status(); err != nil { 833 panic(err) 834 } 835} 836 837// See cairo_set_matrix(). 838// 839// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-set-matrix 840func (cr *Context) SetMatrix(matrix *Matrix) { 841 C.cairo_set_matrix(cr.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(matrix))) 842 if err := cr.status(); err != nil { 843 panic(err) 844 } 845} 846 847// See cairo_identity_matrix(). 848// 849// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-identity-matrix 850func (cr *Context) IdentityMatrix() { 851 C.cairo_identity_matrix(cr.Ptr) 852 if err := cr.status(); err != nil { 853 panic(err) 854 } 855} 856 857// See cairo_user_to_device(). 858// 859// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-user-to-device 860func (cr *Context) UserToDevice(x, y *float64) { 861 C.cairo_user_to_device(cr.Ptr, (*C.double)(unsafe.Pointer(x)), (*C.double)(unsafe.Pointer(y))) 862 if err := cr.status(); err != nil { 863 panic(err) 864 } 865} 866 867// See cairo_user_to_device_distance(). 868// 869// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-user-to-device-distance 870func (cr *Context) UserToDeviceDistance(dx, dy *float64) { 871 C.cairo_user_to_device_distance(cr.Ptr, (*C.double)(unsafe.Pointer(dx)), (*C.double)(unsafe.Pointer(dy))) 872 if err := cr.status(); err != nil { 873 panic(err) 874 } 875} 876 877// See cairo_device_to_user(). 878// 879// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-device-to-user 880func (cr *Context) DeviceToUser(x, y *float64) { 881 C.cairo_device_to_user(cr.Ptr, (*C.double)(unsafe.Pointer(x)), (*C.double)(unsafe.Pointer(y))) 882 if err := cr.status(); err != nil { 883 panic(err) 884 } 885} 886 887// See cairo_device_to_user_distance(). 888// 889// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-device-to-user-distance 890func (cr *Context) DeviceToUserDistance(dx, dy *float64) { 891 C.cairo_device_to_user_distance(cr.Ptr, (*C.double)(unsafe.Pointer(dx)), (*C.double)(unsafe.Pointer(dy))) 892 if err := cr.status(); err != nil { 893 panic(err) 894 } 895} 896 897// See cairo_new_path(). 898// 899// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-new-path 900func (cr *Context) NewPath() { 901 C.cairo_new_path(cr.Ptr) 902 if err := cr.status(); err != nil { 903 panic(err) 904 } 905} 906 907// See cairo_move_to(). 908// 909// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-move-to 910func (cr *Context) MoveTo(x, y float64) { 911 C.cairo_move_to(cr.Ptr, C.double(x), C.double(y)) 912 if err := cr.status(); err != nil { 913 panic(err) 914 } 915} 916 917// See cairo_new_sub_path(). 918// 919// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-new-sub-path 920func (cr *Context) NewSubPath() { 921 C.cairo_new_sub_path(cr.Ptr) 922 if err := cr.status(); err != nil { 923 panic(err) 924 } 925} 926 927// See cairo_line_to(). 928// 929// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-line-to 930func (cr *Context) LineTo(x, y float64) { 931 C.cairo_line_to(cr.Ptr, C.double(x), C.double(y)) 932 if err := cr.status(); err != nil { 933 panic(err) 934 } 935} 936 937// See cairo_curve_to(). 938// 939// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-curve-to 940func (cr *Context) CurveTo(x1, y1, x2, y2, x3, y3 float64) { 941 C.cairo_curve_to(cr.Ptr, C.double(x1), C.double(y1), C.double(x2), C.double(y2), C.double(x3), C.double(y3)) 942 if err := cr.status(); err != nil { 943 panic(err) 944 } 945} 946 947// See cairo_arc(). 948// 949// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-arc 950func (cr *Context) Arc(xc, yc, radius, angle1, angle2 float64) { 951 C.cairo_arc(cr.Ptr, C.double(xc), C.double(yc), C.double(radius), C.double(angle1), C.double(angle2)) 952 if err := cr.status(); err != nil { 953 panic(err) 954 } 955} 956 957// See cairo_arc_negative(). 958// 959// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-arc-negative 960func (cr *Context) ArcNegative(xc, yc, radius, angle1, angle2 float64) { 961 C.cairo_arc_negative(cr.Ptr, C.double(xc), C.double(yc), C.double(radius), C.double(angle1), C.double(angle2)) 962 if err := cr.status(); err != nil { 963 panic(err) 964 } 965} 966 967// See cairo_rel_move_to(). 968// 969// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-rel-move-to 970func (cr *Context) RelMoveTo(dx, dy float64) { 971 C.cairo_rel_move_to(cr.Ptr, C.double(dx), C.double(dy)) 972 if err := cr.status(); err != nil { 973 panic(err) 974 } 975} 976 977// See cairo_rel_line_to(). 978// 979// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-rel-line-to 980func (cr *Context) RelLineTo(dx, dy float64) { 981 C.cairo_rel_line_to(cr.Ptr, C.double(dx), C.double(dy)) 982 if err := cr.status(); err != nil { 983 panic(err) 984 } 985} 986 987// See cairo_rel_curve_to(). 988// 989// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-rel-curve-to 990func (cr *Context) RelCurveTo(dx1, dy1, dx2, dy2, dx3, dy3 float64) { 991 C.cairo_rel_curve_to(cr.Ptr, C.double(dx1), C.double(dy1), C.double(dx2), C.double(dy2), C.double(dx3), C.double(dy3)) 992 if err := cr.status(); err != nil { 993 panic(err) 994 } 995} 996 997// See cairo_rectangle(). 998// 999// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-rectangle 1000func (cr *Context) Rectangle(x, y, width, height float64) { 1001 C.cairo_rectangle(cr.Ptr, C.double(x), C.double(y), C.double(width), C.double(height)) 1002 if err := cr.status(); err != nil { 1003 panic(err) 1004 } 1005} 1006 1007// See cairo_close_path(). 1008// 1009// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-close-path 1010func (cr *Context) ClosePath() { 1011 C.cairo_close_path(cr.Ptr) 1012 if err := cr.status(); err != nil { 1013 panic(err) 1014 } 1015} 1016 1017// See cairo_path_extents(). 1018// 1019// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-path-extents 1020func (cr *Context) PathExtents() (float64, float64, float64, float64) { 1021 var x1 C.double 1022 var y1 C.double 1023 var x2 C.double 1024 var y2 C.double 1025 1026 C.cairo_path_extents(cr.Ptr, &x1, &y1, &x2, &y2) 1027 if err := cr.status(); err != nil { 1028 panic(err) 1029 } 1030 return float64(x1), float64(y1), float64(x2), float64(y2) 1031} 1032 1033// See cairo_paint(). 1034// 1035// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-paint 1036func (cr *Context) Paint() { 1037 C.cairo_paint(cr.Ptr) 1038 if err := cr.status(); err != nil { 1039 panic(err) 1040 } 1041} 1042 1043// See cairo_paint_with_alpha(). 1044// 1045// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-paint-with-alpha 1046func (cr *Context) PaintWithAlpha(alpha float64) { 1047 C.cairo_paint_with_alpha(cr.Ptr, C.double(alpha)) 1048 if err := cr.status(); err != nil { 1049 panic(err) 1050 } 1051} 1052 1053// See cairo_mask(). 1054// 1055// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-mask 1056func (cr *Context) Mask(pattern *Pattern) { 1057 C.cairo_mask(cr.Ptr, pattern.Ptr) 1058 if err := cr.status(); err != nil { 1059 panic(err) 1060 } 1061} 1062 1063// See cairo_mask_surface(). 1064// 1065// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-mask-surface 1066func (cr *Context) MaskSurface(surface *Surface, surfaceX, surfaceY float64) { 1067 C.cairo_mask_surface(cr.Ptr, surface.Ptr, C.double(surfaceX), C.double(surfaceY)) 1068 if err := cr.status(); err != nil { 1069 panic(err) 1070 } 1071} 1072 1073// See cairo_stroke(). 1074// 1075// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-stroke 1076func (cr *Context) Stroke() { 1077 C.cairo_stroke(cr.Ptr) 1078 if err := cr.status(); err != nil { 1079 panic(err) 1080 } 1081} 1082 1083// See cairo_stroke_preserve(). 1084// 1085// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-stroke-preserve 1086func (cr *Context) StrokePreserve() { 1087 C.cairo_stroke_preserve(cr.Ptr) 1088 if err := cr.status(); err != nil { 1089 panic(err) 1090 } 1091} 1092 1093// See cairo_fill(). 1094// 1095// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill 1096func (cr *Context) Fill() { 1097 C.cairo_fill(cr.Ptr) 1098 if err := cr.status(); err != nil { 1099 panic(err) 1100 } 1101} 1102 1103// See cairo_fill_preserve(). 1104// 1105// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill-preserve 1106func (cr *Context) FillPreserve() { 1107 C.cairo_fill_preserve(cr.Ptr) 1108 if err := cr.status(); err != nil { 1109 panic(err) 1110 } 1111} 1112 1113// See cairo_copy_page(). 1114// 1115// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-copy-page 1116func (cr *Context) CopyPage() { 1117 C.cairo_copy_page(cr.Ptr) 1118 if err := cr.status(); err != nil { 1119 panic(err) 1120 } 1121} 1122 1123// See cairo_show_page(). 1124// 1125// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-show-page 1126func (cr *Context) ShowPage() { 1127 C.cairo_show_page(cr.Ptr) 1128 if err := cr.status(); err != nil { 1129 panic(err) 1130 } 1131} 1132 1133// See cairo_in_stroke(). 1134// 1135// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-in-stroke 1136func (cr *Context) InStroke(x, y float64) bool { 1137 ret := C.cairo_in_stroke(cr.Ptr, C.double(x), C.double(y)) != 0 1138 if err := cr.status(); err != nil { 1139 panic(err) 1140 } 1141 return ret 1142} 1143 1144// See cairo_in_fill(). 1145// 1146// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-in-fill 1147func (cr *Context) InFill(x, y float64) bool { 1148 ret := C.cairo_in_fill(cr.Ptr, C.double(x), C.double(y)) != 0 1149 if err := cr.status(); err != nil { 1150 panic(err) 1151 } 1152 return ret 1153} 1154 1155// See cairo_in_clip(). 1156// 1157// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-in-clip 1158func (cr *Context) InClip(x, y float64) bool { 1159 ret := C.cairo_in_clip(cr.Ptr, C.double(x), C.double(y)) != 0 1160 if err := cr.status(); err != nil { 1161 panic(err) 1162 } 1163 return ret 1164} 1165 1166// See cairo_stroke_extents(). 1167// 1168// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-stroke-extents 1169func (cr *Context) StrokeExtents() (float64, float64, float64, float64) { 1170 var x1 C.double 1171 var y1 C.double 1172 var x2 C.double 1173 var y2 C.double 1174 1175 C.cairo_stroke_extents(cr.Ptr, &x1, &y1, &x2, &y2) 1176 if err := cr.status(); err != nil { 1177 panic(err) 1178 } 1179 return float64(x1), float64(y1), float64(x2), float64(y2) 1180} 1181 1182// See cairo_fill_extents(). 1183// 1184// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill-extents 1185func (cr *Context) FillExtents() (float64, float64, float64, float64) { 1186 var x1 C.double 1187 var y1 C.double 1188 var x2 C.double 1189 var y2 C.double 1190 1191 C.cairo_fill_extents(cr.Ptr, &x1, &y1, &x2, &y2) 1192 if err := cr.status(); err != nil { 1193 panic(err) 1194 } 1195 return float64(x1), float64(y1), float64(x2), float64(y2) 1196} 1197 1198// See cairo_reset_clip(). 1199// 1200// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-reset-clip 1201func (cr *Context) ResetClip() { 1202 C.cairo_reset_clip(cr.Ptr) 1203 if err := cr.status(); err != nil { 1204 panic(err) 1205 } 1206} 1207 1208// See cairo_clip(). 1209// 1210// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-clip 1211func (cr *Context) Clip() { 1212 C.cairo_clip(cr.Ptr) 1213 if err := cr.status(); err != nil { 1214 panic(err) 1215 } 1216} 1217 1218// See cairo_clip_preserve(). 1219// 1220// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-clip-preserve 1221func (cr *Context) ClipPreserve() { 1222 C.cairo_clip_preserve(cr.Ptr) 1223 if err := cr.status(); err != nil { 1224 panic(err) 1225 } 1226} 1227 1228// See cairo_clip_extents(). 1229// 1230// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-clip-extents 1231func (cr *Context) ClipExtents() (float64, float64, float64, float64) { 1232 var x1 C.double 1233 var y1 C.double 1234 var x2 C.double 1235 var y2 C.double 1236 1237 C.cairo_clip_extents(cr.Ptr, &x1, &y1, &x2, &y2) 1238 if err := cr.status(); err != nil { 1239 panic(err) 1240 } 1241 return float64(x1), float64(y1), float64(x2), float64(y2) 1242} 1243 1244// See cairo_rectangle_t. 1245// 1246// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-rectangle-t 1247type Rectangle struct { 1248 X float64 1249 Y float64 1250 Width float64 1251 Height float64 1252} 1253 1254// See cairo_scaled_font_t. 1255// 1256// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-t 1257type ScaledFont struct { 1258 Ptr *C.cairo_scaled_font_t 1259} 1260 1261func freeScaledFont(obj *ScaledFont) { 1262 C.cairo_scaled_font_destroy(obj.Ptr) 1263} 1264func wrapScaledFont(p *C.cairo_scaled_font_t) *ScaledFont { 1265 ret := &ScaledFont{p} 1266 runtime.SetFinalizer(ret, freeScaledFont) 1267 return ret 1268} 1269 1270// Wrap a C cairo_scaled_font_t* found from some external source as a *ScaledFont. The Go side will destroy the reference when it's no longer used. 1271func WrapScaledFont(p unsafe.Pointer) *ScaledFont { 1272 return wrapScaledFont((*C.cairo_scaled_font_t)(p)) 1273} 1274 1275// Construct a ScaledFont from a C cairo_scaled_font_t* found from some exernal source. It is the caller's responsibility to ensure the pointer lives. 1276func BorrowScaledFont(p unsafe.Pointer) *ScaledFont { 1277 return &ScaledFont{(*C.cairo_scaled_font_t)(p)} 1278} 1279 1280// See cairo_font_face_t. 1281// 1282// C API documentation: http://cairographics.org/manual/cairo-cairo-font-face-t.html#cairo-font-face-t 1283type FontFace struct { 1284 Ptr *C.cairo_font_face_t 1285} 1286 1287func freeFontFace(obj *FontFace) { 1288 C.cairo_font_face_destroy(obj.Ptr) 1289} 1290func wrapFontFace(p *C.cairo_font_face_t) *FontFace { 1291 ret := &FontFace{p} 1292 runtime.SetFinalizer(ret, freeFontFace) 1293 return ret 1294} 1295 1296// Wrap a C cairo_font_face_t* found from some external source as a *FontFace. The Go side will destroy the reference when it's no longer used. 1297func WrapFontFace(p unsafe.Pointer) *FontFace { 1298 return wrapFontFace((*C.cairo_font_face_t)(p)) 1299} 1300 1301// Construct a FontFace from a C cairo_font_face_t* found from some exernal source. It is the caller's responsibility to ensure the pointer lives. 1302func BorrowFontFace(p unsafe.Pointer) *FontFace { 1303 return &FontFace{(*C.cairo_font_face_t)(p)} 1304} 1305 1306// See cairo_glyph_t. 1307// 1308// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-glyph-t 1309type Glyph struct { 1310 Index uint32 1311 X float64 1312 Y float64 1313} 1314 1315// See cairo_text_cluster_flags_t. 1316// 1317// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-text-cluster-flags-t 1318type TextClusterFlags int 1319 1320const ( 1321 TextClusterFlagBackward TextClusterFlags = C.CAIRO_TEXT_CLUSTER_FLAG_BACKWARD 1322) 1323 1324// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 1325func (i TextClusterFlags) String() string { 1326 switch i { 1327 case TextClusterFlagBackward: 1328 return "TextClusterFlagBackward" 1329 default: 1330 return fmt.Sprintf("TextClusterFlags(%d)", i) 1331 } 1332} 1333 1334// See cairo_text_extents_t. 1335// 1336// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-text-extents-t 1337type TextExtents struct { 1338 XBearing float64 1339 YBearing float64 1340 Width float64 1341 Height float64 1342 XAdvance float64 1343 YAdvance float64 1344} 1345 1346// See cairo_font_extents_t. 1347// 1348// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-font-extents-t 1349type FontExtents struct { 1350 Ascent float64 1351 Descent float64 1352 Height float64 1353 MaxXAdvance float64 1354 MaxYAdvance float64 1355} 1356 1357// See cairo_font_slant_t. 1358// 1359// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-font-slant-t 1360type FontSlant int 1361 1362const ( 1363 FontSlantNormal FontSlant = C.CAIRO_FONT_SLANT_NORMAL 1364 FontSlantItalic FontSlant = C.CAIRO_FONT_SLANT_ITALIC 1365 FontSlantOblique FontSlant = C.CAIRO_FONT_SLANT_OBLIQUE 1366) 1367 1368// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 1369func (i FontSlant) String() string { 1370 switch i { 1371 case FontSlantNormal: 1372 return "FontSlantNormal" 1373 case FontSlantItalic: 1374 return "FontSlantItalic" 1375 case FontSlantOblique: 1376 return "FontSlantOblique" 1377 default: 1378 return fmt.Sprintf("FontSlant(%d)", i) 1379 } 1380} 1381 1382// See cairo_font_weight_t. 1383// 1384// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-font-weight-t 1385type FontWeight int 1386 1387const ( 1388 FontWeightNormal FontWeight = C.CAIRO_FONT_WEIGHT_NORMAL 1389 FontWeightBold FontWeight = C.CAIRO_FONT_WEIGHT_BOLD 1390) 1391 1392// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 1393func (i FontWeight) String() string { 1394 switch i { 1395 case FontWeightNormal: 1396 return "FontWeightNormal" 1397 case FontWeightBold: 1398 return "FontWeightBold" 1399 default: 1400 return fmt.Sprintf("FontWeight(%d)", i) 1401 } 1402} 1403 1404// See cairo_subpixel_order_t. 1405// 1406// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-subpixel-order-t 1407type SubpixelOrder int 1408 1409const ( 1410 SubpixelOrderDefault SubpixelOrder = C.CAIRO_SUBPIXEL_ORDER_DEFAULT 1411 SubpixelOrderRGB SubpixelOrder = C.CAIRO_SUBPIXEL_ORDER_RGB 1412 SubpixelOrderBGR SubpixelOrder = C.CAIRO_SUBPIXEL_ORDER_BGR 1413 SubpixelOrderVRGB SubpixelOrder = C.CAIRO_SUBPIXEL_ORDER_VRGB 1414 SubpixelOrderVBGR SubpixelOrder = C.CAIRO_SUBPIXEL_ORDER_VBGR 1415) 1416 1417// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 1418func (i SubpixelOrder) String() string { 1419 switch i { 1420 case SubpixelOrderDefault: 1421 return "SubpixelOrderDefault" 1422 case SubpixelOrderRGB: 1423 return "SubpixelOrderRGB" 1424 case SubpixelOrderBGR: 1425 return "SubpixelOrderBGR" 1426 case SubpixelOrderVRGB: 1427 return "SubpixelOrderVRGB" 1428 case SubpixelOrderVBGR: 1429 return "SubpixelOrderVBGR" 1430 default: 1431 return fmt.Sprintf("SubpixelOrder(%d)", i) 1432 } 1433} 1434 1435// See cairo_hint_style_t. 1436// 1437// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-hint-style-t 1438type HintStyle int 1439 1440const ( 1441 HintStyleDefault HintStyle = C.CAIRO_HINT_STYLE_DEFAULT 1442 HintStyleNone HintStyle = C.CAIRO_HINT_STYLE_NONE 1443 HintStyleSlight HintStyle = C.CAIRO_HINT_STYLE_SLIGHT 1444 HintStyleMedium HintStyle = C.CAIRO_HINT_STYLE_MEDIUM 1445 HintStyleFull HintStyle = C.CAIRO_HINT_STYLE_FULL 1446) 1447 1448// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 1449func (i HintStyle) String() string { 1450 switch i { 1451 case HintStyleDefault: 1452 return "HintStyleDefault" 1453 case HintStyleNone: 1454 return "HintStyleNone" 1455 case HintStyleSlight: 1456 return "HintStyleSlight" 1457 case HintStyleMedium: 1458 return "HintStyleMedium" 1459 case HintStyleFull: 1460 return "HintStyleFull" 1461 default: 1462 return fmt.Sprintf("HintStyle(%d)", i) 1463 } 1464} 1465 1466// See cairo_hint_metrics_t. 1467// 1468// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-hint-metrics-t 1469type HintMetrics int 1470 1471const ( 1472 HintMetricsDefault HintMetrics = C.CAIRO_HINT_METRICS_DEFAULT 1473 HintMetricsOff HintMetrics = C.CAIRO_HINT_METRICS_OFF 1474 HintMetricsOn HintMetrics = C.CAIRO_HINT_METRICS_ON 1475) 1476 1477// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 1478func (i HintMetrics) String() string { 1479 switch i { 1480 case HintMetricsDefault: 1481 return "HintMetricsDefault" 1482 case HintMetricsOff: 1483 return "HintMetricsOff" 1484 case HintMetricsOn: 1485 return "HintMetricsOn" 1486 default: 1487 return fmt.Sprintf("HintMetrics(%d)", i) 1488 } 1489} 1490 1491// See cairo_font_options_t. 1492// 1493// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-t 1494type FontOptions struct { 1495 Ptr *C.cairo_font_options_t 1496} 1497 1498func freeFontOptions(obj *FontOptions) { 1499 C.cairo_font_options_destroy(obj.Ptr) 1500} 1501func wrapFontOptions(p *C.cairo_font_options_t) *FontOptions { 1502 ret := &FontOptions{p} 1503 runtime.SetFinalizer(ret, freeFontOptions) 1504 return ret 1505} 1506 1507// Wrap a C cairo_font_options_t* found from some external source as a *FontOptions. The Go side will destroy the reference when it's no longer used. 1508func WrapFontOptions(p unsafe.Pointer) *FontOptions { 1509 return wrapFontOptions((*C.cairo_font_options_t)(p)) 1510} 1511 1512// Construct a FontOptions from a C cairo_font_options_t* found from some exernal source. It is the caller's responsibility to ensure the pointer lives. 1513func BorrowFontOptions(p unsafe.Pointer) *FontOptions { 1514 return &FontOptions{(*C.cairo_font_options_t)(p)} 1515} 1516 1517// See cairo_font_options_create(). 1518// 1519// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-create 1520func FontOptionsCreate() *FontOptions { 1521 ret := wrapFontOptions(C.cairo_font_options_create()) 1522 if err := ret.status(); err != nil { 1523 panic(err) 1524 } 1525 return ret 1526} 1527 1528// See cairo_font_options_copy(). 1529// 1530// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-copy 1531func (original *FontOptions) Copy() *FontOptions { 1532 ret := wrapFontOptions(C.cairo_font_options_copy(original.Ptr)) 1533 if err := original.status(); err != nil { 1534 panic(err) 1535 } 1536 return ret 1537} 1538 1539// See cairo_font_options_status(). 1540// 1541// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-status 1542func (options *FontOptions) status() error { 1543 ret := Status(C.cairo_font_options_status(options.Ptr)).toError() 1544 return ret 1545} 1546 1547// See cairo_font_options_merge(). 1548// 1549// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-merge 1550func (options *FontOptions) Merge(other *FontOptions) { 1551 C.cairo_font_options_merge(options.Ptr, other.Ptr) 1552 if err := options.status(); err != nil { 1553 panic(err) 1554 } 1555} 1556 1557// See cairo_font_options_equal(). 1558// 1559// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-equal 1560func (options *FontOptions) Equal(other *FontOptions) bool { 1561 ret := C.cairo_font_options_equal(options.Ptr, other.Ptr) != 0 1562 if err := options.status(); err != nil { 1563 panic(err) 1564 } 1565 return ret 1566} 1567 1568// See cairo_font_options_hash(). 1569// 1570// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-hash 1571func (options *FontOptions) Hash() uint32 { 1572 ret := uint32(C.cairo_font_options_hash(options.Ptr)) 1573 if err := options.status(); err != nil { 1574 panic(err) 1575 } 1576 return ret 1577} 1578 1579// See cairo_font_options_set_antialias(). 1580// 1581// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-set-antialias 1582func (options *FontOptions) SetAntialias(antialias Antialias) { 1583 C.cairo_font_options_set_antialias(options.Ptr, C.cairo_antialias_t(antialias)) 1584 if err := options.status(); err != nil { 1585 panic(err) 1586 } 1587} 1588 1589// See cairo_font_options_get_antialias(). 1590// 1591// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-get-antialias 1592func (options *FontOptions) GetAntialias() Antialias { 1593 ret := Antialias(C.cairo_font_options_get_antialias(options.Ptr)) 1594 if err := options.status(); err != nil { 1595 panic(err) 1596 } 1597 return ret 1598} 1599 1600// See cairo_font_options_set_subpixel_order(). 1601// 1602// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-set-subpixel-order 1603func (options *FontOptions) SetSubpixelOrder(subpixelOrder SubpixelOrder) { 1604 C.cairo_font_options_set_subpixel_order(options.Ptr, C.cairo_subpixel_order_t(subpixelOrder)) 1605 if err := options.status(); err != nil { 1606 panic(err) 1607 } 1608} 1609 1610// See cairo_font_options_get_subpixel_order(). 1611// 1612// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-get-subpixel-order 1613func (options *FontOptions) GetSubpixelOrder() SubpixelOrder { 1614 ret := SubpixelOrder(C.cairo_font_options_get_subpixel_order(options.Ptr)) 1615 if err := options.status(); err != nil { 1616 panic(err) 1617 } 1618 return ret 1619} 1620 1621// See cairo_font_options_set_hint_style(). 1622// 1623// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-set-hint-style 1624func (options *FontOptions) SetHintStyle(hintStyle HintStyle) { 1625 C.cairo_font_options_set_hint_style(options.Ptr, C.cairo_hint_style_t(hintStyle)) 1626 if err := options.status(); err != nil { 1627 panic(err) 1628 } 1629} 1630 1631// See cairo_font_options_get_hint_style(). 1632// 1633// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-get-hint-style 1634func (options *FontOptions) GetHintStyle() HintStyle { 1635 ret := HintStyle(C.cairo_font_options_get_hint_style(options.Ptr)) 1636 if err := options.status(); err != nil { 1637 panic(err) 1638 } 1639 return ret 1640} 1641 1642// See cairo_font_options_set_hint_metrics(). 1643// 1644// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-set-hint-metrics 1645func (options *FontOptions) SetHintMetrics(hintMetrics HintMetrics) { 1646 C.cairo_font_options_set_hint_metrics(options.Ptr, C.cairo_hint_metrics_t(hintMetrics)) 1647 if err := options.status(); err != nil { 1648 panic(err) 1649 } 1650} 1651 1652// See cairo_font_options_get_hint_metrics(). 1653// 1654// C API documentation: http://cairographics.org/manual/cairo-cairo-font-options-t.html#cairo-font-options-get-hint-metrics 1655func (options *FontOptions) GetHintMetrics() HintMetrics { 1656 ret := HintMetrics(C.cairo_font_options_get_hint_metrics(options.Ptr)) 1657 if err := options.status(); err != nil { 1658 panic(err) 1659 } 1660 return ret 1661} 1662 1663// See cairo_select_font_face(). 1664// 1665// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-select-font-face 1666func (cr *Context) SelectFontFace(family string, slant FontSlant, weight FontWeight) { 1667 c_family := C.CString(family) 1668 defer C.free(unsafe.Pointer(c_family)) 1669 C.cairo_select_font_face(cr.Ptr, c_family, C.cairo_font_slant_t(slant), C.cairo_font_weight_t(weight)) 1670 if err := cr.status(); err != nil { 1671 panic(err) 1672 } 1673} 1674 1675// See cairo_set_font_size(). 1676// 1677// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-set-font-size 1678func (cr *Context) SetFontSize(size float64) { 1679 C.cairo_set_font_size(cr.Ptr, C.double(size)) 1680 if err := cr.status(); err != nil { 1681 panic(err) 1682 } 1683} 1684 1685// See cairo_set_font_matrix(). 1686// 1687// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-set-font-matrix 1688func (cr *Context) SetFontMatrix(matrix *Matrix) { 1689 C.cairo_set_font_matrix(cr.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(matrix))) 1690 if err := cr.status(); err != nil { 1691 panic(err) 1692 } 1693} 1694 1695// See cairo_get_font_matrix(). 1696// 1697// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-get-font-matrix 1698func (cr *Context) GetFontMatrix(matrix *Matrix) { 1699 C.cairo_get_font_matrix(cr.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(matrix))) 1700 if err := cr.status(); err != nil { 1701 panic(err) 1702 } 1703} 1704 1705// See cairo_set_font_options(). 1706// 1707// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-set-font-options 1708func (cr *Context) SetFontOptions(options *FontOptions) { 1709 C.cairo_set_font_options(cr.Ptr, options.Ptr) 1710 if err := cr.status(); err != nil { 1711 panic(err) 1712 } 1713} 1714 1715// See cairo_get_font_options(). 1716// 1717// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-get-font-options 1718func (cr *Context) GetFontOptions(options *FontOptions) { 1719 C.cairo_get_font_options(cr.Ptr, options.Ptr) 1720 if err := cr.status(); err != nil { 1721 panic(err) 1722 } 1723} 1724 1725// See cairo_set_font_face(). 1726// 1727// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-set-font-face 1728func (cr *Context) SetFontFace(fontFace *FontFace) { 1729 C.cairo_set_font_face(cr.Ptr, fontFace.Ptr) 1730 if err := cr.status(); err != nil { 1731 panic(err) 1732 } 1733} 1734 1735// See cairo_get_font_face(). 1736// 1737// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-get-font-face 1738func (cr *Context) GetFontFace() *FontFace { 1739 ret := wrapFontFace(C.cairo_get_font_face(cr.Ptr)) 1740 if err := cr.status(); err != nil { 1741 panic(err) 1742 } 1743 return ret 1744} 1745 1746// See cairo_set_scaled_font(). 1747// 1748// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-set-scaled-font 1749func (cr *Context) SetScaledFont(scaledFont *ScaledFont) { 1750 C.cairo_set_scaled_font(cr.Ptr, scaledFont.Ptr) 1751 if err := cr.status(); err != nil { 1752 panic(err) 1753 } 1754} 1755 1756// See cairo_get_scaled_font(). 1757// 1758// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-get-scaled-font 1759func (cr *Context) GetScaledFont() *ScaledFont { 1760 ret := wrapScaledFont(C.cairo_get_scaled_font(cr.Ptr)) 1761 if err := cr.status(); err != nil { 1762 panic(err) 1763 } 1764 return ret 1765} 1766 1767// See cairo_show_text(). 1768// 1769// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-show-text 1770func (cr *Context) ShowText(utf8 string) { 1771 c_utf8 := C.CString(utf8) 1772 defer C.free(unsafe.Pointer(c_utf8)) 1773 C.cairo_show_text(cr.Ptr, c_utf8) 1774 if err := cr.status(); err != nil { 1775 panic(err) 1776 } 1777} 1778 1779// See cairo_show_glyphs(). 1780// 1781// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-show-glyphs 1782func (cr *Context) ShowGlyphs(glyphs []Glyph) { 1783 C.cairo_show_glyphs(cr.Ptr, (*C.cairo_glyph_t)(sliceBytes(unsafe.Pointer(&glyphs))), C.int(len(glyphs))) 1784 if err := cr.status(); err != nil { 1785 panic(err) 1786 } 1787} 1788 1789// See cairo_text_path(). 1790// 1791// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-text-path 1792func (cr *Context) TextPath(utf8 string) { 1793 c_utf8 := C.CString(utf8) 1794 defer C.free(unsafe.Pointer(c_utf8)) 1795 C.cairo_text_path(cr.Ptr, c_utf8) 1796 if err := cr.status(); err != nil { 1797 panic(err) 1798 } 1799} 1800 1801// See cairo_glyph_path(). 1802// 1803// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-glyph-path 1804func (cr *Context) GlyphPath(glyphs []Glyph) { 1805 C.cairo_glyph_path(cr.Ptr, (*C.cairo_glyph_t)(sliceBytes(unsafe.Pointer(&glyphs))), C.int(len(glyphs))) 1806 if err := cr.status(); err != nil { 1807 panic(err) 1808 } 1809} 1810 1811// See cairo_text_extents(). 1812// 1813// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-text-extents 1814func (cr *Context) TextExtents(utf8 string, extents *TextExtents) { 1815 c_utf8 := C.CString(utf8) 1816 defer C.free(unsafe.Pointer(c_utf8)) 1817 C.cairo_text_extents(cr.Ptr, c_utf8, (*C.cairo_text_extents_t)(unsafe.Pointer(extents))) 1818 if err := cr.status(); err != nil { 1819 panic(err) 1820 } 1821} 1822 1823// See cairo_glyph_extents(). 1824// 1825// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-glyph-extents 1826func (cr *Context) GlyphExtents(glyphs []Glyph, extents *TextExtents) { 1827 C.cairo_glyph_extents(cr.Ptr, (*C.cairo_glyph_t)(sliceBytes(unsafe.Pointer(&glyphs))), C.int(len(glyphs)), (*C.cairo_text_extents_t)(unsafe.Pointer(extents))) 1828 if err := cr.status(); err != nil { 1829 panic(err) 1830 } 1831} 1832 1833// See cairo_font_extents(). 1834// 1835// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-font-extents 1836func (cr *Context) FontExtents(extents *FontExtents) { 1837 C.cairo_font_extents(cr.Ptr, (*C.cairo_font_extents_t)(unsafe.Pointer(extents))) 1838 if err := cr.status(); err != nil { 1839 panic(err) 1840 } 1841} 1842 1843// See cairo_font_face_status(). 1844// 1845// C API documentation: http://cairographics.org/manual/cairo-cairo-font-face-t.html#cairo-font-face-status 1846func (fontFace *FontFace) status() error { 1847 ret := Status(C.cairo_font_face_status(fontFace.Ptr)).toError() 1848 return ret 1849} 1850 1851// See cairo_font_type_t. 1852// 1853// C API documentation: http://cairographics.org/manual/cairo-cairo-font-face-t.html#cairo-font-type-t 1854type FontType int 1855 1856const ( 1857 FontTypeToy FontType = C.CAIRO_FONT_TYPE_TOY 1858 FontTypeFt FontType = C.CAIRO_FONT_TYPE_FT 1859 FontTypeWin32 FontType = C.CAIRO_FONT_TYPE_WIN32 1860 FontTypeQuartz FontType = C.CAIRO_FONT_TYPE_QUARTZ 1861 FontTypeUser FontType = C.CAIRO_FONT_TYPE_USER 1862) 1863 1864// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 1865func (i FontType) String() string { 1866 switch i { 1867 case FontTypeToy: 1868 return "FontTypeToy" 1869 case FontTypeFt: 1870 return "FontTypeFt" 1871 case FontTypeWin32: 1872 return "FontTypeWin32" 1873 case FontTypeQuartz: 1874 return "FontTypeQuartz" 1875 case FontTypeUser: 1876 return "FontTypeUser" 1877 default: 1878 return fmt.Sprintf("FontType(%d)", i) 1879 } 1880} 1881 1882// See cairo_font_face_get_type(). 1883// 1884// C API documentation: http://cairographics.org/manual/cairo-cairo-font-face-t.html#cairo-font-face-get-type 1885func (fontFace *FontFace) GetType() FontType { 1886 ret := FontType(C.cairo_font_face_get_type(fontFace.Ptr)) 1887 if err := fontFace.status(); err != nil { 1888 panic(err) 1889 } 1890 return ret 1891} 1892 1893// See cairo_scaled_font_create(). 1894// 1895// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-create 1896func ScaledFontCreate(fontFace *FontFace, fontMatrix, ctm *Matrix, options *FontOptions) *ScaledFont { 1897 ret := wrapScaledFont(C.cairo_scaled_font_create(fontFace.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(fontMatrix)), (*C.cairo_matrix_t)(unsafe.Pointer(ctm)), options.Ptr)) 1898 if err := ret.status(); err != nil { 1899 panic(err) 1900 } 1901 return ret 1902} 1903 1904// See cairo_scaled_font_status(). 1905// 1906// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-status 1907func (scaledFont *ScaledFont) status() error { 1908 ret := Status(C.cairo_scaled_font_status(scaledFont.Ptr)).toError() 1909 return ret 1910} 1911 1912// See cairo_scaled_font_get_type(). 1913// 1914// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-get-type 1915func (scaledFont *ScaledFont) GetType() FontType { 1916 ret := FontType(C.cairo_scaled_font_get_type(scaledFont.Ptr)) 1917 if err := scaledFont.status(); err != nil { 1918 panic(err) 1919 } 1920 return ret 1921} 1922 1923// See cairo_scaled_font_extents(). 1924// 1925// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-extents 1926func (scaledFont *ScaledFont) Extents(extents *FontExtents) { 1927 C.cairo_scaled_font_extents(scaledFont.Ptr, (*C.cairo_font_extents_t)(unsafe.Pointer(extents))) 1928 if err := scaledFont.status(); err != nil { 1929 panic(err) 1930 } 1931} 1932 1933// See cairo_scaled_font_text_extents(). 1934// 1935// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-text-extents 1936func (scaledFont *ScaledFont) TextExtents(utf8 string, extents *TextExtents) { 1937 c_utf8 := C.CString(utf8) 1938 defer C.free(unsafe.Pointer(c_utf8)) 1939 C.cairo_scaled_font_text_extents(scaledFont.Ptr, c_utf8, (*C.cairo_text_extents_t)(unsafe.Pointer(extents))) 1940 if err := scaledFont.status(); err != nil { 1941 panic(err) 1942 } 1943} 1944 1945// See cairo_scaled_font_glyph_extents(). 1946// 1947// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-glyph-extents 1948func (scaledFont *ScaledFont) GlyphExtents(glyphs []Glyph, extents *TextExtents) { 1949 C.cairo_scaled_font_glyph_extents(scaledFont.Ptr, (*C.cairo_glyph_t)(sliceBytes(unsafe.Pointer(&glyphs))), C.int(len(glyphs)), (*C.cairo_text_extents_t)(unsafe.Pointer(extents))) 1950 if err := scaledFont.status(); err != nil { 1951 panic(err) 1952 } 1953} 1954 1955// See cairo_scaled_font_get_font_face(). 1956// 1957// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-get-font-face 1958func (scaledFont *ScaledFont) GetFontFace() *FontFace { 1959 ret := wrapFontFace(C.cairo_scaled_font_get_font_face(scaledFont.Ptr)) 1960 if err := scaledFont.status(); err != nil { 1961 panic(err) 1962 } 1963 return ret 1964} 1965 1966// See cairo_scaled_font_get_font_matrix(). 1967// 1968// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-get-font-matrix 1969func (scaledFont *ScaledFont) GetFontMatrix(fontMatrix *Matrix) { 1970 C.cairo_scaled_font_get_font_matrix(scaledFont.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(fontMatrix))) 1971 if err := scaledFont.status(); err != nil { 1972 panic(err) 1973 } 1974} 1975 1976// See cairo_scaled_font_get_ctm(). 1977// 1978// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-get-ctm 1979func (scaledFont *ScaledFont) GetCTM(ctm *Matrix) { 1980 C.cairo_scaled_font_get_ctm(scaledFont.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(ctm))) 1981 if err := scaledFont.status(); err != nil { 1982 panic(err) 1983 } 1984} 1985 1986// See cairo_scaled_font_get_scale_matrix(). 1987// 1988// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-get-scale-matrix 1989func (scaledFont *ScaledFont) GetScaleMatrix(scaleMatrix *Matrix) { 1990 C.cairo_scaled_font_get_scale_matrix(scaledFont.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(scaleMatrix))) 1991 if err := scaledFont.status(); err != nil { 1992 panic(err) 1993 } 1994} 1995 1996// See cairo_scaled_font_get_font_options(). 1997// 1998// C API documentation: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-scaled-font-get-font-options 1999func (scaledFont *ScaledFont) GetFontOptions(options *FontOptions) { 2000 C.cairo_scaled_font_get_font_options(scaledFont.Ptr, options.Ptr) 2001 if err := scaledFont.status(); err != nil { 2002 panic(err) 2003 } 2004} 2005 2006// See cairo_toy_font_face_create(). 2007// 2008// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-toy-font-face-create 2009func ToyFontFaceCreate(family string, slant FontSlant, weight FontWeight) *ToyFontFace { 2010 c_family := C.CString(family) 2011 defer C.free(unsafe.Pointer(c_family)) 2012 ret := &ToyFontFace{wrapFontFace(C.cairo_toy_font_face_create(c_family, C.cairo_font_slant_t(slant), C.cairo_font_weight_t(weight)))} 2013 if err := ret.status(); err != nil { 2014 panic(err) 2015 } 2016 return ret 2017} 2018 2019// See cairo_toy_font_face_get_family(). 2020// 2021// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-toy-font-face-get-family 2022func (fontFace *ToyFontFace) GetFamily() string { 2023 ret := C.GoString(C.cairo_toy_font_face_get_family(fontFace.Ptr)) 2024 if err := fontFace.status(); err != nil { 2025 panic(err) 2026 } 2027 return ret 2028} 2029 2030// See cairo_toy_font_face_get_slant(). 2031// 2032// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-toy-font-face-get-slant 2033func (fontFace *ToyFontFace) GetSlant() FontSlant { 2034 ret := FontSlant(C.cairo_toy_font_face_get_slant(fontFace.Ptr)) 2035 if err := fontFace.status(); err != nil { 2036 panic(err) 2037 } 2038 return ret 2039} 2040 2041// See cairo_toy_font_face_get_weight(). 2042// 2043// C API documentation: http://cairographics.org/manual/cairo-text.html#cairo-toy-font-face-get-weight 2044func (fontFace *ToyFontFace) GetWeight() FontWeight { 2045 ret := FontWeight(C.cairo_toy_font_face_get_weight(fontFace.Ptr)) 2046 if err := fontFace.status(); err != nil { 2047 panic(err) 2048 } 2049 return ret 2050} 2051 2052// See cairo_user_font_face_create(). 2053// 2054// C API documentation: http://cairographics.org/manual/cairo-User-Fonts.html#cairo-user-font-face-create 2055func UserFontFaceCreate() *FontFace { 2056 ret := wrapFontFace(C.cairo_user_font_face_create()) 2057 if err := ret.status(); err != nil { 2058 panic(err) 2059 } 2060 return ret 2061} 2062 2063// See cairo_get_operator(). 2064// 2065// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-operator 2066func (cr *Context) GetOperator() Operator { 2067 ret := Operator(C.cairo_get_operator(cr.Ptr)) 2068 if err := cr.status(); err != nil { 2069 panic(err) 2070 } 2071 return ret 2072} 2073 2074// See cairo_get_source(). 2075// 2076// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-source 2077func (cr *Context) GetSource() *Pattern { 2078 ret := wrapPattern(C.cairo_get_source(cr.Ptr)) 2079 if err := cr.status(); err != nil { 2080 panic(err) 2081 } 2082 return ret 2083} 2084 2085// See cairo_get_tolerance(). 2086// 2087// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-tolerance 2088func (cr *Context) GetTolerance() float64 { 2089 ret := float64(C.cairo_get_tolerance(cr.Ptr)) 2090 if err := cr.status(); err != nil { 2091 panic(err) 2092 } 2093 return ret 2094} 2095 2096// See cairo_get_antialias(). 2097// 2098// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-antialias 2099func (cr *Context) GetAntialias() Antialias { 2100 ret := Antialias(C.cairo_get_antialias(cr.Ptr)) 2101 if err := cr.status(); err != nil { 2102 panic(err) 2103 } 2104 return ret 2105} 2106 2107// See cairo_has_current_point(). 2108// 2109// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-has-current-point 2110func (cr *Context) HasCurrentPoint() bool { 2111 ret := C.cairo_has_current_point(cr.Ptr) != 0 2112 if err := cr.status(); err != nil { 2113 panic(err) 2114 } 2115 return ret 2116} 2117 2118// See cairo_get_current_point(). 2119// 2120// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-get-current-point 2121func (cr *Context) GetCurrentPoint() (float64, float64) { 2122 var x C.double 2123 var y C.double 2124 2125 C.cairo_get_current_point(cr.Ptr, &x, &y) 2126 if err := cr.status(); err != nil { 2127 panic(err) 2128 } 2129 return float64(x), float64(y) 2130} 2131 2132// See cairo_get_fill_rule(). 2133// 2134// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-fill-rule 2135func (cr *Context) GetFillRule() FillRule { 2136 ret := FillRule(C.cairo_get_fill_rule(cr.Ptr)) 2137 if err := cr.status(); err != nil { 2138 panic(err) 2139 } 2140 return ret 2141} 2142 2143// See cairo_get_line_width(). 2144// 2145// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-line-width 2146func (cr *Context) GetLineWidth() float64 { 2147 ret := float64(C.cairo_get_line_width(cr.Ptr)) 2148 if err := cr.status(); err != nil { 2149 panic(err) 2150 } 2151 return ret 2152} 2153 2154// See cairo_get_line_cap(). 2155// 2156// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-line-cap 2157func (cr *Context) GetLineCap() LineCap { 2158 ret := LineCap(C.cairo_get_line_cap(cr.Ptr)) 2159 if err := cr.status(); err != nil { 2160 panic(err) 2161 } 2162 return ret 2163} 2164 2165// See cairo_get_line_join(). 2166// 2167// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-line-join 2168func (cr *Context) GetLineJoin() LineJoin { 2169 ret := LineJoin(C.cairo_get_line_join(cr.Ptr)) 2170 if err := cr.status(); err != nil { 2171 panic(err) 2172 } 2173 return ret 2174} 2175 2176// See cairo_get_miter_limit(). 2177// 2178// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-miter-limit 2179func (cr *Context) GetMiterLimit() float64 { 2180 ret := float64(C.cairo_get_miter_limit(cr.Ptr)) 2181 if err := cr.status(); err != nil { 2182 panic(err) 2183 } 2184 return ret 2185} 2186 2187// See cairo_get_dash_count(). 2188// 2189// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-dash-count 2190func (cr *Context) GetDashCount() int { 2191 ret := int(C.cairo_get_dash_count(cr.Ptr)) 2192 if err := cr.status(); err != nil { 2193 panic(err) 2194 } 2195 return ret 2196} 2197 2198// See cairo_get_dash(). 2199// 2200// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-dash 2201func (cr *Context) GetDash(dashes, offset *float64) { 2202 C.cairo_get_dash(cr.Ptr, (*C.double)(unsafe.Pointer(dashes)), (*C.double)(unsafe.Pointer(offset))) 2203 if err := cr.status(); err != nil { 2204 panic(err) 2205 } 2206} 2207 2208// See cairo_get_matrix(). 2209// 2210// C API documentation: http://cairographics.org/manual/cairo-Transformations.html#cairo-get-matrix 2211func (cr *Context) GetMatrix(matrix *Matrix) { 2212 C.cairo_get_matrix(cr.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(matrix))) 2213 if err := cr.status(); err != nil { 2214 panic(err) 2215 } 2216} 2217 2218// See cairo_get_target(). 2219// 2220// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-target 2221func (cr *Context) GetTarget() *Surface { 2222 ret := wrapSurface(C.cairo_get_target(cr.Ptr)) 2223 if err := cr.status(); err != nil { 2224 panic(err) 2225 } 2226 return ret 2227} 2228 2229// See cairo_get_group_target(). 2230// 2231// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-get-group-target 2232func (cr *Context) GetGroupTarget() *Surface { 2233 ret := wrapSurface(C.cairo_get_group_target(cr.Ptr)) 2234 if err := cr.status(); err != nil { 2235 panic(err) 2236 } 2237 return ret 2238} 2239 2240// See cairo_path_data_type_t. 2241// 2242// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-path-data-type-t 2243type PathDataType int 2244 2245const ( 2246 PathMoveTo PathDataType = C.CAIRO_PATH_MOVE_TO 2247 PathLineTo PathDataType = C.CAIRO_PATH_LINE_TO 2248 PathCurveTo PathDataType = C.CAIRO_PATH_CURVE_TO 2249 PathClosePath PathDataType = C.CAIRO_PATH_CLOSE_PATH 2250) 2251 2252// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 2253func (i PathDataType) String() string { 2254 switch i { 2255 case PathMoveTo: 2256 return "PathMoveTo" 2257 case PathLineTo: 2258 return "PathLineTo" 2259 case PathCurveTo: 2260 return "PathCurveTo" 2261 case PathClosePath: 2262 return "PathClosePath" 2263 default: 2264 return fmt.Sprintf("PathDataType(%d)", i) 2265 } 2266} 2267 2268// See cairo_path_t. 2269// 2270// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-path-t 2271type Path struct { 2272 Ptr *C.cairo_path_t 2273} 2274 2275func freePath(obj *Path) { 2276 C.cairo_path_destroy(obj.Ptr) 2277} 2278func wrapPath(p *C.cairo_path_t) *Path { 2279 ret := &Path{p} 2280 runtime.SetFinalizer(ret, freePath) 2281 return ret 2282} 2283 2284// Wrap a C cairo_path_t* found from some external source as a *Path. The Go side will destroy the reference when it's no longer used. 2285func WrapPath(p unsafe.Pointer) *Path { 2286 return wrapPath((*C.cairo_path_t)(p)) 2287} 2288 2289// Construct a Path from a C cairo_path_t* found from some exernal source. It is the caller's responsibility to ensure the pointer lives. 2290func BorrowPath(p unsafe.Pointer) *Path { 2291 return &Path{(*C.cairo_path_t)(p)} 2292} 2293 2294// See cairo_copy_path(). 2295// 2296// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-copy-path 2297func (cr *Context) CopyPath() *Path { 2298 ret := wrapPath(C.cairo_copy_path(cr.Ptr)) 2299 if err := cr.status(); err != nil { 2300 panic(err) 2301 } 2302 return ret 2303} 2304 2305// See cairo_copy_path_flat(). 2306// 2307// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-copy-path-flat 2308func (cr *Context) CopyPathFlat() *Path { 2309 ret := wrapPath(C.cairo_copy_path_flat(cr.Ptr)) 2310 if err := cr.status(); err != nil { 2311 panic(err) 2312 } 2313 return ret 2314} 2315 2316// See cairo_append_path(). 2317// 2318// C API documentation: http://cairographics.org/manual/cairo-Paths.html#cairo-append-path 2319func (cr *Context) AppendPath(path *Path) { 2320 C.cairo_append_path(cr.Ptr, path.Ptr) 2321 if err := cr.status(); err != nil { 2322 panic(err) 2323 } 2324} 2325 2326// See cairo_status(). 2327// 2328// C API documentation: http://cairographics.org/manual/cairo-cairo-t.html#cairo-status 2329func (cr *Context) status() error { 2330 ret := Status(C.cairo_status(cr.Ptr)).toError() 2331 return ret 2332} 2333 2334// See cairo_device_type_t. 2335// 2336// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-type-t 2337type DeviceType int 2338 2339const ( 2340 DeviceTypeDRM DeviceType = C.CAIRO_DEVICE_TYPE_DRM 2341 DeviceTypeGL DeviceType = C.CAIRO_DEVICE_TYPE_GL 2342 DeviceTypeScript DeviceType = C.CAIRO_DEVICE_TYPE_SCRIPT 2343 DeviceTypeXCB DeviceType = C.CAIRO_DEVICE_TYPE_XCB 2344 DeviceTypeXlib DeviceType = C.CAIRO_DEVICE_TYPE_XLIB 2345 DeviceTypeXML DeviceType = C.CAIRO_DEVICE_TYPE_XML 2346 DeviceTypeCOGL DeviceType = C.CAIRO_DEVICE_TYPE_COGL 2347 DeviceTypeWin32 DeviceType = C.CAIRO_DEVICE_TYPE_WIN32 2348 DeviceTypeInvalid DeviceType = C.CAIRO_DEVICE_TYPE_INVALID 2349) 2350 2351// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 2352func (i DeviceType) String() string { 2353 switch i { 2354 case DeviceTypeDRM: 2355 return "DeviceTypeDRM" 2356 case DeviceTypeGL: 2357 return "DeviceTypeGL" 2358 case DeviceTypeScript: 2359 return "DeviceTypeScript" 2360 case DeviceTypeXCB: 2361 return "DeviceTypeXCB" 2362 case DeviceTypeXlib: 2363 return "DeviceTypeXlib" 2364 case DeviceTypeXML: 2365 return "DeviceTypeXML" 2366 case DeviceTypeCOGL: 2367 return "DeviceTypeCOGL" 2368 case DeviceTypeWin32: 2369 return "DeviceTypeWin32" 2370 case DeviceTypeInvalid: 2371 return "DeviceTypeInvalid" 2372 default: 2373 return fmt.Sprintf("DeviceType(%d)", i) 2374 } 2375} 2376 2377// See cairo_device_get_type(). 2378// 2379// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-get-type 2380func (device *Device) GetType() DeviceType { 2381 ret := DeviceType(C.cairo_device_get_type(device.Ptr)) 2382 if err := device.status(); err != nil { 2383 panic(err) 2384 } 2385 return ret 2386} 2387 2388// See cairo_device_status(). 2389// 2390// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-status 2391func (device *Device) status() error { 2392 ret := Status(C.cairo_device_status(device.Ptr)).toError() 2393 return ret 2394} 2395 2396// See cairo_device_acquire(). 2397// 2398// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-acquire 2399func (device *Device) Acquire() error { 2400 ret := Status(C.cairo_device_acquire(device.Ptr)).toError() 2401 if err := device.status(); err != nil { 2402 panic(err) 2403 } 2404 return ret 2405} 2406 2407// See cairo_device_release(). 2408// 2409// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-release 2410func (device *Device) Release() { 2411 C.cairo_device_release(device.Ptr) 2412 if err := device.status(); err != nil { 2413 panic(err) 2414 } 2415} 2416 2417// See cairo_device_flush(). 2418// 2419// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-flush 2420func (device *Device) Flush() { 2421 C.cairo_device_flush(device.Ptr) 2422 if err := device.status(); err != nil { 2423 panic(err) 2424 } 2425} 2426 2427// See cairo_device_finish(). 2428// 2429// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-finish 2430func (device *Device) Finish() { 2431 C.cairo_device_finish(device.Ptr) 2432 if err := device.status(); err != nil { 2433 panic(err) 2434 } 2435} 2436 2437// See cairo_surface_create_similar(). 2438// 2439// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-create-similar 2440func (other *Surface) CreateSimilar(content Content, width, height int) *Surface { 2441 ret := wrapSurface(C.cairo_surface_create_similar(other.Ptr, C.cairo_content_t(content), C.int(width), C.int(height))) 2442 if err := other.status(); err != nil { 2443 panic(err) 2444 } 2445 return ret 2446} 2447 2448// See cairo_surface_create_similar_image(). 2449// 2450// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-create-similar-image 2451func (other *Surface) CreateSimilarImage(format Format, width, height int) *Surface { 2452 ret := wrapSurface(C.cairo_surface_create_similar_image(other.Ptr, C.cairo_format_t(format), C.int(width), C.int(height))) 2453 if err := other.status(); err != nil { 2454 panic(err) 2455 } 2456 return ret 2457} 2458 2459// See cairo_surface_unmap_image(). 2460// 2461// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-unmap-image 2462func (surface *Surface) UnmapImage(image *Surface) { 2463 C.cairo_surface_unmap_image(surface.Ptr, image.Ptr) 2464 if err := surface.status(); err != nil { 2465 panic(err) 2466 } 2467} 2468 2469// See cairo_surface_create_for_rectangle(). 2470// 2471// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-create-for-rectangle 2472func (target *Surface) CreateForRectangle(x, y, width, height float64) *Surface { 2473 ret := wrapSurface(C.cairo_surface_create_for_rectangle(target.Ptr, C.double(x), C.double(y), C.double(width), C.double(height))) 2474 if err := target.status(); err != nil { 2475 panic(err) 2476 } 2477 return ret 2478} 2479 2480// See cairo_surface_observer_mode_t. 2481type SurfaceObserverMode int 2482 2483const ( 2484 SurfaceObserverNormal SurfaceObserverMode = C.CAIRO_SURFACE_OBSERVER_NORMAL 2485 SurfaceObserverRecordOperations SurfaceObserverMode = C.CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS 2486) 2487 2488// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 2489func (i SurfaceObserverMode) String() string { 2490 switch i { 2491 case SurfaceObserverNormal: 2492 return "SurfaceObserverNormal" 2493 case SurfaceObserverRecordOperations: 2494 return "SurfaceObserverRecordOperations" 2495 default: 2496 return fmt.Sprintf("SurfaceObserverMode(%d)", i) 2497 } 2498} 2499 2500// See cairo_surface_create_observer(). 2501func (target *Surface) CreateObserver(mode SurfaceObserverMode) *SurfaceObserver { 2502 ret := &SurfaceObserver{wrapSurface(C.cairo_surface_create_observer(target.Ptr, C.cairo_surface_observer_mode_t(mode)))} 2503 if err := target.status(); err != nil { 2504 panic(err) 2505 } 2506 return ret 2507} 2508 2509// See cairo_surface_observer_elapsed(). 2510func (surface *SurfaceObserver) Elapsed() float64 { 2511 ret := float64(C.cairo_surface_observer_elapsed(surface.Ptr)) 2512 if err := surface.status(); err != nil { 2513 panic(err) 2514 } 2515 return ret 2516} 2517 2518// See cairo_device_observer_elapsed(). 2519// 2520// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-observer-elapsed 2521func (device *Device) ObserverElapsed() float64 { 2522 ret := float64(C.cairo_device_observer_elapsed(device.Ptr)) 2523 if err := device.status(); err != nil { 2524 panic(err) 2525 } 2526 return ret 2527} 2528 2529// See cairo_device_observer_paint_elapsed(). 2530// 2531// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-observer-paint-elapsed 2532func (device *Device) ObserverPaintElapsed() float64 { 2533 ret := float64(C.cairo_device_observer_paint_elapsed(device.Ptr)) 2534 if err := device.status(); err != nil { 2535 panic(err) 2536 } 2537 return ret 2538} 2539 2540// See cairo_device_observer_mask_elapsed(). 2541// 2542// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-observer-mask-elapsed 2543func (device *Device) ObserverMaskElapsed() float64 { 2544 ret := float64(C.cairo_device_observer_mask_elapsed(device.Ptr)) 2545 if err := device.status(); err != nil { 2546 panic(err) 2547 } 2548 return ret 2549} 2550 2551// See cairo_device_observer_fill_elapsed(). 2552// 2553// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-observer-fill-elapsed 2554func (device *Device) ObserverFillElapsed() float64 { 2555 ret := float64(C.cairo_device_observer_fill_elapsed(device.Ptr)) 2556 if err := device.status(); err != nil { 2557 panic(err) 2558 } 2559 return ret 2560} 2561 2562// See cairo_device_observer_stroke_elapsed(). 2563// 2564// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-observer-stroke-elapsed 2565func (device *Device) ObserverStrokeElapsed() float64 { 2566 ret := float64(C.cairo_device_observer_stroke_elapsed(device.Ptr)) 2567 if err := device.status(); err != nil { 2568 panic(err) 2569 } 2570 return ret 2571} 2572 2573// See cairo_device_observer_glyphs_elapsed(). 2574// 2575// C API documentation: http://cairographics.org/manual/cairo-cairo-device-t.html#cairo-device-observer-glyphs-elapsed 2576func (device *Device) ObserverGlyphsElapsed() float64 { 2577 ret := float64(C.cairo_device_observer_glyphs_elapsed(device.Ptr)) 2578 if err := device.status(); err != nil { 2579 panic(err) 2580 } 2581 return ret 2582} 2583 2584// See cairo_surface_finish(). 2585// 2586// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-finish 2587func (surface *Surface) Finish() { 2588 C.cairo_surface_finish(surface.Ptr) 2589 if err := surface.status(); err != nil { 2590 panic(err) 2591 } 2592} 2593 2594// See cairo_surface_get_device(). 2595// 2596// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-get-device 2597func (surface *Surface) GetDevice() *Device { 2598 ret := wrapDevice(C.cairo_surface_get_device(surface.Ptr)) 2599 if err := surface.status(); err != nil { 2600 panic(err) 2601 } 2602 return ret 2603} 2604 2605// See cairo_surface_status(). 2606// 2607// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-status 2608func (surface *Surface) status() error { 2609 ret := Status(C.cairo_surface_status(surface.Ptr)).toError() 2610 return ret 2611} 2612 2613// See cairo_surface_type_t. 2614// 2615// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-type-t 2616type SurfaceType int 2617 2618const ( 2619 SurfaceTypeImage SurfaceType = C.CAIRO_SURFACE_TYPE_IMAGE 2620 SurfaceTypePDF SurfaceType = C.CAIRO_SURFACE_TYPE_PDF 2621 SurfaceTypePS SurfaceType = C.CAIRO_SURFACE_TYPE_PS 2622 SurfaceTypeXlib SurfaceType = C.CAIRO_SURFACE_TYPE_XLIB 2623 SurfaceTypeXCB SurfaceType = C.CAIRO_SURFACE_TYPE_XCB 2624 SurfaceTypeGlitz SurfaceType = C.CAIRO_SURFACE_TYPE_GLITZ 2625 SurfaceTypeQuartz SurfaceType = C.CAIRO_SURFACE_TYPE_QUARTZ 2626 SurfaceTypeWin32 SurfaceType = C.CAIRO_SURFACE_TYPE_WIN32 2627 SurfaceTypeBeos SurfaceType = C.CAIRO_SURFACE_TYPE_BEOS 2628 SurfaceTypeDirectfb SurfaceType = C.CAIRO_SURFACE_TYPE_DIRECTFB 2629 SurfaceTypeSVG SurfaceType = C.CAIRO_SURFACE_TYPE_SVG 2630 SurfaceTypeOS2 SurfaceType = C.CAIRO_SURFACE_TYPE_OS2 2631 SurfaceTypeWin32Printing SurfaceType = C.CAIRO_SURFACE_TYPE_WIN32_PRINTING 2632 SurfaceTypeQuartzImage SurfaceType = C.CAIRO_SURFACE_TYPE_QUARTZ_IMAGE 2633 SurfaceTypeScript SurfaceType = C.CAIRO_SURFACE_TYPE_SCRIPT 2634 SurfaceTypeQt SurfaceType = C.CAIRO_SURFACE_TYPE_QT 2635 SurfaceTypeRecording SurfaceType = C.CAIRO_SURFACE_TYPE_RECORDING 2636 SurfaceTypeVG SurfaceType = C.CAIRO_SURFACE_TYPE_VG 2637 SurfaceTypeGL SurfaceType = C.CAIRO_SURFACE_TYPE_GL 2638 SurfaceTypeDRM SurfaceType = C.CAIRO_SURFACE_TYPE_DRM 2639 SurfaceTypeTee SurfaceType = C.CAIRO_SURFACE_TYPE_TEE 2640 SurfaceTypeXML SurfaceType = C.CAIRO_SURFACE_TYPE_XML 2641 SurfaceTypeSkia SurfaceType = C.CAIRO_SURFACE_TYPE_SKIA 2642 SurfaceTypeSubsurface SurfaceType = C.CAIRO_SURFACE_TYPE_SUBSURFACE 2643 SurfaceTypeCOGL SurfaceType = C.CAIRO_SURFACE_TYPE_COGL 2644) 2645 2646// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 2647func (i SurfaceType) String() string { 2648 switch i { 2649 case SurfaceTypeImage: 2650 return "SurfaceTypeImage" 2651 case SurfaceTypePDF: 2652 return "SurfaceTypePDF" 2653 case SurfaceTypePS: 2654 return "SurfaceTypePS" 2655 case SurfaceTypeXlib: 2656 return "SurfaceTypeXlib" 2657 case SurfaceTypeXCB: 2658 return "SurfaceTypeXCB" 2659 case SurfaceTypeGlitz: 2660 return "SurfaceTypeGlitz" 2661 case SurfaceTypeQuartz: 2662 return "SurfaceTypeQuartz" 2663 case SurfaceTypeWin32: 2664 return "SurfaceTypeWin32" 2665 case SurfaceTypeBeos: 2666 return "SurfaceTypeBeos" 2667 case SurfaceTypeDirectfb: 2668 return "SurfaceTypeDirectfb" 2669 case SurfaceTypeSVG: 2670 return "SurfaceTypeSVG" 2671 case SurfaceTypeOS2: 2672 return "SurfaceTypeOS2" 2673 case SurfaceTypeWin32Printing: 2674 return "SurfaceTypeWin32Printing" 2675 case SurfaceTypeQuartzImage: 2676 return "SurfaceTypeQuartzImage" 2677 case SurfaceTypeScript: 2678 return "SurfaceTypeScript" 2679 case SurfaceTypeQt: 2680 return "SurfaceTypeQt" 2681 case SurfaceTypeRecording: 2682 return "SurfaceTypeRecording" 2683 case SurfaceTypeVG: 2684 return "SurfaceTypeVG" 2685 case SurfaceTypeGL: 2686 return "SurfaceTypeGL" 2687 case SurfaceTypeDRM: 2688 return "SurfaceTypeDRM" 2689 case SurfaceTypeTee: 2690 return "SurfaceTypeTee" 2691 case SurfaceTypeXML: 2692 return "SurfaceTypeXML" 2693 case SurfaceTypeSkia: 2694 return "SurfaceTypeSkia" 2695 case SurfaceTypeSubsurface: 2696 return "SurfaceTypeSubsurface" 2697 case SurfaceTypeCOGL: 2698 return "SurfaceTypeCOGL" 2699 default: 2700 return fmt.Sprintf("SurfaceType(%d)", i) 2701 } 2702} 2703 2704// See cairo_surface_get_type(). 2705// 2706// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-get-type 2707func (surface *Surface) GetType() SurfaceType { 2708 ret := SurfaceType(C.cairo_surface_get_type(surface.Ptr)) 2709 if err := surface.status(); err != nil { 2710 panic(err) 2711 } 2712 return ret 2713} 2714 2715// See cairo_surface_get_content(). 2716// 2717// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-get-content 2718func (surface *Surface) GetContent() Content { 2719 ret := Content(C.cairo_surface_get_content(surface.Ptr)) 2720 if err := surface.status(); err != nil { 2721 panic(err) 2722 } 2723 return ret 2724} 2725 2726// See cairo_surface_supports_mime_type(). 2727// 2728// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-supports-mime-type 2729func (surface *Surface) SupportsMimeType(mimeType string) bool { 2730 c_mimeType := C.CString(mimeType) 2731 defer C.free(unsafe.Pointer(c_mimeType)) 2732 ret := C.cairo_surface_supports_mime_type(surface.Ptr, c_mimeType) != 0 2733 if err := surface.status(); err != nil { 2734 panic(err) 2735 } 2736 return ret 2737} 2738 2739// See cairo_surface_get_font_options(). 2740// 2741// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-get-font-options 2742func (surface *Surface) GetFontOptions(options *FontOptions) { 2743 C.cairo_surface_get_font_options(surface.Ptr, options.Ptr) 2744 if err := surface.status(); err != nil { 2745 panic(err) 2746 } 2747} 2748 2749// See cairo_surface_flush(). 2750// 2751// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-flush 2752func (surface *Surface) Flush() { 2753 C.cairo_surface_flush(surface.Ptr) 2754 if err := surface.status(); err != nil { 2755 panic(err) 2756 } 2757} 2758 2759// See cairo_surface_mark_dirty(). 2760// 2761// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-mark-dirty 2762func (surface *Surface) MarkDirty() { 2763 C.cairo_surface_mark_dirty(surface.Ptr) 2764 if err := surface.status(); err != nil { 2765 panic(err) 2766 } 2767} 2768 2769// See cairo_surface_mark_dirty_rectangle(). 2770// 2771// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-mark-dirty-rectangle 2772func (surface *Surface) MarkDirtyRectangle(x, y, width, height int) { 2773 C.cairo_surface_mark_dirty_rectangle(surface.Ptr, C.int(x), C.int(y), C.int(width), C.int(height)) 2774 if err := surface.status(); err != nil { 2775 panic(err) 2776 } 2777} 2778 2779// See cairo_surface_set_device_scale(). 2780// 2781// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-set-device-scale 2782func (surface *Surface) SetDeviceScale(xScale, yScale float64) { 2783 C.cairo_surface_set_device_scale(surface.Ptr, C.double(xScale), C.double(yScale)) 2784 if err := surface.status(); err != nil { 2785 panic(err) 2786 } 2787} 2788 2789// See cairo_surface_get_device_scale(). 2790// 2791// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-get-device-scale 2792func (surface *Surface) GetDeviceScale() (float64, float64) { 2793 var xScale C.double 2794 var yScale C.double 2795 2796 C.cairo_surface_get_device_scale(surface.Ptr, &xScale, &yScale) 2797 if err := surface.status(); err != nil { 2798 panic(err) 2799 } 2800 return float64(xScale), float64(yScale) 2801} 2802 2803// See cairo_surface_set_device_offset(). 2804// 2805// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-set-device-offset 2806func (surface *Surface) SetDeviceOffset(xOffset, yOffset float64) { 2807 C.cairo_surface_set_device_offset(surface.Ptr, C.double(xOffset), C.double(yOffset)) 2808 if err := surface.status(); err != nil { 2809 panic(err) 2810 } 2811} 2812 2813// See cairo_surface_get_device_offset(). 2814// 2815// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-get-device-offset 2816func (surface *Surface) GetDeviceOffset() (float64, float64) { 2817 var xOffset C.double 2818 var yOffset C.double 2819 2820 C.cairo_surface_get_device_offset(surface.Ptr, &xOffset, &yOffset) 2821 if err := surface.status(); err != nil { 2822 panic(err) 2823 } 2824 return float64(xOffset), float64(yOffset) 2825} 2826 2827// See cairo_surface_set_fallback_resolution(). 2828// 2829// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-set-fallback-resolution 2830func (surface *Surface) SetFallbackResolution(xPixelsPerInch, yPixelsPerInch float64) { 2831 C.cairo_surface_set_fallback_resolution(surface.Ptr, C.double(xPixelsPerInch), C.double(yPixelsPerInch)) 2832 if err := surface.status(); err != nil { 2833 panic(err) 2834 } 2835} 2836 2837// See cairo_surface_get_fallback_resolution(). 2838// 2839// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-get-fallback-resolution 2840func (surface *Surface) GetFallbackResolution() (float64, float64) { 2841 var xPixelsPerInch C.double 2842 var yPixelsPerInch C.double 2843 2844 C.cairo_surface_get_fallback_resolution(surface.Ptr, &xPixelsPerInch, &yPixelsPerInch) 2845 if err := surface.status(); err != nil { 2846 panic(err) 2847 } 2848 return float64(xPixelsPerInch), float64(yPixelsPerInch) 2849} 2850 2851// See cairo_surface_copy_page(). 2852// 2853// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-copy-page 2854func (surface *Surface) CopyPage() { 2855 C.cairo_surface_copy_page(surface.Ptr) 2856 if err := surface.status(); err != nil { 2857 panic(err) 2858 } 2859} 2860 2861// See cairo_surface_show_page(). 2862// 2863// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-show-page 2864func (surface *Surface) ShowPage() { 2865 C.cairo_surface_show_page(surface.Ptr) 2866 if err := surface.status(); err != nil { 2867 panic(err) 2868 } 2869} 2870 2871// See cairo_surface_has_show_text_glyphs(). 2872// 2873// C API documentation: http://cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-has-show-text-glyphs 2874func (surface *Surface) HasShowTextGlyphs() bool { 2875 ret := C.cairo_surface_has_show_text_glyphs(surface.Ptr) != 0 2876 if err := surface.status(); err != nil { 2877 panic(err) 2878 } 2879 return ret 2880} 2881 2882// See cairo_image_surface_create(). 2883// 2884// C API documentation: http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-image-surface-create 2885func ImageSurfaceCreate(format Format, width, height int) *ImageSurface { 2886 ret := &ImageSurface{wrapSurface(C.cairo_image_surface_create(C.cairo_format_t(format), C.int(width), C.int(height)))} 2887 if err := ret.status(); err != nil { 2888 panic(err) 2889 } 2890 return ret 2891} 2892 2893// See cairo_format_stride_for_width(). 2894// 2895// C API documentation: http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-format-stride-for-width 2896func (format Format) StrideForWidth(width int) int { 2897 ret := int(C.cairo_format_stride_for_width(C.cairo_format_t(format), C.int(width))) 2898 return ret 2899} 2900 2901// See cairo_image_surface_get_data(). 2902// 2903// C API documentation: http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-image-surface-get-data 2904func (i *ImageSurface) Data() []byte { 2905 buf := C.cairo_image_surface_get_data(i.Ptr) 2906 return C.GoBytes(unsafe.Pointer(buf), C.int(i.GetStride()*i.GetHeight())) 2907} 2908 2909// See cairo_image_surface_get_format(). 2910// 2911// C API documentation: http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-image-surface-get-format 2912func (surface *ImageSurface) GetFormat() Format { 2913 ret := Format(C.cairo_image_surface_get_format(surface.Ptr)) 2914 if err := surface.status(); err != nil { 2915 panic(err) 2916 } 2917 return ret 2918} 2919 2920// See cairo_image_surface_get_width(). 2921// 2922// C API documentation: http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-image-surface-get-width 2923func (surface *ImageSurface) GetWidth() int { 2924 ret := int(C.cairo_image_surface_get_width(surface.Ptr)) 2925 if err := surface.status(); err != nil { 2926 panic(err) 2927 } 2928 return ret 2929} 2930 2931// See cairo_image_surface_get_height(). 2932// 2933// C API documentation: http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-image-surface-get-height 2934func (surface *ImageSurface) GetHeight() int { 2935 ret := int(C.cairo_image_surface_get_height(surface.Ptr)) 2936 if err := surface.status(); err != nil { 2937 panic(err) 2938 } 2939 return ret 2940} 2941 2942// See cairo_image_surface_get_stride(). 2943// 2944// C API documentation: http://cairographics.org/manual/cairo-Image-Surfaces.html#cairo-image-surface-get-stride 2945func (surface *ImageSurface) GetStride() int { 2946 ret := int(C.cairo_image_surface_get_stride(surface.Ptr)) 2947 if err := surface.status(); err != nil { 2948 panic(err) 2949 } 2950 return ret 2951} 2952 2953// See cairo_recording_surface_create(). 2954// 2955// C API documentation: http://cairographics.org/manual/cairo-Recording-Surfaces.html#cairo-recording-surface-create 2956func RecordingSurfaceCreate(content Content, extents *Rectangle) *RecordingSurface { 2957 ret := &RecordingSurface{wrapSurface(C.cairo_recording_surface_create(C.cairo_content_t(content), (*C.cairo_rectangle_t)(unsafe.Pointer(extents))))} 2958 if err := ret.status(); err != nil { 2959 panic(err) 2960 } 2961 return ret 2962} 2963 2964// See cairo_recording_surface_ink_extents(). 2965// 2966// C API documentation: http://cairographics.org/manual/cairo-Recording-Surfaces.html#cairo-recording-surface-ink-extents 2967func (surface *RecordingSurface) InkExtents() (float64, float64, float64, float64) { 2968 var x0 C.double 2969 var y0 C.double 2970 var width C.double 2971 var height C.double 2972 2973 C.cairo_recording_surface_ink_extents(surface.Ptr, &x0, &y0, &width, &height) 2974 if err := surface.status(); err != nil { 2975 panic(err) 2976 } 2977 return float64(x0), float64(y0), float64(width), float64(height) 2978} 2979 2980// See cairo_recording_surface_get_extents(). 2981// 2982// C API documentation: http://cairographics.org/manual/cairo-Recording-Surfaces.html#cairo-recording-surface-get-extents 2983func (surface *RecordingSurface) GetExtents(extents *Rectangle) bool { 2984 ret := C.cairo_recording_surface_get_extents(surface.Ptr, (*C.cairo_rectangle_t)(unsafe.Pointer(extents))) != 0 2985 if err := surface.status(); err != nil { 2986 panic(err) 2987 } 2988 return ret 2989} 2990 2991// See cairo_pattern_create_rgb(). 2992// 2993// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-create-rgb 2994func PatternCreateRGB(red, green, blue float64) *Pattern { 2995 ret := wrapPattern(C.cairo_pattern_create_rgb(C.double(red), C.double(green), C.double(blue))) 2996 if err := ret.status(); err != nil { 2997 panic(err) 2998 } 2999 return ret 3000} 3001 3002// See cairo_pattern_create_rgba(). 3003// 3004// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-create-rgba 3005func PatternCreateRGBA(red, green, blue, alpha float64) *Pattern { 3006 ret := wrapPattern(C.cairo_pattern_create_rgba(C.double(red), C.double(green), C.double(blue), C.double(alpha))) 3007 if err := ret.status(); err != nil { 3008 panic(err) 3009 } 3010 return ret 3011} 3012 3013// See cairo_pattern_create_for_surface(). 3014// 3015// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-create-for-surface 3016func PatternCreateForSurface(surface *Surface) *Pattern { 3017 ret := wrapPattern(C.cairo_pattern_create_for_surface(surface.Ptr)) 3018 if err := ret.status(); err != nil { 3019 panic(err) 3020 } 3021 return ret 3022} 3023 3024// See cairo_pattern_create_linear(). 3025// 3026// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-create-linear 3027func PatternCreateLinear(x0, y0, x1, y1 float64) *Pattern { 3028 ret := wrapPattern(C.cairo_pattern_create_linear(C.double(x0), C.double(y0), C.double(x1), C.double(y1))) 3029 if err := ret.status(); err != nil { 3030 panic(err) 3031 } 3032 return ret 3033} 3034 3035// See cairo_pattern_create_radial(). 3036// 3037// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-create-radial 3038func PatternCreateRadial(cx0, cy0, radius0, cx1, cy1, radius1 float64) *Pattern { 3039 ret := wrapPattern(C.cairo_pattern_create_radial(C.double(cx0), C.double(cy0), C.double(radius0), C.double(cx1), C.double(cy1), C.double(radius1))) 3040 if err := ret.status(); err != nil { 3041 panic(err) 3042 } 3043 return ret 3044} 3045 3046// See cairo_pattern_create_mesh(). 3047// 3048// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-create-mesh 3049func PatternCreateMesh() *Pattern { 3050 ret := wrapPattern(C.cairo_pattern_create_mesh()) 3051 if err := ret.status(); err != nil { 3052 panic(err) 3053 } 3054 return ret 3055} 3056 3057// See cairo_pattern_status(). 3058// 3059// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-status 3060func (pattern *Pattern) status() error { 3061 ret := Status(C.cairo_pattern_status(pattern.Ptr)).toError() 3062 return ret 3063} 3064 3065// See cairo_pattern_type_t. 3066// 3067// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-type-t 3068type PatternType int 3069 3070const ( 3071 PatternTypeSolid PatternType = C.CAIRO_PATTERN_TYPE_SOLID 3072 PatternTypeSurface PatternType = C.CAIRO_PATTERN_TYPE_SURFACE 3073 PatternTypeLinear PatternType = C.CAIRO_PATTERN_TYPE_LINEAR 3074 PatternTypeRadial PatternType = C.CAIRO_PATTERN_TYPE_RADIAL 3075 PatternTypeMesh PatternType = C.CAIRO_PATTERN_TYPE_MESH 3076 PatternTypeRasterSource PatternType = C.CAIRO_PATTERN_TYPE_RASTER_SOURCE 3077) 3078 3079// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 3080func (i PatternType) String() string { 3081 switch i { 3082 case PatternTypeSolid: 3083 return "PatternTypeSolid" 3084 case PatternTypeSurface: 3085 return "PatternTypeSurface" 3086 case PatternTypeLinear: 3087 return "PatternTypeLinear" 3088 case PatternTypeRadial: 3089 return "PatternTypeRadial" 3090 case PatternTypeMesh: 3091 return "PatternTypeMesh" 3092 case PatternTypeRasterSource: 3093 return "PatternTypeRasterSource" 3094 default: 3095 return fmt.Sprintf("PatternType(%d)", i) 3096 } 3097} 3098 3099// See cairo_pattern_get_type(). 3100// 3101// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-get-type 3102func (pattern *Pattern) GetType() PatternType { 3103 ret := PatternType(C.cairo_pattern_get_type(pattern.Ptr)) 3104 if err := pattern.status(); err != nil { 3105 panic(err) 3106 } 3107 return ret 3108} 3109 3110// See cairo_pattern_add_color_stop_rgb(). 3111// 3112// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-add-color-stop-rgb 3113func (pattern *Pattern) AddColorStopRGB(offset, red, green, blue float64) { 3114 C.cairo_pattern_add_color_stop_rgb(pattern.Ptr, C.double(offset), C.double(red), C.double(green), C.double(blue)) 3115 if err := pattern.status(); err != nil { 3116 panic(err) 3117 } 3118} 3119 3120// See cairo_pattern_add_color_stop_rgba(). 3121// 3122// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-add-color-stop-rgba 3123func (pattern *Pattern) AddColorStopRGBA(offset, red, green, blue, alpha float64) { 3124 C.cairo_pattern_add_color_stop_rgba(pattern.Ptr, C.double(offset), C.double(red), C.double(green), C.double(blue), C.double(alpha)) 3125 if err := pattern.status(); err != nil { 3126 panic(err) 3127 } 3128} 3129 3130// See cairo_mesh_pattern_begin_patch(). 3131// 3132// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-mesh-pattern-begin-patch 3133func (pattern *MeshPattern) BeginPatch() { 3134 C.cairo_mesh_pattern_begin_patch(pattern.Ptr) 3135 if err := pattern.status(); err != nil { 3136 panic(err) 3137 } 3138} 3139 3140// See cairo_mesh_pattern_end_patch(). 3141// 3142// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-mesh-pattern-end-patch 3143func (pattern *MeshPattern) EndPatch() { 3144 C.cairo_mesh_pattern_end_patch(pattern.Ptr) 3145 if err := pattern.status(); err != nil { 3146 panic(err) 3147 } 3148} 3149 3150// See cairo_mesh_pattern_curve_to(). 3151// 3152// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-mesh-pattern-curve-to 3153func (pattern *MeshPattern) CurveTo(x1, y1, x2, y2, x3, y3 float64) { 3154 C.cairo_mesh_pattern_curve_to(pattern.Ptr, C.double(x1), C.double(y1), C.double(x2), C.double(y2), C.double(x3), C.double(y3)) 3155 if err := pattern.status(); err != nil { 3156 panic(err) 3157 } 3158} 3159 3160// See cairo_mesh_pattern_line_to(). 3161// 3162// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-mesh-pattern-line-to 3163func (pattern *MeshPattern) LineTo(x, y float64) { 3164 C.cairo_mesh_pattern_line_to(pattern.Ptr, C.double(x), C.double(y)) 3165 if err := pattern.status(); err != nil { 3166 panic(err) 3167 } 3168} 3169 3170// See cairo_mesh_pattern_move_to(). 3171// 3172// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-mesh-pattern-move-to 3173func (pattern *MeshPattern) MoveTo(x, y float64) { 3174 C.cairo_mesh_pattern_move_to(pattern.Ptr, C.double(x), C.double(y)) 3175 if err := pattern.status(); err != nil { 3176 panic(err) 3177 } 3178} 3179 3180// See cairo_mesh_pattern_set_control_point(). 3181// 3182// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-mesh-pattern-set-control-point 3183func (pattern *MeshPattern) SetControlPoint(pointNum int, x, y float64) { 3184 C.cairo_mesh_pattern_set_control_point(pattern.Ptr, C.uint(pointNum), C.double(x), C.double(y)) 3185 if err := pattern.status(); err != nil { 3186 panic(err) 3187 } 3188} 3189 3190// See cairo_mesh_pattern_set_corner_color_rgb(). 3191// 3192// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-mesh-pattern-set-corner-color-rgb 3193func (pattern *MeshPattern) SetCornerColorRGB(cornerNum int, red, green, blue float64) { 3194 C.cairo_mesh_pattern_set_corner_color_rgb(pattern.Ptr, C.uint(cornerNum), C.double(red), C.double(green), C.double(blue)) 3195 if err := pattern.status(); err != nil { 3196 panic(err) 3197 } 3198} 3199 3200// See cairo_mesh_pattern_set_corner_color_rgba(). 3201// 3202// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-mesh-pattern-set-corner-color-rgba 3203func (pattern *MeshPattern) SetCornerColorRGBA(cornerNum int, red, green, blue, alpha float64) { 3204 C.cairo_mesh_pattern_set_corner_color_rgba(pattern.Ptr, C.uint(cornerNum), C.double(red), C.double(green), C.double(blue), C.double(alpha)) 3205 if err := pattern.status(); err != nil { 3206 panic(err) 3207 } 3208} 3209 3210// See cairo_pattern_set_matrix(). 3211// 3212// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-set-matrix 3213func (pattern *Pattern) SetMatrix(matrix *Matrix) { 3214 C.cairo_pattern_set_matrix(pattern.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(matrix))) 3215 if err := pattern.status(); err != nil { 3216 panic(err) 3217 } 3218} 3219 3220// See cairo_pattern_get_matrix(). 3221// 3222// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-get-matrix 3223func (pattern *Pattern) GetMatrix(matrix *Matrix) { 3224 C.cairo_pattern_get_matrix(pattern.Ptr, (*C.cairo_matrix_t)(unsafe.Pointer(matrix))) 3225 if err := pattern.status(); err != nil { 3226 panic(err) 3227 } 3228} 3229 3230// See cairo_extend_t. 3231// 3232// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-extend-t 3233type Extend int 3234 3235const ( 3236 ExtendNone Extend = C.CAIRO_EXTEND_NONE 3237 ExtendRepeat Extend = C.CAIRO_EXTEND_REPEAT 3238 ExtendReflect Extend = C.CAIRO_EXTEND_REFLECT 3239 ExtendPad Extend = C.CAIRO_EXTEND_PAD 3240) 3241 3242// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 3243func (i Extend) String() string { 3244 switch i { 3245 case ExtendNone: 3246 return "ExtendNone" 3247 case ExtendRepeat: 3248 return "ExtendRepeat" 3249 case ExtendReflect: 3250 return "ExtendReflect" 3251 case ExtendPad: 3252 return "ExtendPad" 3253 default: 3254 return fmt.Sprintf("Extend(%d)", i) 3255 } 3256} 3257 3258// See cairo_pattern_set_extend(). 3259// 3260// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-set-extend 3261func (pattern *Pattern) SetExtend(extend Extend) { 3262 C.cairo_pattern_set_extend(pattern.Ptr, C.cairo_extend_t(extend)) 3263 if err := pattern.status(); err != nil { 3264 panic(err) 3265 } 3266} 3267 3268// See cairo_pattern_get_extend(). 3269// 3270// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-get-extend 3271func (pattern *Pattern) GetExtend() Extend { 3272 ret := Extend(C.cairo_pattern_get_extend(pattern.Ptr)) 3273 if err := pattern.status(); err != nil { 3274 panic(err) 3275 } 3276 return ret 3277} 3278 3279// See cairo_filter_t. 3280// 3281// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-filter-t 3282type Filter int 3283 3284const ( 3285 FilterFast Filter = C.CAIRO_FILTER_FAST 3286 FilterGood Filter = C.CAIRO_FILTER_GOOD 3287 FilterBest Filter = C.CAIRO_FILTER_BEST 3288 FilterNearest Filter = C.CAIRO_FILTER_NEAREST 3289 FilterBilinear Filter = C.CAIRO_FILTER_BILINEAR 3290 FilterGaussian Filter = C.CAIRO_FILTER_GAUSSIAN 3291) 3292 3293// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 3294func (i Filter) String() string { 3295 switch i { 3296 case FilterFast: 3297 return "FilterFast" 3298 case FilterGood: 3299 return "FilterGood" 3300 case FilterBest: 3301 return "FilterBest" 3302 case FilterNearest: 3303 return "FilterNearest" 3304 case FilterBilinear: 3305 return "FilterBilinear" 3306 case FilterGaussian: 3307 return "FilterGaussian" 3308 default: 3309 return fmt.Sprintf("Filter(%d)", i) 3310 } 3311} 3312 3313// See cairo_pattern_set_filter(). 3314// 3315// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-set-filter 3316func (pattern *Pattern) SetFilter(filter Filter) { 3317 C.cairo_pattern_set_filter(pattern.Ptr, C.cairo_filter_t(filter)) 3318 if err := pattern.status(); err != nil { 3319 panic(err) 3320 } 3321} 3322 3323// See cairo_pattern_get_filter(). 3324// 3325// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-pattern-get-filter 3326func (pattern *Pattern) GetFilter() Filter { 3327 ret := Filter(C.cairo_pattern_get_filter(pattern.Ptr)) 3328 if err := pattern.status(); err != nil { 3329 panic(err) 3330 } 3331 return ret 3332} 3333 3334// See cairo_mesh_pattern_get_path(). 3335// 3336// C API documentation: http://cairographics.org/manual/cairo-cairo-pattern-t.html#cairo-mesh-pattern-get-path 3337func (pattern *MeshPattern) GetPath(patchNum int) *Path { 3338 ret := wrapPath(C.cairo_mesh_pattern_get_path(pattern.Ptr, C.uint(patchNum))) 3339 if err := pattern.status(); err != nil { 3340 panic(err) 3341 } 3342 return ret 3343} 3344 3345// See cairo_matrix_init_identity(). 3346// 3347// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-init-identity 3348func (matrix *Matrix) InitIdentity() { 3349 C.cairo_matrix_init_identity((*C.cairo_matrix_t)(unsafe.Pointer(matrix))) 3350} 3351 3352// See cairo_matrix_init_translate(). 3353// 3354// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-init-translate 3355func (matrix *Matrix) InitTranslate(tx, ty float64) { 3356 C.cairo_matrix_init_translate((*C.cairo_matrix_t)(unsafe.Pointer(matrix)), C.double(tx), C.double(ty)) 3357} 3358 3359// See cairo_matrix_init_scale(). 3360// 3361// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-init-scale 3362func (matrix *Matrix) InitScale(sx, sy float64) { 3363 C.cairo_matrix_init_scale((*C.cairo_matrix_t)(unsafe.Pointer(matrix)), C.double(sx), C.double(sy)) 3364} 3365 3366// See cairo_matrix_init_rotate(). 3367// 3368// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-init-rotate 3369func (matrix *Matrix) InitRotate(radians float64) { 3370 C.cairo_matrix_init_rotate((*C.cairo_matrix_t)(unsafe.Pointer(matrix)), C.double(radians)) 3371} 3372 3373// See cairo_matrix_translate(). 3374// 3375// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-translate 3376func (matrix *Matrix) Translate(tx, ty float64) { 3377 C.cairo_matrix_translate((*C.cairo_matrix_t)(unsafe.Pointer(matrix)), C.double(tx), C.double(ty)) 3378} 3379 3380// See cairo_matrix_scale(). 3381// 3382// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-scale 3383func (matrix *Matrix) Scale(sx, sy float64) { 3384 C.cairo_matrix_scale((*C.cairo_matrix_t)(unsafe.Pointer(matrix)), C.double(sx), C.double(sy)) 3385} 3386 3387// See cairo_matrix_rotate(). 3388// 3389// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-rotate 3390func (matrix *Matrix) Rotate(radians float64) { 3391 C.cairo_matrix_rotate((*C.cairo_matrix_t)(unsafe.Pointer(matrix)), C.double(radians)) 3392} 3393 3394// See cairo_matrix_invert(). 3395// 3396// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-invert 3397func (matrix *Matrix) Invert() error { 3398 ret := Status(C.cairo_matrix_invert((*C.cairo_matrix_t)(unsafe.Pointer(matrix)))).toError() 3399 return ret 3400} 3401 3402// See cairo_matrix_multiply(). 3403// 3404// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-multiply 3405func (result *Matrix) Multiply(a, b *Matrix) { 3406 C.cairo_matrix_multiply((*C.cairo_matrix_t)(unsafe.Pointer(result)), (*C.cairo_matrix_t)(unsafe.Pointer(a)), (*C.cairo_matrix_t)(unsafe.Pointer(b))) 3407} 3408 3409// See cairo_matrix_transform_distance(). 3410// 3411// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-transform-distance 3412func (matrix *Matrix) TransformDistance(dx, dy *float64) { 3413 C.cairo_matrix_transform_distance((*C.cairo_matrix_t)(unsafe.Pointer(matrix)), (*C.double)(unsafe.Pointer(dx)), (*C.double)(unsafe.Pointer(dy))) 3414} 3415 3416// See cairo_matrix_transform_point(). 3417// 3418// C API documentation: http://cairographics.org/manual/cairo-cairo-matrix-t.html#cairo-matrix-transform-point 3419func (matrix *Matrix) TransformPoint(x, y *float64) { 3420 C.cairo_matrix_transform_point((*C.cairo_matrix_t)(unsafe.Pointer(matrix)), (*C.double)(unsafe.Pointer(x)), (*C.double)(unsafe.Pointer(y))) 3421} 3422 3423// See cairo_region_t. 3424// 3425// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-t 3426type Region struct { 3427 Ptr *C.cairo_region_t 3428} 3429 3430func freeRegion(obj *Region) { 3431 C.cairo_region_destroy(obj.Ptr) 3432} 3433func wrapRegion(p *C.cairo_region_t) *Region { 3434 ret := &Region{p} 3435 runtime.SetFinalizer(ret, freeRegion) 3436 return ret 3437} 3438 3439// Wrap a C cairo_region_t* found from some external source as a *Region. The Go side will destroy the reference when it's no longer used. 3440func WrapRegion(p unsafe.Pointer) *Region { 3441 return wrapRegion((*C.cairo_region_t)(p)) 3442} 3443 3444// Construct a Region from a C cairo_region_t* found from some exernal source. It is the caller's responsibility to ensure the pointer lives. 3445func BorrowRegion(p unsafe.Pointer) *Region { 3446 return &Region{(*C.cairo_region_t)(p)} 3447} 3448 3449// See cairo_region_overlap_t. 3450// 3451// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-overlap-t 3452type RegionOverlap int 3453 3454const ( 3455 RegionOverlapIn RegionOverlap = C.CAIRO_REGION_OVERLAP_IN 3456 RegionOverlapOut RegionOverlap = C.CAIRO_REGION_OVERLAP_OUT 3457 RegionOverlapPart RegionOverlap = C.CAIRO_REGION_OVERLAP_PART 3458) 3459 3460// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 3461func (i RegionOverlap) String() string { 3462 switch i { 3463 case RegionOverlapIn: 3464 return "RegionOverlapIn" 3465 case RegionOverlapOut: 3466 return "RegionOverlapOut" 3467 case RegionOverlapPart: 3468 return "RegionOverlapPart" 3469 default: 3470 return fmt.Sprintf("RegionOverlap(%d)", i) 3471 } 3472} 3473 3474// See cairo_region_create(). 3475// 3476// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-create 3477func RegionCreate() *Region { 3478 ret := wrapRegion(C.cairo_region_create()) 3479 if err := ret.status(); err != nil { 3480 panic(err) 3481 } 3482 return ret 3483} 3484 3485// See cairo_region_copy(). 3486// 3487// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-copy 3488func (original *Region) Copy() *Region { 3489 ret := wrapRegion(C.cairo_region_copy(original.Ptr)) 3490 if err := original.status(); err != nil { 3491 panic(err) 3492 } 3493 return ret 3494} 3495 3496// See cairo_region_equal(). 3497// 3498// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-equal 3499func (a *Region) Equal(b *Region) bool { 3500 ret := C.cairo_region_equal(a.Ptr, b.Ptr) != 0 3501 if err := a.status(); err != nil { 3502 panic(err) 3503 } 3504 return ret 3505} 3506 3507// See cairo_region_status(). 3508// 3509// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-status 3510func (region *Region) status() error { 3511 ret := Status(C.cairo_region_status(region.Ptr)).toError() 3512 return ret 3513} 3514 3515// See cairo_region_num_rectangles(). 3516// 3517// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-num-rectangles 3518func (region *Region) NumRectangles() int { 3519 ret := int(C.cairo_region_num_rectangles(region.Ptr)) 3520 if err := region.status(); err != nil { 3521 panic(err) 3522 } 3523 return ret 3524} 3525 3526// See cairo_region_is_empty(). 3527// 3528// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-is-empty 3529func (region *Region) IsEmpty() bool { 3530 ret := C.cairo_region_is_empty(region.Ptr) != 0 3531 if err := region.status(); err != nil { 3532 panic(err) 3533 } 3534 return ret 3535} 3536 3537// See cairo_region_contains_point(). 3538// 3539// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-contains-point 3540func (region *Region) ContainsPoint(x, y int) bool { 3541 ret := C.cairo_region_contains_point(region.Ptr, C.int(x), C.int(y)) != 0 3542 if err := region.status(); err != nil { 3543 panic(err) 3544 } 3545 return ret 3546} 3547 3548// See cairo_region_translate(). 3549// 3550// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-translate 3551func (region *Region) Translate(dx, dy int) { 3552 C.cairo_region_translate(region.Ptr, C.int(dx), C.int(dy)) 3553 if err := region.status(); err != nil { 3554 panic(err) 3555 } 3556} 3557 3558// See cairo_region_subtract(). 3559// 3560// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-subtract 3561func (dst *Region) Subtract(other *Region) error { 3562 ret := Status(C.cairo_region_subtract(dst.Ptr, other.Ptr)).toError() 3563 if err := dst.status(); err != nil { 3564 panic(err) 3565 } 3566 return ret 3567} 3568 3569// See cairo_region_intersect(). 3570// 3571// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-intersect 3572func (dst *Region) Intersect(other *Region) error { 3573 ret := Status(C.cairo_region_intersect(dst.Ptr, other.Ptr)).toError() 3574 if err := dst.status(); err != nil { 3575 panic(err) 3576 } 3577 return ret 3578} 3579 3580// See cairo_region_union(). 3581// 3582// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-union 3583func (dst *Region) Union(other *Region) error { 3584 ret := Status(C.cairo_region_union(dst.Ptr, other.Ptr)).toError() 3585 if err := dst.status(); err != nil { 3586 panic(err) 3587 } 3588 return ret 3589} 3590 3591// See cairo_region_xor(). 3592// 3593// C API documentation: http://cairographics.org/manual/cairo-Regions.html#cairo-region-xor 3594func (dst *Region) XOR(other *Region) error { 3595 ret := Status(C.cairo_region_xor(dst.Ptr, other.Ptr)).toError() 3596 if err := dst.status(); err != nil { 3597 panic(err) 3598 } 3599 return ret 3600} 3601 3602// See cairo_svg_version_t. 3603// 3604// C API documentation: http://cairographics.org/manual/cairo-SVG-Surfaces.html#cairo-svg-version-t 3605type SVGVersion int 3606 3607const ( 3608 SVGVersion11 SVGVersion = C.CAIRO_SVG_VERSION_1_1 3609 SVGVersion12 SVGVersion = C.CAIRO_SVG_VERSION_1_2 3610) 3611 3612// String implements the Stringer interface, which is used in places like fmt's %q. For all enums like this it returns the Go name of the constant. 3613func (i SVGVersion) String() string { 3614 switch i { 3615 case SVGVersion11: 3616 return "SVGVersion11" 3617 case SVGVersion12: 3618 return "SVGVersion12" 3619 default: 3620 return fmt.Sprintf("SVGVersion(%d)", i) 3621 } 3622} 3623 3624// See cairo_svg_surface_create(). 3625// 3626// C API documentation: http://cairographics.org/manual/cairo-SVG-Surfaces.html#cairo-svg-surface-create 3627func SVGSurfaceCreate(filename string, widthInPoints, heightInPoints float64) *SVGSurface { 3628 c_filename := C.CString(filename) 3629 defer C.free(unsafe.Pointer(c_filename)) 3630 ret := &SVGSurface{wrapSurface(C.cairo_svg_surface_create(c_filename, C.double(widthInPoints), C.double(heightInPoints)))} 3631 if err := ret.status(); err != nil { 3632 panic(err) 3633 } 3634 return ret 3635} 3636 3637// See cairo_svg_surface_restrict_to_version(). 3638// 3639// C API documentation: http://cairographics.org/manual/cairo-SVG-Surfaces.html#cairo-svg-surface-restrict-to-version 3640func (surface *SVGSurface) RestrictToVersion(version SVGVersion) { 3641 C.cairo_svg_surface_restrict_to_version(surface.Ptr, C.cairo_svg_version_t(version)) 3642 if err := surface.status(); err != nil { 3643 panic(err) 3644 } 3645} 3646 3647// See cairo_svg_get_versions(). 3648// 3649// C API documentation: http://cairographics.org/manual/cairo-SVG-Surfaces.html#cairo-svg-get-versions 3650func SVGGetVersions() []SVGVersion { 3651 var cVersionsPtr *C.cairo_svg_version_t 3652 var cNumVersions C.int 3653 C.cairo_svg_get_versions(&cVersionsPtr, &cNumVersions) 3654 slice := (*[1 << 30]C.cairo_svg_version_t)(unsafe.Pointer(cVersionsPtr))[:cNumVersions:cNumVersions] 3655 versions := make([]SVGVersion, cNumVersions) 3656 for i := 0; i < int(cNumVersions); i++ { 3657 versions[i] = SVGVersion(slice[i]) 3658 } 3659 return versions 3660} 3661 3662// See cairo_svg_version_to_string(). 3663// 3664// C API documentation: http://cairographics.org/manual/cairo-SVG-Surfaces.html#cairo-svg-version-to-string 3665func (version SVGVersion) ToString() string { 3666 ret := C.GoString(C.cairo_svg_version_to_string(C.cairo_svg_version_t(version))) 3667 return ret 3668} 3669 3670// See cairo_xlib_surface_create(). 3671// 3672// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-create 3673func XlibSurfaceCreate(dpy unsafe.Pointer, drawable uint64, visual unsafe.Pointer, width, height int) *XlibSurface { 3674 ret := &XlibSurface{wrapSurface(C.cairo_xlib_surface_create((*C.Display)(dpy), C.Drawable(drawable), (*C.Visual)(visual), C.int(width), C.int(height)))} 3675 if err := ret.status(); err != nil { 3676 panic(err) 3677 } 3678 return ret 3679} 3680 3681// See cairo_xlib_surface_create_for_bitmap(). 3682// 3683// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-create-for-bitmap 3684func XlibSurfaceCreateForBitmap(dpy unsafe.Pointer, bitmap uint64, screen unsafe.Pointer, width, height int) *XlibSurface { 3685 ret := &XlibSurface{wrapSurface(C.cairo_xlib_surface_create_for_bitmap((*C.Display)(dpy), C.Pixmap(bitmap), (*C.Screen)(screen), C.int(width), C.int(height)))} 3686 if err := ret.status(); err != nil { 3687 panic(err) 3688 } 3689 return ret 3690} 3691 3692// See cairo_xlib_surface_set_size(). 3693// 3694// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-set-size 3695func (surface *XlibSurface) SetSize(width, height int) { 3696 C.cairo_xlib_surface_set_size(surface.Ptr, C.int(width), C.int(height)) 3697 if err := surface.status(); err != nil { 3698 panic(err) 3699 } 3700} 3701 3702// See cairo_xlib_surface_set_drawable(). 3703// 3704// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-set-drawable 3705func (surface *XlibSurface) SetDrawable(drawable uint64, width, height int) { 3706 C.cairo_xlib_surface_set_drawable(surface.Ptr, C.Drawable(drawable), C.int(width), C.int(height)) 3707 if err := surface.status(); err != nil { 3708 panic(err) 3709 } 3710} 3711 3712// See cairo_xlib_surface_get_display(). 3713// 3714// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-get-display 3715func (surface *XlibSurface) GetDisplay() unsafe.Pointer { 3716 ret := unsafe.Pointer(C.cairo_xlib_surface_get_display(surface.Ptr)) 3717 if err := surface.status(); err != nil { 3718 panic(err) 3719 } 3720 return ret 3721} 3722 3723// See cairo_xlib_surface_get_drawable(). 3724// 3725// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-get-drawable 3726func (surface *XlibSurface) GetDrawable() uint64 { 3727 ret := uint64(C.cairo_xlib_surface_get_drawable(surface.Ptr)) 3728 if err := surface.status(); err != nil { 3729 panic(err) 3730 } 3731 return ret 3732} 3733 3734// See cairo_xlib_surface_get_screen(). 3735// 3736// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-get-screen 3737func (surface *XlibSurface) GetScreen() unsafe.Pointer { 3738 ret := unsafe.Pointer(C.cairo_xlib_surface_get_screen(surface.Ptr)) 3739 if err := surface.status(); err != nil { 3740 panic(err) 3741 } 3742 return ret 3743} 3744 3745// See cairo_xlib_surface_get_visual(). 3746// 3747// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-get-visual 3748func (surface *XlibSurface) GetVisual() unsafe.Pointer { 3749 ret := unsafe.Pointer(C.cairo_xlib_surface_get_visual(surface.Ptr)) 3750 if err := surface.status(); err != nil { 3751 panic(err) 3752 } 3753 return ret 3754} 3755 3756// See cairo_xlib_surface_get_depth(). 3757// 3758// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-get-depth 3759func (surface *XlibSurface) GetDepth() int { 3760 ret := int(C.cairo_xlib_surface_get_depth(surface.Ptr)) 3761 if err := surface.status(); err != nil { 3762 panic(err) 3763 } 3764 return ret 3765} 3766 3767// See cairo_xlib_surface_get_width(). 3768// 3769// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-get-width 3770func (surface *XlibSurface) GetWidth() int { 3771 ret := int(C.cairo_xlib_surface_get_width(surface.Ptr)) 3772 if err := surface.status(); err != nil { 3773 panic(err) 3774 } 3775 return ret 3776} 3777 3778// See cairo_xlib_surface_get_height(). 3779// 3780// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-get-height 3781func (surface *XlibSurface) GetHeight() int { 3782 ret := int(C.cairo_xlib_surface_get_height(surface.Ptr)) 3783 if err := surface.status(); err != nil { 3784 panic(err) 3785 } 3786 return ret 3787} 3788 3789// See cairo_xlib_device_debug_cap_xrender_version(). 3790// 3791// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-device-debug-cap-xrender-version 3792func (device *XlibDevice) DebugCapXrenderVersion(majorVersion, minorVersion int) { 3793 C.cairo_xlib_device_debug_cap_xrender_version(device.Ptr, C.int(majorVersion), C.int(minorVersion)) 3794 if err := device.status(); err != nil { 3795 panic(err) 3796 } 3797} 3798 3799// See cairo_xlib_device_debug_set_precision(). 3800// 3801// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-device-debug-set-precision 3802func (device *XlibDevice) DebugSetPrecision(precision int) { 3803 C.cairo_xlib_device_debug_set_precision(device.Ptr, C.int(precision)) 3804 if err := device.status(); err != nil { 3805 panic(err) 3806 } 3807} 3808 3809// See cairo_xlib_device_debug_get_precision(). 3810// 3811// C API documentation: http://cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-device-debug-get-precision 3812func (device *XlibDevice) DebugGetPrecision() int { 3813 ret := int(C.cairo_xlib_device_debug_get_precision(device.Ptr)) 3814 if err := device.status(); err != nil { 3815 panic(err) 3816 } 3817 return ret 3818} 3819