{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. }
unit cairo1;

{$MODE OBJFPC}{$H+}

{$PACKRECORDS C}
{$MODESWITCH DUPLICATELOCALS+}

{$ifdef Unix}
{$LINKLIB libcairo-gobject.so.2}
{$endif}
{$WARN 3031 off : Values in enumeration types have to be ascending}
interface
uses
  CTypes, GObject2, GLib2;

const
  {$ifdef MsWindows}
  cairo1_library = 'libcairo-gobject.so.dll';
  {$else}
  cairo1_library = 'libcairo-gobject.so.2';
  {$endif}

type


  { Tcairo_status_t }
  PPcairo_status_t = ^Pcairo_status_t;
  Pcairo_status_t = ^Tcairo_status_t;
  Tcairo_status_t = (
    Tcairo_status_tMinValue = -$7FFFFFFF,
    CAIRO_STATUS_SUCCESS = 0,
    CAIRO_STATUS_NO_MEMORY = 1,
    CAIRO_STATUS_INVALID_RESTORE = 2,
    CAIRO_STATUS_INVALID_POP_GROUP = 3,
    CAIRO_STATUS_NO_CURRENT_POINT = 4,
    CAIRO_STATUS_INVALID_MATRIX = 5,
    CAIRO_STATUS_INVALID_STATUS = 6,
    CAIRO_STATUS_NULL_POINTER = 7,
    CAIRO_STATUS_INVALID_STRING = 8,
    CAIRO_STATUS_INVALID_PATH_DATA = 9,
    CAIRO_STATUS_READ_ERROR = 10,
    CAIRO_STATUS_WRITE_ERROR = 11,
    CAIRO_STATUS_SURFACE_FINISHED = 12,
    CAIRO_STATUS_SURFACE_TYPE_MISMATCH = 13,
    CAIRO_STATUS_PATTERN_TYPE_MISMATCH = 14,
    CAIRO_STATUS_INVALID_CONTENT = 15,
    CAIRO_STATUS_INVALID_FORMAT = 16,
    CAIRO_STATUS_INVALID_VISUAL = 17,
    CAIRO_STATUS_FILE_NOT_FOUND = 18,
    CAIRO_STATUS_INVALID_DASH = 19,
    CAIRO_STATUS_INVALID_DSC_COMMENT = 20,
    CAIRO_STATUS_INVALID_INDEX = 21,
    CAIRO_STATUS_CLIP_NOT_REPRESENTABLE = 22,
    CAIRO_STATUS_TEMP_FILE_ERROR = 23,
    CAIRO_STATUS_INVALID_STRIDE = 24,
    CAIRO_STATUS_FONT_TYPE_MISMATCH = 25,
    CAIRO_STATUS_USER_FONT_IMMUTABLE = 26,
    CAIRO_STATUS_USER_FONT_ERROR = 27,
    CAIRO_STATUS_NEGATIVE_COUNT = 28,
    CAIRO_STATUS_INVALID_CLUSTERS = 29,
    CAIRO_STATUS_INVALID_SLANT = 30,
    CAIRO_STATUS_INVALID_WEIGHT = 31,
    CAIRO_STATUS_INVALID_SIZE = 32,
    CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED = 33,
    CAIRO_STATUS_DEVICE_TYPE_MISMATCH = 34,
    CAIRO_STATUS_DEVICE_ERROR = 35,
    CAIRO_STATUS_INVALID_MESH_CONSTRUCTION = 36,
    CAIRO_STATUS_DEVICE_FINISHED = 37,
    CAIRO_STATUS_JBIG2_GLOBAL_MISSING = 38,
    Tcairo_status_tMaxValue = $7FFFFFFF
  );


  { Tcairo_content_t }
  PPcairo_content_t = ^Pcairo_content_t;
  Pcairo_content_t = ^Tcairo_content_t;
  Tcairo_content_t = (
    Tcairo_content_tMinValue = -$7FFFFFFF,
    CAIRO_CONTENT_COLOR = 4096,
    CAIRO_CONTENT_ALPHA = 8192,
    CAIRO_CONTENT_COLOR_ALPHA = 12288,
    Tcairo_content_tMaxValue = $7FFFFFFF
  );


  { Tcairo_operator_t }
  PPcairo_operator_t = ^Pcairo_operator_t;
  Pcairo_operator_t = ^Tcairo_operator_t;
  Tcairo_operator_t = (
    Tcairo_operator_tMinValue = -$7FFFFFFF,
    CAIRO_OPERATOR_CLEAR = 0,
    CAIRO_OPERATOR_SOURCE = 1,
    CAIRO_OPERATOR_OVER = 2,
    CAIRO_OPERATOR_IN = 3,
    CAIRO_OPERATOR_OUT = 4,
    CAIRO_OPERATOR_ATOP = 5,
    CAIRO_OPERATOR_DEST = 6,
    CAIRO_OPERATOR_DEST_OVER = 7,
    CAIRO_OPERATOR_DEST_IN = 8,
    CAIRO_OPERATOR_DEST_OUT = 9,
    CAIRO_OPERATOR_DEST_ATOP = 10,
    CAIRO_OPERATOR_XOR = 11,
    CAIRO_OPERATOR_ADD = 12,
    CAIRO_OPERATOR_SATURATE = 13,
    CAIRO_OPERATOR_MULTIPLY = 14,
    CAIRO_OPERATOR_SCREEN = 15,
    CAIRO_OPERATOR_OVERLAY = 16,
    CAIRO_OPERATOR_DARKEN = 17,
    CAIRO_OPERATOR_LIGHTEN = 18,
    CAIRO_OPERATOR_COLOR_DODGE = 19,
    CAIRO_OPERATOR_COLOR_BURN = 20,
    CAIRO_OPERATOR_HARD_LIGHT = 21,
    CAIRO_OPERATOR_SOFT_LIGHT = 22,
    CAIRO_OPERATOR_DIFFERENCE = 23,
    CAIRO_OPERATOR_EXCLUSION = 24,
    CAIRO_OPERATOR_HSL_HUE = 25,
    CAIRO_OPERATOR_HSL_SATURATION = 26,
    CAIRO_OPERATOR_HSL_COLOR = 27,
    CAIRO_OPERATOR_HSL_LUMINOSITY = 28,
    Tcairo_operator_tMaxValue = $7FFFFFFF
  );


  { Tcairo_antialias_t }
  PPcairo_antialias_t = ^Pcairo_antialias_t;
  Pcairo_antialias_t = ^Tcairo_antialias_t;
  Tcairo_antialias_t = (
    Tcairo_antialias_tMinValue = -$7FFFFFFF,
    CAIRO_ANTIALIAS_DEFAULT = 0,
    CAIRO_ANTIALIAS_NONE = 1,
    CAIRO_ANTIALIAS_GRAY = 2,
    CAIRO_ANTIALIAS_SUBPIXEL = 3,
    CAIRO_ANTIALIAS_FAST = 4,
    CAIRO_ANTIALIAS_GOOD = 5,
    CAIRO_ANTIALIAS_BEST = 6,
    Tcairo_antialias_tMaxValue = $7FFFFFFF
  );


  { Tcairo_fill_rule_t }
  PPcairo_fill_rule_t = ^Pcairo_fill_rule_t;
  Pcairo_fill_rule_t = ^Tcairo_fill_rule_t;
  Tcairo_fill_rule_t = (
    Tcairo_fill_rule_tMinValue = -$7FFFFFFF,
    CAIRO_FILL_RULE_WINDING = 0,
    CAIRO_FILL_RULE_EVEN_ODD = 1,
    Tcairo_fill_rule_tMaxValue = $7FFFFFFF
  );


  { Tcairo_line_cap_t }
  PPcairo_line_cap_t = ^Pcairo_line_cap_t;
  Pcairo_line_cap_t = ^Tcairo_line_cap_t;
  Tcairo_line_cap_t = (
    Tcairo_line_cap_tMinValue = -$7FFFFFFF,
    CAIRO_LINE_CAP_BUTT = 0,
    CAIRO_LINE_CAP_ROUND = 1,
    CAIRO_LINE_CAP_SQUARE = 2,
    Tcairo_line_cap_tMaxValue = $7FFFFFFF
  );


  { Tcairo_line_join_t }
  PPcairo_line_join_t = ^Pcairo_line_join_t;
  Pcairo_line_join_t = ^Tcairo_line_join_t;
  Tcairo_line_join_t = (
    Tcairo_line_join_tMinValue = -$7FFFFFFF,
    CAIRO_LINE_JOIN_MITER = 0,
    CAIRO_LINE_JOIN_ROUND = 1,
    CAIRO_LINE_JOIN_BEVEL = 2,
    Tcairo_line_join_tMaxValue = $7FFFFFFF
  );


  { Tcairo_text_cluster_flags_t }
  PPcairo_text_cluster_flags_t = ^Pcairo_text_cluster_flags_t;
  Pcairo_text_cluster_flags_t = ^Tcairo_text_cluster_flags_t;
  Tcairo_text_cluster_flags_t = (
    Tcairo_text_cluster_flags_tMinValue = -$7FFFFFFF,
    CAIRO_TEXT_CLUSTER_FLAG_BACKWARD = 1,
    Tcairo_text_cluster_flags_tMaxValue = $7FFFFFFF
  );


  { Tcairo_font_slant_t }
  PPcairo_font_slant_t = ^Pcairo_font_slant_t;
  Pcairo_font_slant_t = ^Tcairo_font_slant_t;
  Tcairo_font_slant_t = (
    Tcairo_font_slant_tMinValue = -$7FFFFFFF,
    CAIRO_FONT_SLANT_NORMAL = 0,
    CAIRO_FONT_SLANT_ITALIC = 1,
    CAIRO_FONT_SLANT_OBLIQUE = 2,
    Tcairo_font_slant_tMaxValue = $7FFFFFFF
  );


  { Tcairo_font_weight_t }
  PPcairo_font_weight_t = ^Pcairo_font_weight_t;
  Pcairo_font_weight_t = ^Tcairo_font_weight_t;
  Tcairo_font_weight_t = (
    Tcairo_font_weight_tMinValue = -$7FFFFFFF,
    CAIRO_FONT_WEIGHT_NORMAL = 0,
    CAIRO_FONT_WEIGHT_BOLD = 1,
    Tcairo_font_weight_tMaxValue = $7FFFFFFF
  );


  { Tcairo_subpixel_order_t }
  PPcairo_subpixel_order_t = ^Pcairo_subpixel_order_t;
  Pcairo_subpixel_order_t = ^Tcairo_subpixel_order_t;
  Tcairo_subpixel_order_t = (
    Tcairo_subpixel_order_tMinValue = -$7FFFFFFF,
    CAIRO_SUBPIXEL_ORDER_DEFAULT = 0,
    CAIRO_SUBPIXEL_ORDER_RGB = 1,
    CAIRO_SUBPIXEL_ORDER_BGR = 2,
    CAIRO_SUBPIXEL_ORDER_VRGB = 3,
    CAIRO_SUBPIXEL_ORDER_VBGR = 4,
    Tcairo_subpixel_order_tMaxValue = $7FFFFFFF
  );


  { Tcairo_hint_style_t }
  PPcairo_hint_style_t = ^Pcairo_hint_style_t;
  Pcairo_hint_style_t = ^Tcairo_hint_style_t;
  Tcairo_hint_style_t = (
    Tcairo_hint_style_tMinValue = -$7FFFFFFF,
    CAIRO_HINT_STYLE_DEFAULT = 0,
    CAIRO_HINT_STYLE_NONE = 1,
    CAIRO_HINT_STYLE_SLIGHT = 2,
    CAIRO_HINT_STYLE_MEDIUM = 3,
    CAIRO_HINT_STYLE_FULL = 4,
    Tcairo_hint_style_tMaxValue = $7FFFFFFF
  );


  { Tcairo_hint_metrics_t }
  PPcairo_hint_metrics_t = ^Pcairo_hint_metrics_t;
  Pcairo_hint_metrics_t = ^Tcairo_hint_metrics_t;
  Tcairo_hint_metrics_t = (
    Tcairo_hint_metrics_tMinValue = -$7FFFFFFF,
    CAIRO_HINT_METRICS_DEFAULT = 0,
    CAIRO_HINT_METRICS_OFF = 1,
    CAIRO_HINT_METRICS_ON = 2,
    Tcairo_hint_metrics_tMaxValue = $7FFFFFFF
  );


  { Tcairo_font_type_t }
  PPcairo_font_type_t = ^Pcairo_font_type_t;
  Pcairo_font_type_t = ^Tcairo_font_type_t;
  Tcairo_font_type_t = (
    Tcairo_font_type_tMinValue = -$7FFFFFFF,
    CAIRO_FONT_TYPE_TOY = 0,
    CAIRO_FONT_TYPE_FT = 1,
    CAIRO_FONT_TYPE_WIN32 = 2,
    CAIRO_FONT_TYPE_QUARTZ = 3,
    CAIRO_FONT_TYPE_USER = 4,
    Tcairo_font_type_tMaxValue = $7FFFFFFF
  );


  { Tcairo_path_data_type_t }
  PPcairo_path_data_type_t = ^Pcairo_path_data_type_t;
  Pcairo_path_data_type_t = ^Tcairo_path_data_type_t;
  Tcairo_path_data_type_t = (
    Tcairo_path_data_type_tMinValue = -$7FFFFFFF,
    CAIRO_PATH_MOVE_TO = 0,
    CAIRO_PATH_LINE_TO = 1,
    CAIRO_PATH_CURVE_TO = 2,
    CAIRO_PATH_CLOSE_PATH = 3,
    Tcairo_path_data_type_tMaxValue = $7FFFFFFF
  );


  { Tcairo_device_type_t }
  PPcairo_device_type_t = ^Pcairo_device_type_t;
  Pcairo_device_type_t = ^Tcairo_device_type_t;
  Tcairo_device_type_t = (
    Tcairo_device_type_tMinValue = -$7FFFFFFF,
    CAIRO_DEVICE_TYPE_INVALID = -1,
    CAIRO_DEVICE_TYPE_DRM = 0,
    CAIRO_DEVICE_TYPE_GL = 1,
    CAIRO_DEVICE_TYPE_SCRIPT = 2,
    CAIRO_DEVICE_TYPE_XCB = 3,
    CAIRO_DEVICE_TYPE_XLIB = 4,
    CAIRO_DEVICE_TYPE_XML = 5,
    CAIRO_DEVICE_TYPE_COGL = 6,
    CAIRO_DEVICE_TYPE_WIN32 = 7,
    Tcairo_device_type_tMaxValue = $7FFFFFFF
  );


  { Tcairo_surface_type_t }
  PPcairo_surface_type_t = ^Pcairo_surface_type_t;
  Pcairo_surface_type_t = ^Tcairo_surface_type_t;
  Tcairo_surface_type_t = (
    Tcairo_surface_type_tMinValue = -$7FFFFFFF,
    CAIRO_SURFACE_TYPE_IMAGE = 0,
    CAIRO_SURFACE_TYPE_PDF = 1,
    CAIRO_SURFACE_TYPE_PS = 2,
    CAIRO_SURFACE_TYPE_XLIB = 3,
    CAIRO_SURFACE_TYPE_XCB = 4,
    CAIRO_SURFACE_TYPE_GLITZ = 5,
    CAIRO_SURFACE_TYPE_QUARTZ = 6,
    CAIRO_SURFACE_TYPE_WIN32 = 7,
    CAIRO_SURFACE_TYPE_BEOS = 8,
    CAIRO_SURFACE_TYPE_DIRECTFB = 9,
    CAIRO_SURFACE_TYPE_SVG = 10,
    CAIRO_SURFACE_TYPE_OS2 = 11,
    CAIRO_SURFACE_TYPE_WIN32_PRINTING = 12,
    CAIRO_SURFACE_TYPE_QUARTZ_IMAGE = 13,
    CAIRO_SURFACE_TYPE_SCRIPT = 14,
    CAIRO_SURFACE_TYPE_QT = 15,
    CAIRO_SURFACE_TYPE_RECORDING = 16,
    CAIRO_SURFACE_TYPE_VG = 17,
    CAIRO_SURFACE_TYPE_GL = 18,
    CAIRO_SURFACE_TYPE_DRM = 19,
    CAIRO_SURFACE_TYPE_TEE = 20,
    CAIRO_SURFACE_TYPE_XML = 21,
    CAIRO_SURFACE_TYPE_SKIA = 22,
    CAIRO_SURFACE_TYPE_SUBSURFACE = 23,
    CAIRO_SURFACE_TYPE_COGL = 24,
    Tcairo_surface_type_tMaxValue = $7FFFFFFF
  );


  { Tcairo_format_t }
  PPcairo_format_t = ^Pcairo_format_t;
  Pcairo_format_t = ^Tcairo_format_t;
  Tcairo_format_t = (
    Tcairo_format_tMinValue = -$7FFFFFFF,
    CAIRO_FORMAT_INVALID = -1,
    CAIRO_FORMAT_ARGB32 = 0,
    CAIRO_FORMAT_RGB24 = 1,
    CAIRO_FORMAT_A8 = 2,
    CAIRO_FORMAT_A1 = 3,
    CAIRO_FORMAT_RGB16_565 = 4,
    CAIRO_FORMAT_RGB30 = 5,
    Tcairo_format_tMaxValue = $7FFFFFFF
  );


  { Tcairo_pattern_type_t }
  PPcairo_pattern_type_t = ^Pcairo_pattern_type_t;
  Pcairo_pattern_type_t = ^Tcairo_pattern_type_t;
  Tcairo_pattern_type_t = (
    Tcairo_pattern_type_tMinValue = -$7FFFFFFF,
    CAIRO_PATTERN_TYPE_SOLID = 0,
    CAIRO_PATTERN_TYPE_SURFACE = 1,
    CAIRO_PATTERN_TYPE_LINEAR = 2,
    CAIRO_PATTERN_TYPE_RADIAL = 3,
    CAIRO_PATTERN_TYPE_MESH = 4,
    CAIRO_PATTERN_TYPE_RASTER_SOURCE = 5,
    Tcairo_pattern_type_tMaxValue = $7FFFFFFF
  );


  { Tcairo_extend_t }
  PPcairo_extend_t = ^Pcairo_extend_t;
  Pcairo_extend_t = ^Tcairo_extend_t;
  Tcairo_extend_t = (
    Tcairo_extend_tMinValue = -$7FFFFFFF,
    CAIRO_EXTEND_NONE = 0,
    CAIRO_EXTEND_REPEAT = 1,
    CAIRO_EXTEND_REFLECT = 2,
    CAIRO_EXTEND_PAD = 3,
    Tcairo_extend_tMaxValue = $7FFFFFFF
  );


  { Tcairo_filter_t }
  PPcairo_filter_t = ^Pcairo_filter_t;
  Pcairo_filter_t = ^Tcairo_filter_t;
  Tcairo_filter_t = (
    Tcairo_filter_tMinValue = -$7FFFFFFF,
    CAIRO_FILTER_FAST = 0,
    CAIRO_FILTER_GOOD = 1,
    CAIRO_FILTER_BEST = 2,
    CAIRO_FILTER_NEAREST = 3,
    CAIRO_FILTER_BILINEAR = 4,
    CAIRO_FILTER_GAUSSIAN = 5,
    Tcairo_filter_tMaxValue = $7FFFFFFF
  );


  { Tcairo_region_overlap_t }
  PPcairo_region_overlap_t = ^Pcairo_region_overlap_t;
  Pcairo_region_overlap_t = ^Tcairo_region_overlap_t;
  Tcairo_region_overlap_t = (
    Tcairo_region_overlap_tMinValue = -$7FFFFFFF,
    CAIRO_REGION_OVERLAP_IN = 0,
    CAIRO_REGION_OVERLAP_OUT = 1,
    CAIRO_REGION_OVERLAP_PART = 2,
    Tcairo_region_overlap_tMaxValue = $7FFFFFFF
  );


  { Tcairo_t }
  PPcairo_t = ^Pcairo_t;
  Pcairo_t = ^Tcairo_t;
  Tcairo_t = object
  end;


  { Tcairo_device_t }
  PPcairo_device_t = ^Pcairo_device_t;
  Pcairo_device_t = ^Tcairo_device_t;
  Tcairo_device_t = object
  end;


  { Tcairo_surface_t }
  PPcairo_surface_t = ^Pcairo_surface_t;
  Pcairo_surface_t = ^Tcairo_surface_t;
  Tcairo_surface_t = object
  end;


  { Tcairo_matrix_t }
  PPcairo_matrix_t = ^Pcairo_matrix_t;
  Pcairo_matrix_t = ^Tcairo_matrix_t;

  Tcairo_matrix_t = record
    xx : Double;
    yx : Double;
    xy : Double;
    yy : Double;
    x0 : Double;
    y0 : Double;
  end;




  { Tcairo_pattern_t }
  PPcairo_pattern_t = ^Pcairo_pattern_t;
  Pcairo_pattern_t = ^Tcairo_pattern_t;
  Tcairo_pattern_t = object
  end;


  { Tcairo_region_t }
  PPcairo_region_t = ^Pcairo_region_t;
  Pcairo_region_t = ^Tcairo_region_t;
  Tcairo_region_t = object
  end;


  { Tcairo_font_options_t }
  PPcairo_font_options_t = ^Pcairo_font_options_t;
  Pcairo_font_options_t = ^Tcairo_font_options_t;
  Tcairo_font_options_t = object
  end;


  { Tcairo_font_face_t }
  PPcairo_font_face_t = ^Pcairo_font_face_t;
  Pcairo_font_face_t = ^Tcairo_font_face_t;
  Tcairo_font_face_t = object
  end;


  { Tcairo_scaled_font_t }
  PPcairo_scaled_font_t = ^Pcairo_scaled_font_t;
  Pcairo_scaled_font_t = ^Tcairo_scaled_font_t;
  Tcairo_scaled_font_t = object
  end;


  { Tcairo_path_t }
  PPcairo_path_t = ^Pcairo_path_t;
  Pcairo_path_t = ^Tcairo_path_t;

  Tcairo_path_t = record
  end;




  { Tcairo_rectangle_t }
  PPcairo_rectangle_t = ^Pcairo_rectangle_t;
  Pcairo_rectangle_t = ^Tcairo_rectangle_t;
  Tcairo_rectangle_t = object
    x: gdouble;
    y: gdouble;
    width: gdouble;
    height: gdouble;
  end;


  { Tcairo_rectangle_int_t }
  PPcairo_rectangle_int_t = ^Pcairo_rectangle_int_t;
  Pcairo_rectangle_int_t = ^Tcairo_rectangle_int_t;
  Tcairo_rectangle_int_t = object
    x: gint;
    y: gint;
    width: gint;
    height: gint;
  end;


  { Tcairo_glyph_t }
  PPcairo_glyph_t = ^Pcairo_glyph_t;
  Pcairo_glyph_t = ^Tcairo_glyph_t;
  Tcairo_glyph_t = object
    index: gulong;
    x: gdouble;
    y: gdouble;
  end;


  { Tcairo_text_cluster_t }
  PPcairo_text_cluster_t = ^Pcairo_text_cluster_t;
  Pcairo_text_cluster_t = ^Tcairo_text_cluster_t;
  Tcairo_text_cluster_t = object
    num_bytes: gint;
    num_glyphs: gint;
  end;

