C API参考

这本手册记录了C和C++程序员使用的API,他们希望编写使用Pycayro的扩展模块。

pycairo编译器标志

要使用pycairo编译python扩展,您需要知道pycairo和cairo的位置以及要传递给编译器和链接器的标志。

  1. 变体:

    仅在1.16.0版之后可用。

    当pycairo安装pkg配置文件时,如果是virtualenvs、安装到用户目录或使用wheels/eggs,pkg config将无法定位.pc文件。这个 get_include() 只要pycairo在您的python搜索路径中,函数在所有情况下都可以工作。

    编译器标志:
    • python -c "import cairo; print(cairo.get_include())"

    • pkg-config --cflags cairo

    链接器标志:
    • pkg-config --libs cairo

  2. 变体:

    这适用于旧版本,但有上述限制。如果您想要支持旧版本或者您的模块不需要virtualenv/pip支持,可以将其用作回退。

    编译器标志:
    • pkg-config --cflags pycairo or pkg-config --cflags py3cairo

    链接器标志:
    • pkg-config --libs pycairo or pkg-config --libs py3cairo

访问python 3下的pycairo C API

演示如何导入pycairo API的示例:

#include "py3cairo.h"

PyMODINIT_FUNC
PyInit_client(void)
{
  PyObject *m;

  m = PyModule_Create(&clientmodule);
  if (m == NULL)
      return NULL;
  if (import_cairo() < 0)
      return NULL;
  /* additional initialization can happen here */
  return m;
}

如果您想使用来自另一个编译单元的API:

#define PYCAIRO_NO_IMPORT
#include <py3cairo.h>

...

在 1.17.0 版本加入: 这个 PYCAIRO_NO_IMPORT 自1.17.0起使用宏

其他功能

int Pycairo_Check_Status(cairo_status_t status)
参数:
返回:

-如果出现错误,则为1,否则为0。在发生错误时设置异常。

获取状态值,如果它表示错误状态,则将其转换为异常。

Cairo 上下文

typedef PyObject PycairoContext
cairo_t *PycairoContext.ctx

包裹 cairo_t

typedef PyTypeObject *PycairoContext_Type
PycairoContext_GET(obj)
参数:
返回:

cairo_t [transfer none]

得到 cairo_t 对象超出 PycairoContext .

PyObject *PycairoContext_FromContext(cairo_t *ctx, PyTypeObject *type, PyObject *base)
参数:
  • ctx (cairo_t) -- Cairo 将“包装”成一个python对象。如果pycaioContext创建失败,或者cairo的状态为“错误”,则不会被引用。 [传输已满]

  • type (PyTypeObject) -- 指向要实例化的类型的指针。它可以是&pycaioContext_类型,也可以是pycaioContext_类型子类型。(cairo.context或cairo.context子类) [无转移]

  • base (PyObject) -- 用于创建上下文的基对象,或为空。它被用来在 Cairo 使用时保持它的活力。 [无转移]

返回:

失败时为新引用或空,并设置异常 [传输已满]

cairo_t

Cairo 字体

typedef PyObject PycairoFontFace
cairo_font_face_t *PycairoFontFace.font_face

包裹 cairo_font_face_t

typedef PyTypeObject *PycairoFontFace_Type
PyObject *PycairoFontFace_FromFontFace(cairo_font_face_t *font_face)
参数:
  • font_face (cairo_font_face_t) -- Cairo 字体要“包装”成一个python对象。如果pycairoftface创建失败,则不会被引用。 [传输已满]

返回:

失败时为新引用或空,并设置异常 [传输已满]

从 Cairo 字体创建新的pycairofontface

typedef PycairoFontFace PycairoToyFontFace
typedef PyTypeObject *PycairoToyFontFace_Type

Cairo 字体选项

typedef PyObject PycairoFontOptions
cairo_font_options_t *PycairoFontOptions.font_options
typedef PyTypeObject *PycairoFontOptions_Type
PyObject *PycairoFontOptions_FromFontOptions(cairo_font_options_t *font_options)
参数:
  • font_options (cairo_font_options_t) -- Cairo 字体选项“包装”成一个python对象。如果pycairofontOptions创建失败,则不会被引用。 [传输已满]

返回:

失败时为新引用或空,并设置异常 [传输已满]

从cairo字体选项创建新的pycairofontoptions

Cairo 矩阵

typedef PyObject PycairoMatrix
cairo_matrix_t PycairoMatrix.matrix
typedef PyTypeObject *PycairoMatrix_Type
PyObject *PycairoMatrix_FromMatrix(const cairo_matrix_t *matrix)
参数:
  • matrix (cairo_matrix_t) -- Cairo 矩阵“包装”成一个python对象。复制cairo矩阵的值。 [无转移]

返回:

失败时为新引用或空,并设置异常 [传输已满]

从 Cairo 矩阵创建新的Pyciaromatrix

Cairo 之路

typedef PyObject PycairoPath
cairo_path_t *PycairoPath.path
typedef PyTypeObject *PycairoPath_Type
PyObject *PycairoPath_FromPath(cairo_path_t *path)
参数:
  • path (cairo_path_t) -- Cairo 路径“包装”成一个python对象。如果pycaiopath创建失败,或者路径处于错误状态,则不引用路径。 [传输已满]

返回:

失败时为新引用或空,并设置异常 [传输已满]

从cairo路径创建新的pycaiopath

Cairo 图案