function cairo_gobject_context_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_context_get_type';
function cairo_gobject_device_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_device_get_type';
function cairo_gobject_font_face_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_font_face_get_type';
function cairo_gobject_font_options_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_font_options_get_type';
function cairo_gobject_glyph_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_glyph_get_type';
function cairo_gobject_pattern_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_pattern_get_type';
function cairo_gobject_rectangle_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_rectangle_get_type';
function cairo_gobject_rectangle_int_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_rectangle_int_get_type';
function cairo_gobject_region_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_region_get_type';
function cairo_gobject_scaled_font_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_scaled_font_get_type';
function cairo_gobject_surface_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_surface_get_type';
function cairo_gobject_text_cluster_get_type: TGType; cdecl; external cairo1_library name 'cairo_gobject_text_cluster_get_type';
procedure cairo_image_surface_create; cdecl; external cairo1_library name 'cairo_image_surface_create';

{**** Manually added types and functions ****}

{$ifdef Unix}
{$LINKLIB libcairo.so.2}
{$endif}

const
  LIB_CAIRO = cairo1_library;

type
  Pcairo_bool_t                       = ^TCairo_bool_t;
  TCairo_bool_t                        = LongInt;

function cairo_version: LongInt; cdecl; external LIB_CAIRO;
function cairo_version_string: PChar; cdecl; external LIB_CAIRO;
//Helper function to retrieve decoded version
//procedure cairo_version(out major, minor, micro: LongInt);

(* Functions for manipulating state objects *)

function  cairo_create(target: Pcairo_surface_t): Pcairo_t; cdecl; external LIB_CAIRO;
function  cairo_reference(cr: Pcairo_t): Pcairo_t; cdecl; external LIB_CAIRO;
procedure cairo_destroy(cr: Pcairo_t); cdecl; external;
function  cairo_get_reference_count(cr: Pcairo_t): LongWord; cdecl; external LIB_CAIRO;
//function  cairo_get_user_data(cr: Pcairo_t; key: Pcairo_user_data_key_t): pointer; cdecl; external LIB_CAIRO;
//function  cairo_set_user_data(cr:  PCairo_t; key:  Pcairo_user_data_key_t; user_data:  Pointer; destroy: Tcairo_destroy_func_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
procedure cairo_save(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_restore(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_push_group (cr:  PCairo_t); cdecl; external LIB_CAIRO;
procedure cairo_push_group_with_content (cr:  PCairo_t; content: Tcairo_content_t); cdecl; external LIB_CAIRO;
function  cairo_pop_group (cr:  PCairo_t):  Pcairo_pattern_t; cdecl; external LIB_CAIRO;
procedure cairo_pop_group_to_source (cr:  PCairo_t); cdecl; external LIB_CAIRO;

(* Modify state *)

procedure cairo_set_operator(cr: Pcairo_t; op: Tcairo_operator_t); cdecl; external LIB_CAIRO;
procedure cairo_set_source(cr: Pcairo_t; source: Pcairo_pattern_t); cdecl; external LIB_CAIRO;
procedure cairo_set_source_rgb(cr: Pcairo_t; red, green, blue: Double); cdecl; external LIB_CAIRO;
procedure cairo_set_source_rgba(cr: Pcairo_t; red, green, blue, alpha: Double); cdecl; external LIB_CAIRO;
procedure cairo_set_source_surface(cr: Pcairo_t; surface: Pcairo_surface_t; x, y: Double); cdecl; external LIB_CAIRO;
procedure cairo_set_tolerance(cr: Pcairo_t; tolerance: Double); cdecl; external LIB_CAIRO;
procedure cairo_set_antialias(cr: Pcairo_t; antialias: Tcairo_antialias_t); cdecl; external LIB_CAIRO;
procedure cairo_set_fill_rule(cr: Pcairo_t; fill_rule: Tcairo_fill_rule_t); cdecl; external LIB_CAIRO;
procedure cairo_set_line_width(cr: Pcairo_t; width: Double); cdecl; external LIB_CAIRO;
procedure cairo_set_line_cap(cr: Pcairo_t; line_cap: Tcairo_line_cap_t); cdecl; external LIB_CAIRO;
procedure cairo_set_line_join(cr: Pcairo_t; line_join: Tcairo_line_join_t); cdecl; external LIB_CAIRO;
procedure cairo_set_dash(cr: Pcairo_t; dashes: PDouble; num_dashes: LongInt; offset: Double); cdecl; external LIB_CAIRO;
procedure cairo_set_miter_limit(cr: Pcairo_t; limit: Double); cdecl; external LIB_CAIRO;
procedure cairo_translate(cr: Pcairo_t; tx, ty: Double); cdecl; external LIB_CAIRO;
procedure cairo_scale(cr: Pcairo_t; sx, sy: Double); cdecl; external LIB_CAIRO;
procedure cairo_rotate(cr: Pcairo_t; angle: Double); cdecl; external LIB_CAIRO;
procedure cairo_transform(cr: Pcairo_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_set_matrix(cr: Pcairo_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_identity_matrix(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_user_to_device(cr: Pcairo_t; x, y: PDouble); cdecl; external LIB_CAIRO;
procedure cairo_user_to_device_distance(cr: Pcairo_t; dx, dy: PDouble); cdecl; external LIB_CAIRO;
procedure cairo_device_to_user(cr: Pcairo_t; x, y: PDouble); cdecl; external LIB_CAIRO;
procedure cairo_device_to_user_distance(cr: Pcairo_t; dx, dy: PDouble); cdecl; external LIB_CAIRO;

(* Path creation functions *)

procedure cairo_new_path(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_move_to(cr: Pcairo_t; x, y: Double); cdecl; external LIB_CAIRO;
procedure cairo_new_sub_path(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_line_to(cr: Pcairo_t; x, y: Double); cdecl; external LIB_CAIRO;
procedure cairo_curve_to(cr: Pcairo_t; x1, y1, x2, y2, x3, y3: Double); cdecl; external LIB_CAIRO;
procedure cairo_arc(cr: Pcairo_t; xc, yc, radius, angle1, angle2: Double); cdecl; external LIB_CAIRO;
procedure cairo_arc_negative(cr: Pcairo_t; xc, yc, radius, angle1, angle2: Double); cdecl; external LIB_CAIRO;
procedure cairo_rel_move_to(cr: Pcairo_t; dx, dy: Double); cdecl; external LIB_CAIRO;
procedure cairo_rel_line_to(cr: Pcairo_t; dx, dy: Double); cdecl; external LIB_CAIRO;
procedure cairo_rel_curve_to(cr: Pcairo_t; dx1, dy1, dx2, dy2, dx3, dy3: Double); cdecl; external LIB_CAIRO;
procedure cairo_rectangle(cr: Pcairo_t; x, y, width, height: Double); cdecl; external LIB_CAIRO;
procedure cairo_close_path(cr: Pcairo_t); cdecl; external LIB_CAIRO;

(* Painting functions *)

procedure cairo_paint(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_paint_with_alpha(cr: Pcairo_t; alpha: Double); cdecl; external LIB_CAIRO;
procedure cairo_mask(cr: Pcairo_t; pattern: Pcairo_pattern_t); cdecl; external LIB_CAIRO;
procedure cairo_mask_surface(cr: Pcairo_t; surface: Pcairo_surface_t; surface_x, surface_y: Double); cdecl; external LIB_CAIRO;
procedure cairo_stroke(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_stroke_preserve(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_fill(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_fill_preserve(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_copy_page(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_show_page(cr: Pcairo_t); cdecl; external LIB_CAIRO;

(* Insideness testing *)

function  cairo_in_stroke(cr: Pcairo_t; x, y: Double): Tcairo_bool_t; cdecl; external LIB_CAIRO;
function  cairo_in_fill(cr: Pcairo_t; x, y: Double): Tcairo_bool_t; cdecl; external LIB_CAIRO;

(* Rectangular extents *)

procedure cairo_stroke_extents(cr: Pcairo_t; x1, y1, x2, y2: PDouble); cdecl; external LIB_CAIRO;
procedure cairo_fill_extents(cr: Pcairo_t; x1, y1, x2, y2: PDouble); cdecl; external LIB_CAIRO;

(* Clipping *)

procedure cairo_reset_clip(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_clip(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_clip_preserve(cr: Pcairo_t); cdecl; external LIB_CAIRO;
procedure cairo_clip_extents(cr: Pcairo_t; x1, y1, x2, y2:  PDouble); cdecl; external LIB_CAIRO;
//function  cairo_copy_clip_rectangle_list(cr: Pcairo_t): Pcairo_rectangle_list_t; cdecl; external LIB_CAIRO;
//procedure cairo_rectangle_list_destroy(rectangle_list: Pcairo_rectangle_list_t); cdecl; external LIB_CAIRO;

(* Font/Text functions *)

function  cairo_font_options_create: Pcairo_font_options_t; cdecl; external LIB_CAIRO;
function  cairo_font_options_copy(original: Pcairo_font_options_t): Pcairo_font_options_t; cdecl; external LIB_CAIRO;
procedure cairo_font_options_destroy(options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
function  cairo_font_options_status(options: Pcairo_font_options_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
procedure cairo_font_options_merge(options, other: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
//function  cairo_font_options_equal(options, other: Pcairo_font_options_t): Tcairo_bool_t; cdecl; external LIB_CAIRO;
function  cairo_font_options_hash(options: Pcairo_font_options_t): LongWord; cdecl; external LIB_CAIRO;
procedure cairo_font_options_set_antialias(options: Pcairo_font_options_t; antialias: Tcairo_antialias_t); cdecl; external LIB_CAIRO;
function  cairo_font_options_get_antialias(options: Pcairo_font_options_t): Tcairo_antialias_t; cdecl; external LIB_CAIRO;
procedure cairo_font_options_set_subpixel_order(options: Pcairo_font_options_t; subpixel_order: Tcairo_subpixel_order_t); cdecl; external LIB_CAIRO;
function  cairo_font_options_get_subpixel_order(options: Pcairo_font_options_t): Tcairo_subpixel_order_t; cdecl; external LIB_CAIRO;
procedure cairo_font_options_set_hint_style(options: Pcairo_font_options_t; hint_style: Tcairo_hint_style_t); cdecl; external LIB_CAIRO;
function  cairo_font_options_get_hint_style(options: Pcairo_font_options_t): Tcairo_hint_style_t; cdecl; external LIB_CAIRO;
procedure cairo_font_options_set_hint_metrics(options: Pcairo_font_options_t; hint_metrics: Tcairo_hint_metrics_t); cdecl; external LIB_CAIRO;
function  cairo_font_options_get_hint_metrics(options: Pcairo_font_options_t): Tcairo_hint_metrics_t; cdecl; external LIB_CAIRO;

(* This interface is for dealing with text as text, not caring about the
   font object inside the the cairo_t. *)

procedure cairo_select_font_face(cr: Pcairo_t; family: Pchar; slant: Tcairo_font_slant_t; weight: Tcairo_font_weight_t); cdecl; external LIB_CAIRO;
procedure cairo_set_font_size(cr: Pcairo_t; size: Double); cdecl; external LIB_CAIRO;
procedure cairo_set_font_matrix(cr: Pcairo_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_get_font_matrix(cr: Pcairo_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_set_font_options(cr: Pcairo_t; options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
procedure cairo_get_font_options(cr: Pcairo_t; options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
procedure cairo_set_font_face(cr: Pcairo_t; font_face: Pcairo_font_face_t); cdecl; external LIB_CAIRO;
function  cairo_get_font_face(cr: Pcairo_t): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
procedure cairo_set_scaled_font(cr: PCairo_t; scaled_font:Pcairo_scaled_font_t); cdecl; external LIB_CAIRO;
function  cairo_get_scaled_font(cr: Pcairo_t): Pcairo_scaled_font_t; cdecl; external LIB_CAIRO;
procedure cairo_show_text(cr: Pcairo_t; utf8: Pchar); cdecl; external LIB_CAIRO;
//procedure cairo_show_glyphs(cr: Pcairo_t; glyphs: Pcairo_glyph_t; num_glyphs: LongInt); cdecl; external LIB_CAIRO;
procedure cairo_text_path(cr: Pcairo_t; utf8: Pchar); cdecl; external LIB_CAIRO;
//procedure cairo_glyph_path(cr: Pcairo_t; glyphs: Pcairo_glyph_t; num_glyphs: LongInt); cdecl; external LIB_CAIRO;
//procedure cairo_text_extents(cr: Pcairo_t; utf8: Pchar; extents: Pcairo_text_extents_t); cdecl; external LIB_CAIRO;
//procedure cairo_glyph_extents(cr: Pcairo_t; glyphs: Pcairo_glyph_t; num_glyphs: LongInt; extents: Pcairo_text_extents_t); cdecl; external LIB_CAIRO;
//procedure cairo_font_extents(cr: Pcairo_t; extents: Pcairo_font_extents_t); cdecl; external LIB_CAIRO;

(* Generic identifier for a font style *)

function  cairo_font_face_reference(font_face: Pcairo_font_face_t): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
procedure cairo_font_face_destroy(font_face: Pcairo_font_face_t); cdecl; external LIB_CAIRO;
function  cairo_font_face_get_reference_count (font_face: Pcairo_font_face_t):  LongWord; cdecl; external LIB_CAIRO;
function  cairo_font_face_status(font_face: Pcairo_font_face_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_font_face_get_type(font_face: Pcairo_font_face_t): Tcairo_font_type_t; cdecl; external LIB_CAIRO;
//function  cairo_font_face_get_user_data(font_face: Pcairo_font_face_t; key: Pcairo_user_data_key_t): pointer; cdecl; external LIB_CAIRO;
//function  cairo_font_face_set_user_data(font_face: Pcairo_font_face_t; key: Pcairo_user_data_key_t; user_data: pointer; destroy: Tcairo_destroy_func_t): Tcairo_status_t; cdecl; external LIB_CAIRO;

(* Portable interface to general font features *)

function  cairo_scaled_font_create(font_face: Pcairo_font_face_t; font_matrix: Pcairo_matrix_t; ctm: Pcairo_matrix_t; options: Pcairo_font_options_t): Pcairo_scaled_font_t; cdecl; external LIB_CAIRO;
function  cairo_scaled_font_reference(scaled_font: Pcairo_scaled_font_t): Pcairo_scaled_font_t; cdecl; external LIB_CAIRO;
procedure cairo_scaled_font_destroy(scaled_font: Pcairo_scaled_font_t); cdecl; external LIB_CAIRO;
function  cairo_scaled_font_get_reference_count (scaled_font: Pcairo_scaled_font_t): LongWord; cdecl; external LIB_CAIRO;
function  cairo_scaled_font_status(scaled_font: Pcairo_scaled_font_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_scaled_font_get_type(scaled_font: Pcairo_scaled_font_t): Tcairo_font_type_t; cdecl; external LIB_CAIRO;
//function  cairo_scaled_font_get_user_data (scaled_font: Pcairo_scaled_font_t; key: Pcairo_user_data_key_t): Pointer; cdecl; external LIB_CAIRO;
//function  cairo_scaled_font_set_user_data (scaled_font: Pcairo_scaled_font_t; key: Pcairo_user_data_key_t; user_data: Pointer; destroy: Tcairo_destroy_func_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
//procedure cairo_scaled_font_extents(scaled_font: Pcairo_scaled_font_t; extents: Pcairo_font_extents_t); cdecl; external LIB_CAIRO;
//procedure cairo_scaled_font_text_extents(scaled_font: Pcairo_scaled_font_t; utf8: PChar; extents: Pcairo_text_extents_t); cdecl; external LIB_CAIRO;
//procedure cairo_scaled_font_glyph_extents(scaled_font: Pcairo_scaled_font_t; glyphs: Pcairo_glyph_t; num_glyphs: LongInt; extents: Pcairo_text_extents_t); cdecl; external LIB_CAIRO;
function  cairo_scaled_font_get_font_face (scaled_font: Pcairo_scaled_font_t): Pcairo_font_face_t; cdecl; external LIB_CAIRO;
procedure cairo_scaled_font_get_font_matrix (scaled_font: Pcairo_scaled_font_t;	font_matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_scaled_font_get_ctm (scaled_font: Pcairo_scaled_font_t;	ctm: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_scaled_font_get_font_options (scaled_font: Pcairo_scaled_font_t; options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;

(* Query functions *)

function  cairo_get_operator(cr: Pcairo_t): Tcairo_operator_t; cdecl; external LIB_CAIRO;
function  cairo_get_source(cr: Pcairo_t): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
function  cairo_get_tolerance(cr: Pcairo_t): Double; cdecl; external LIB_CAIRO;
function  cairo_get_antialias(cr: Pcairo_t): Tcairo_antialias_t; cdecl; external LIB_CAIRO;
procedure cairo_get_current_point(cr: Pcairo_t; x, y: PDouble); cdecl; external LIB_CAIRO;
function  cairo_get_fill_rule(cr: Pcairo_t): Tcairo_fill_rule_t; cdecl; external LIB_CAIRO;
function  cairo_get_line_width(cr: Pcairo_t): Double; cdecl; external LIB_CAIRO;
function  cairo_get_line_cap(cr: Pcairo_t): Tcairo_line_cap_t; cdecl; external LIB_CAIRO;
function  cairo_get_line_join(cr: Pcairo_t): Tcairo_line_join_t; cdecl; external LIB_CAIRO;
function  cairo_get_miter_limit(cr: Pcairo_t): Double; cdecl; external LIB_CAIRO;
function  cairo_get_dash_count(cr: Pcairo_t): LongInt; cdecl; external LIB_CAIRO;
procedure cairo_get_dash(cr: Pcairo_t; dashes, offset: PDouble); cdecl; external LIB_CAIRO;
procedure cairo_get_matrix(cr: Pcairo_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
function  cairo_get_target(cr: Pcairo_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
function  cairo_get_group_target(cr: Pcairo_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;

function  cairo_copy_path(cr: Pcairo_t): Pcairo_path_t; cdecl; external LIB_CAIRO;
function  cairo_copy_path_flat(cr: Pcairo_t): Pcairo_path_t; cdecl; external LIB_CAIRO;
procedure cairo_append_path(cr: Pcairo_t; path: Pcairo_path_t); cdecl; external LIB_CAIRO;
procedure cairo_path_destroy(path: Pcairo_path_t); cdecl; external LIB_CAIRO;

(* Error status queries *)

function  cairo_status(cr: Pcairo_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_status_to_string(status: Tcairo_status_t): Pchar; cdecl; external LIB_CAIRO;

(* Surface manipulation *)

function cairo_surface_create_similar(other: Pcairo_surface_t; content: Tcairo_content_t; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
function cairo_surface_create_for_rectangle(other: Pcairo_surface_t; x, y, width, height: double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
function  cairo_surface_reference(surface: Pcairo_surface_t): Pcairo_surface_t; cdecl; external LIB_CAIRO;
procedure cairo_surface_finish(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
procedure cairo_surface_destroy(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
function  cairo_surface_get_reference_count(surface: Pcairo_surface_t): LongWord; cdecl; external LIB_CAIRO;
function  cairo_surface_status(surface: Pcairo_surface_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_surface_get_type(surface: Pcairo_surface_t): Tcairo_surface_type_t; cdecl; external LIB_CAIRO;
function  cairo_surface_get_content(surface: Pcairo_surface_t): Tcairo_content_t; cdecl; external LIB_CAIRO;
function  cairo_surface_write_to_png(surface: Pcairo_surface_t; filename: Pchar): Tcairo_status_t; cdecl; external LIB_CAIRO;
//function  cairo_surface_write_to_png_stream(surface: Pcairo_surface_t; write_func: Tcairo_write_func_t; closure: pointer): Tcairo_status_t; cdecl; external LIB_CAIRO;
//function  cairo_surface_get_user_data(surface: Pcairo_surface_t; key: Pcairo_user_data_key_t): pointer; cdecl; external LIB_CAIRO;
//function  cairo_surface_set_user_data(surface: Pcairo_surface_t; key: Pcairo_user_data_key_t; user_data: pointer; destroy: Tcairo_destroy_func_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
procedure cairo_surface_get_font_options(surface: Pcairo_surface_t; options: Pcairo_font_options_t); cdecl; external LIB_CAIRO;
procedure cairo_surface_flush(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
procedure cairo_surface_mark_dirty(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
procedure cairo_surface_mark_dirty_rectangle(surface: Pcairo_surface_t; x, y, width, height: LongInt); cdecl; external LIB_CAIRO;
procedure cairo_surface_set_device_offset(surface: Pcairo_surface_t; x_offset, y_offset: Double); cdecl; external LIB_CAIRO;
procedure cairo_surface_get_device_offset(surface: Pcairo_surface_t; x_offset, y_offset: PDouble); cdecl; external LIB_CAIRO;
procedure cairo_surface_set_fallback_resolution(surface: Pcairo_surface_t; x_pixels_per_inch, y_pixels_per_inch: Double); cdecl; external LIB_CAIRO;
function cairo_surface_get_device(surface: Pcairo_surface_t): Pcairo_device_t; cdecl; external LIB_CAIRO;

{* cairo device *}
function cairo_device_get_type(device: PCairo_device_t): Tcairo_device_type_t; cdecl; external LIB_CAIRO;

(* Image-surface functions *)

function  cairo_format_stride_for_width(format: Tcairo_format_t; width : LongInt): LongInt; cdecl; external LIB_CAIRO;
function  cairo_image_surface_create(format: Tcairo_format_t; width, height: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
function  cairo_image_surface_create_for_data(data: Pbyte; format: Tcairo_format_t; width, height, stride: LongInt): Pcairo_surface_t; cdecl; external LIB_CAIRO;
function  cairo_image_surface_get_data(surface: Pcairo_surface_t): PChar; cdecl; external LIB_CAIRO;
function  cairo_image_surface_get_format(surface: Pcairo_surface_t): Tcairo_format_t; cdecl; external LIB_CAIRO;
function  cairo_image_surface_get_width(surface: Pcairo_surface_t): LongInt; cdecl; external LIB_CAIRO;
function  cairo_image_surface_get_height(surface: Pcairo_surface_t): LongInt; cdecl; external LIB_CAIRO;
function  cairo_image_surface_get_stride(surface: Pcairo_surface_t): LongInt; cdecl; external LIB_CAIRO;
function  cairo_image_surface_create_from_png(filename: Pchar): Pcairo_surface_t; cdecl; external LIB_CAIRO;
//function  cairo_image_surface_create_from_png_stream(read_func: Tcairo_read_func_t; closure: pointer): Pcairo_surface_t; cdecl; external LIB_CAIRO;

(* Pattern creation functions *)

function  cairo_pattern_create_rgb(red, green, blue: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_create_rgba(red, green, blue, alpha: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_create_for_surface(surface: Pcairo_surface_t): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_create_linear(x0, y0, x1, y1: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_create_radial(cx0, cy0, radius0, cx1, cy1, radius1: Double): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_reference(pattern: Pcairo_pattern_t): Pcairo_pattern_t; cdecl; external LIB_CAIRO;
procedure cairo_pattern_destroy(pattern: Pcairo_pattern_t); cdecl; external LIB_CAIRO;
function  cairo_pattern_get_reference_count (pattern: Pcairo_pattern_t): LongWord; cdecl; external LIB_CAIRO;
function  cairo_pattern_status(pattern: Pcairo_pattern_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
//function  cairo_pattern_get_user_data (pattern: Pcairo_pattern_t; key: Pcairo_user_data_key_t): Pointer; cdecl; external LIB_CAIRO;
//function  cairo_pattern_set_user_data (pattern: Pcairo_pattern_t; key: Pcairo_user_data_key_t; user_data: Pointer; destroy: Tcairo_destroy_func_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_get_type(pattern: Pcairo_pattern_t): Tcairo_pattern_type_t; cdecl; external LIB_CAIRO;
procedure cairo_pattern_add_color_stop_rgb(pattern: Pcairo_pattern_t; offset, red, green, blue: Double); cdecl; external LIB_CAIRO;
procedure cairo_pattern_add_color_stop_rgba(pattern: Pcairo_pattern_t; offset, red, green, blue, alpha: Double); cdecl; external LIB_CAIRO;
procedure cairo_pattern_set_matrix(pattern: Pcairo_pattern_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_pattern_get_matrix(pattern: Pcairo_pattern_t; matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_pattern_set_extend(pattern: Pcairo_pattern_t; extend: Tcairo_extend_t); cdecl; external LIB_CAIRO;
function  cairo_pattern_get_extend(pattern: Pcairo_pattern_t): Tcairo_extend_t; cdecl; external LIB_CAIRO;
procedure cairo_pattern_set_filter(pattern: Pcairo_pattern_t; filter: Tcairo_filter_t); cdecl; external LIB_CAIRO;
function  cairo_pattern_get_filter(pattern: Pcairo_pattern_t): Tcairo_filter_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_get_rgba (pattern: Pcairo_pattern_t; red, green, blue, alpha: PDouble): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_get_surface (pattern: Pcairo_pattern_t; surface: PPcairo_surface_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_get_color_stop_rgba(pattern: Pcairo_pattern_t; index: LongInt; offset, red, green, blue, alpha: PDouble): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_get_color_stop_count(pattern: Pcairo_pattern_t; count: PLongInt): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_get_linear_points (pattern: Pcairo_pattern_t; x0, y0, x1, y1: PDouble): Tcairo_status_t; cdecl; external LIB_CAIRO;
function  cairo_pattern_get_radial_circles (pattern: Pcairo_pattern_t; x0, y0, r0, x1, y1, r1:PDouble): Tcairo_status_t; cdecl; external LIB_CAIRO;

(* Matrix functions *)

procedure cairo_matrix_init(matrix: Pcairo_matrix_t; xx, yx, xy, yy, x0, y0: Double); cdecl; external LIB_CAIRO;
procedure cairo_matrix_init_identity(matrix: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_matrix_init_translate(matrix: Pcairo_matrix_t; tx, ty: Double); cdecl; external LIB_CAIRO;
procedure cairo_matrix_init_scale(matrix: Pcairo_matrix_t; sx, sy: Double); cdecl; external LIB_CAIRO;
procedure cairo_matrix_init_rotate(matrix: Pcairo_matrix_t; radians: Double); cdecl; external LIB_CAIRO;
procedure cairo_matrix_translate(matrix: Pcairo_matrix_t; tx, ty: Double); cdecl; external LIB_CAIRO;
procedure cairo_matrix_scale(matrix: Pcairo_matrix_t; sx, sy: Double); cdecl; external LIB_CAIRO;
procedure cairo_matrix_rotate(matrix: Pcairo_matrix_t; radians: Double); cdecl; external LIB_CAIRO;
function  cairo_matrix_invert(matrix: Pcairo_matrix_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
procedure cairo_matrix_multiply(result, a, b: Pcairo_matrix_t); cdecl; external LIB_CAIRO;
procedure cairo_matrix_transform_distance(matrix: Pcairo_matrix_t; dx, dy: PDouble); cdecl; external LIB_CAIRO;
procedure cairo_matrix_transform_point(matrix: Pcairo_matrix_t; x, y: PDouble); cdecl; external LIB_CAIRO;

(* PDF functions *)

function  cairo_pdf_surface_create(filename: PChar; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
//function  cairo_pdf_surface_create_for_stream(write_func: Tcairo_write_func_t; closure: Pointer; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
procedure cairo_pdf_surface_set_size(surface: Pcairo_surface_t; width_in_points, height_in_points: Double); cdecl; external LIB_CAIRO;

(* PS functions *)

function  cairo_ps_surface_create(filename: PChar; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
//function  cairo_ps_surface_create_for_stream(write_func: Tcairo_write_func_t; closure: Pointer; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
procedure cairo_ps_surface_set_size(surface: Pcairo_surface_t; width_in_points, height_in_points: Double); cdecl; external LIB_CAIRO;
procedure cairo_ps_surface_dsc_comment(surface: Pcairo_surface_t; comment: PChar); cdecl; external LIB_CAIRO;
procedure cairo_ps_surface_dsc_begin_setup(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;
procedure cairo_ps_surface_dsc_begin_page_setup(surface: Pcairo_surface_t); cdecl; external LIB_CAIRO;

(* SVG functions *)

function  cairo_svg_surface_create(filename: PChar; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
//function  cairo_svg_surface_create_for_stream(write_func: Tcairo_write_func_t; closure: Pointer; width_in_points, height_in_points: Double): Pcairo_surface_t; cdecl; external LIB_CAIRO;
//procedure cairo_svg_surface_restrict_to_version(surface: Pcairo_surface_t; version: Tcairo_svg_version_t); cdecl; external LIB_CAIRO;

//procedure cairo_svg_get_versions(versions: ppcairo_svg_version_t;num_versions:pcint);cdecl; external LIB_CAIRO;
//function  cairo_svg_version_to_string(version: Tcairo_svg_version_t): PChar; cdecl; external LIB_CAIRO;


(* Functions to be used while debugging (not intended for use in production code) *)

procedure cairo_debug_reset_static_data; cdecl; external LIB_CAIRO;

(* cairo_region addon *)

function cairo_region_create: Pcairo_region_t; cdecl; external LIB_CAIRO;
function cairo_region_create_rectangle(const ARect: Pcairo_rectangle_int_t): Pcairo_region_t; cdecl; external LIB_CAIRO;
function cairo_region_create_rectangles(const ARect: PPcairo_rectangle_int_t; ACount: cint): Pcairo_region_t; cdecl; external LIB_CAIRO;
function cairo_region_copy(ARegion: Pcairo_region_t): Pcairo_region_t; cdecl; external LIB_CAIRO;
function cairo_region_reference(ARegion: Pcairo_region_t): Pcairo_region_t; cdecl; external LIB_CAIRO;
procedure cairo_region_destroy(ARegion: Pcairo_region_t); cdecl; external LIB_CAIRO;
function cairo_region_status(ARegion: Pcairo_region_t): Tcairo_status_t; cdecl;  external LIB_CAIRO;
procedure cairo_region_get_extents(ARegion: Pcairo_region_t; AOutRect: Pcairo_rectangle_int_t); cdecl; external LIB_CAIRO;
function cairo_region_num_rectangles(ARegion: Pcairo_region_t): cint; cdecl;  external LIB_CAIRO;
procedure cairo_region_get_rectangle(ARegion: Pcairo_region_t; nth: cint; AOutRect: Pcairo_rectangle_int_t); cdecl; external LIB_CAIRO;
function cairo_region_is_empty(ARegion: Pcairo_region_t): boolean; cdecl;  external LIB_CAIRO;
function cairo_region_contains_point(ARegion: Pcairo_region_t; x,y: cint): boolean; cdecl;  external LIB_CAIRO;
function cairo_region_contains_rectangle(ARegion: Pcairo_region_t; ARect: Pcairo_rectangle_int_t): Tcairo_region_overlap_t; cdecl; external LIB_CAIRO;

// ops
function cairo_region_equal(ARegion1: Pcairo_region_t; ARegion2: Pcairo_region_t): boolean; cdecl; external LIB_CAIRO;
procedure cairo_region_translate(ADestRegion: Pcairo_region_t; dx: integer; dy: integer); cdecl; external LIB_CAIRO;
function cairo_region_intersect(ADestRegion: Pcairo_region_t; ASrcRegion: Pcairo_region_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function cairo_region_intersect_rectangle(ADestRegion: Pcairo_region_t; ASrcRect: Pcairo_rectangle_int_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function cairo_region_subtract(ADestRegion: Pcairo_region_t; ASrcRegion: Pcairo_region_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function cairo_region_subtract_rectangle(ADestRegion: Pcairo_region_t; ASrcRect: Pcairo_rectangle_int_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function cairo_region_union(ADestRegion: Pcairo_region_t; ASrcRegion: Pcairo_region_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function cairo_region_union_rectangle(ADestRegion: Pcairo_region_t; ASrcRect: Pcairo_rectangle_int_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function cairo_region_xor(ADestRegion: Pcairo_region_t; ASrcRegion: Pcairo_region_t): Tcairo_status_t; cdecl; external LIB_CAIRO;
function cairo_region_xor_rectangle(ADestRegion: Pcairo_region_t; ASrcRect: Pcairo_rectangle_int_t): Tcairo_status_t; cdecl; external LIB_CAIRO;


implementation
end.