typedef PyObject PycairoPattern
cairo_pattern_t *PycairoPattern.pattern
typedef PyTypeObject *PycairoPattern_Type
typedef PycairoPattern PycairoSolidPattern
typedef PyTypeObject *PycairoSolidPattern_Type
typedef PycairoPattern PycairoSurfacePattern
typedef PyTypeObject *PycairoSurfacePattern_Type
typedef PycairoPattern PycairoGradient
typedef PyTypeObject *PycairoGradient_Type
typedef PycairoGradient PycairoLinearGradient
typedef PyTypeObject *PycairoLinearGradient_Type
typedef PycairoGradient PycairoRadialGradient
typedef PyTypeObject *PycairoRadialGradient_Type
PyObject *PycairoPattern_FromPattern(cairo_pattern_t *pattern, PyObject *base)
参数:
  • pattern (cairo_pattern_t) -- Cairo 模式“包装”成一个python对象。如果pycaiopattern创建失败,或者模式具有错误状态,则不会被引用。 [传输已满]

  • base (PyObject) -- 用于创建模式的基对象,或为空。当使用 Cairo 模式时,它被引用以使其保持活动状态。 [无转移]

返回:

失败时为新引用或空,并设置异常 [传输已满]

从cairo模式创建新的pycaiorosolidpattern、pycaiorosurfacepattern、pycaiorolineargradient或pycaiorradialgradient。

Cairo 地区

typedef PyObject PycairoRegion
cairo_region_t *PycairoRegion.region
typedef PyTypeObject *PycairoRegion_Type
PyObject *PycairoRegion_FromRegion(cairo_region_t *region)
参数:
  • region (cairo_region_t) -- Cairo 区域“包装”成一个python对象。如果PyciaorRegion创建失败或区域处于错误状态,则区域未被引用。

返回:

失败时为新引用或空,并设置异常 [传输已满]

从 Cairo 地区创建新的pycairoregion

Cairo 矩形

typedef PyObject PycairoRectangleInt
cairo_rectangle_int_t *PycairoRectangleInt.rectangle_int
typedef PyTypeObject *PycairoRectangleInt_Type
PyObject *PycairoRectangleInt_FromRectangleInt(const cairo_rectangle_int_t *rectangle_int)
参数:
  • rectangle_int (cairo_rectangle_int_t) -- 一个 Cairo 矩形,用于“包装”成一个python对象。如果PyciaRorectAngleInt创建失败,则不引用矩形int。 [无转移]

返回:

失败时为新引用或空,并设置异常 [传输已满]

从cairo矩形创建新的pycairorectangleint

缩放字体

typedef PyObject PycairoScaledFont
cairo_scaled_font_t *PycairoScaledFont.scaled_font
typedef PyTypeObject *PycairoScaledFont_Type
PyObject *PycairoScaledFont_FromScaledFont(cairo_scaled_font_t *scaled_font)
参数:
  • scaled_font (cairo_scaled_font_t) -- 一个cairo将字体缩放为“wrap”成一个python对象。如果PyciaroscaledFont创建失败,则不会被引用。 [传输已满]

返回:

失败时为新引用或空,并设置异常 [传输已满]

从 Cairo 的缩放字体创建一个新的pycairoscaledfont

Cairo 地表

typedef PyObject PycairoSurface
cairo_surface_t *PycairoSurface.surface
typedef PyTypeObject *PycairoSurface_Type
typedef PycairoSurface PycairoImageSurface
typedef PyTypeObject *PycairoImageSurface_Type
typedef PycairoSurface PycairoPDFSurface
typedef PyTypeObject *PycairoPDFSurface_Type
typedef PycairoSurface PycairoPSSurface
typedef PyTypeObject *PycairoPSSurface_Type
typedef PycairoSurface PycairoRecordingSurface
typedef PyTypeObject *PycairoRecordingSurface_Type
typedef PycairoSurface PycairoSVGSurface
typedef PyTypeObject *PycairoSVGSurface_Type
typedef PycairoSurface PycairoWin32Surface
typedef PyTypeObject *PycairoWin32Surface_Type
typedef PycairoSurface PycairoXCBSurface
typedef PyTypeObject *PycairoXCBSurface_Type
typedef PycairoSurface PycairoXlibSurface
typedef PyTypeObject *PycairoXlibSurface_Type
PyObject *PycairoSurface_FromSurface(cairo_surface_t *surface, PyObject *base)
参数:
  • surface (cairo_surface_t) -- 一个cairo曲面,用于“包装”成python对象。如果pycaiosurface创建失败,或者cairo曲面具有错误状态,则不会被引用。 [传输已满]

  • base (PyObject) -- 用于创建曲面的基本对象,或为空。它被用来在 Cairo 地表使用时保持其活力。 [无转移]

返回:

失败时为新引用或空,并设置异常 [传输已满]

从 Cairo 曲面创建新的PyciaRoImageSurface、PyciaRopDfsurface、PyciaRopssurface、PyciaRorRecordingSurface、PyciaRowsvgSurface、PyciaRowin32Surface、PyciaRowin32PrintingSurface、PyciaRoxCbSurface或PyciaRoxLibSurface。

Cairo 类型

这些仅在此处列出,以便在文档中引用。

详情请参见https://www.cairographics.org/manual/。

type cairo_t
type cairo_status_t
type cairo_surface_t
type cairo_scaled_font_t
type cairo_rectangle_int_t
type cairo_region_t
type cairo_pattern_t
type cairo_matrix_t
type cairo_font_options_t
type cairo_path_t
type cairo_font_face_t

CPython类型

type PyObject
type PyTypeObject