1/*  This file is part of PLcairo.
    2
    3    Copyright (C) 2015 Keri Harris <keri@gentoo.org>
    4
    5    PLcairo is free software: you can redistribute it and/or modify
    6    it under the terms of the GNU Lesser General Public License as
    7    published by the Free Software Foundation, either version 2.1
    8    of the License, or (at your option) any later version.
    9
   10    PLcairo is distributed in the hope that it will be useful,
   11    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13    GNU General Public License for more details.
   14
   15    You should have received a copy of the GNU General Public License
   16    along with PLcairo.  If not, see <http://www.gnu.org/licenses/>.
   17*/
   18
   19:- module(plcairo, [
   20                     /* Cairo Context */
   21                     cairo_clip/1,
   22                     cairo_clip_extents/5,
   23                     cairo_clip_preserve/1,
   24                     cairo_copy_clip_rectangle_list/2,
   25                     cairo_copy_page/1,
   26                     cairo_create/2,
   27                     cairo_fill/1,
   28                     cairo_fill_extents/5,
   29                     cairo_fill_preserve/1,
   30                     cairo_get_antialias/2,
   31                     cairo_get_dash/3,
   32                     cairo_get_dash_count/2,
   33                     cairo_get_fill_rule/2,
   34                     cairo_get_group_target/2,
   35                     cairo_get_line_cap/2,
   36                     cairo_get_line_join/2,
   37                     cairo_get_line_width/2,
   38                     cairo_get_miter_limit/2,
   39                     cairo_get_operator/2,
   40                     cairo_get_source/2,
   41                     cairo_get_target/2,
   42                     cairo_get_tolerance/2,
   43                     cairo_in_clip/3,
   44                     cairo_in_fill/3,
   45                     cairo_in_stroke/3,
   46                     cairo_mask/2,
   47                     cairo_mask_surface/4,
   48                     cairo_paint/1,
   49                     cairo_paint_with_alpha/2,
   50                     cairo_pop_group/2,
   51                     cairo_pop_group_to_source/1,
   52                     cairo_push_group/1,
   53                     cairo_push_group_with_content/2,
   54                     cairo_reset_clip/1,
   55                     cairo_restore/1,
   56                     cairo_save/1,
   57                     cairo_set_antialias/2,
   58                     cairo_set_dash/3,
   59                     cairo_set_fill_rule/2,
   60                     cairo_set_line_cap/2,
   61                     cairo_set_line_join/2,
   62                     cairo_set_line_width/2,
   63                     cairo_set_miter_limit/2,
   64                     cairo_set_operator/2,
   65                     cairo_set_source/2,
   66                     cairo_set_source_rgb/4,
   67                     cairo_set_source_rgba/5,
   68                     cairo_set_source_surface/4,
   69                     cairo_set_tolerance/2,
   70                     cairo_show_page/1,
   71                     cairo_stroke/1,
   72                     cairo_stroke_extents/5,
   73                     cairo_stroke_preserve/1,
   74
   75                     /* Cairo Paths */
   76                     cairo_append_path/2,
   77                     cairo_arc/6,
   78                     cairo_arc_negative/6,
   79                     cairo_close_path/1,
   80                     cairo_copy_path/2,
   81                     cairo_copy_path_flat/2,
   82                     cairo_curve_to/7,
   83                     cairo_get_current_point/3,
   84                     cairo_glyph_path/2,
   85                     cairo_has_current_point/2,
   86                     cairo_line_to/3,
   87                     cairo_move_to/3,
   88                     cairo_new_path/1,
   89                     cairo_new_sub_path/1,
   90                     cairo_path_extents/5,
   91                     cairo_rectangle/5,
   92                     cairo_rel_curve_to/7,
   93                     cairo_rel_line_to/3,
   94                     cairo_rel_move_to/3,
   95                     cairo_text_path/2,
   96
   97                     /* Cairo Pattern */
   98                     cairo_pattern_add_color_stop_rgb/5,
   99                     cairo_pattern_add_color_stop_rgba/6,
  100                     cairo_pattern_create_for_surface/2,
  101                     cairo_pattern_create_linear/5,
  102                     cairo_pattern_create_mesh/1,
  103                     cairo_pattern_create_radial/7,
  104                     cairo_pattern_create_rgb/4,
  105                     cairo_pattern_create_rgba/5,
  106                     cairo_pattern_get_color_stop_count/2,
  107                     cairo_pattern_get_color_stop_rgba/7,
  108                     cairo_pattern_get_extend/2,
  109                     cairo_pattern_get_filter/2,
  110                     cairo_pattern_get_linear_points/5,
  111                     cairo_pattern_get_matrix/2,
  112                     cairo_pattern_get_radial_circles/7,
  113                     cairo_pattern_get_rgba/5,
  114                     cairo_pattern_get_surface/2,
  115                     cairo_pattern_get_type/2,
  116                     cairo_mesh_pattern_begin_patch/1,
  117                     cairo_mesh_pattern_curve_to/7,
  118                     cairo_mesh_pattern_end_patch/1,
  119                     cairo_mesh_pattern_get_control_point/5,
  120                     cairo_mesh_pattern_get_corner_color_rgba/7,
  121                     cairo_mesh_pattern_get_patch_count/2,
  122                     cairo_mesh_pattern_get_path/3,
  123                     cairo_mesh_pattern_line_to/3,
  124                     cairo_mesh_pattern_move_to/3,
  125                     cairo_mesh_pattern_set_control_point/4,
  126                     cairo_mesh_pattern_set_corner_color_rgb/5,
  127                     cairo_mesh_pattern_set_corner_color_rgba/6,
  128                     cairo_pattern_set_extend/2,
  129                     cairo_pattern_set_filter/2,
  130                     cairo_pattern_set_matrix/2,
  131
  132                     /* Cairo Region */
  133                     cairo_region_contains_point/3,
  134                     cairo_region_contains_rectangle/3,
  135                     cairo_region_create/1,
  136                     cairo_region_create_rectangle/2,
  137                     cairo_region_create_rectangles/2,
  138                     cairo_region_equal/2,
  139                     cairo_region_get_extents/2,
  140                     cairo_region_get_rectangle/3,
  141                     cairo_region_intersect/2,
  142                     cairo_region_intersect_rectangle/2,
  143                     cairo_region_is_empty/1,
  144                     cairo_region_num_rectangles/2,
  145                     cairo_region_subtract/2,
  146                     cairo_region_subtract_rectangle/2,
  147                     cairo_region_translate/3,
  148                     cairo_region_union/2,
  149                     cairo_region_union_rectangle/2,
  150                     cairo_region_xor/2,
  151                     cairo_region_xor_rectangle/2,
  152
  153                     /* Cairo Transformation */
  154                     cairo_device_to_user/5,
  155                     cairo_device_to_user_distance/5,
  156                     cairo_get_matrix/2,
  157                     cairo_identity_matrix/1,
  158                     cairo_rotate/2,
  159                     cairo_scale/3,
  160                     cairo_set_matrix/2,
  161                     cairo_transform/2,
  162                     cairo_translate/3,
  163                     cairo_user_to_device/5,
  164                     cairo_user_to_device_distance/5,
  165
  166                     /* Cairo Text */
  167                     cairo_font_extents/2,
  168                     cairo_get_font_face/2,
  169                     cairo_get_font_matrix/2,
  170                     cairo_get_font_options/2,
  171                     cairo_get_scaled_font/2,
  172                     cairo_glyph_extents/3,
  173                     cairo_select_font_face/4,
  174                     cairo_set_font_face/2,
  175                     cairo_set_font_matrix/2,
  176                     cairo_set_font_options/2,
  177                     cairo_set_font_size/2,
  178                     cairo_set_scaled_font/2,
  179                     cairo_show_glyphs/2,
  180                     cairo_show_text/2,
  181                     cairo_show_text_glyphs/5,
  182                     cairo_text_extents/3,
  183                     cairo_toy_font_face_create/4,
  184                     cairo_toy_font_face_get_family/2,
  185                     cairo_toy_font_face_get_slant/2,
  186                     cairo_toy_font_face_get_weight/2,
  187
  188                     /* Cairo Raster Source */
  189                     cairo_pattern_create_raster_source/4,
  190
  191                     /* Cairo Tag */
  192                     cairo_tag_begin/3,
  193                     cairo_tag_end/2,
  194
  195                     /* Cairo Font Face */
  196                     cairo_font_face_get_type/2,
  197
  198                     /* Cairo Scaled Font */
  199                     cairo_scaled_font_create/5,
  200                     cairo_scaled_font_extents/2,
  201                     cairo_scaled_font_get_ctm/2,
  202                     cairo_scaled_font_get_font_face/2,
  203                     cairo_scaled_font_get_font_matrix/2,
  204                     cairo_scaled_font_get_font_options/2,
  205                     cairo_scaled_font_get_scale_matrix/2,
  206                     cairo_scaled_font_get_type/2,
  207                     cairo_scaled_font_glyph_extents/3,
  208                     cairo_scaled_font_text_extents/3,
  209                     cairo_scaled_font_text_to_glyphs/7,
  210
  211                     /* Cairo Font Options */
  212                     cairo_font_options_create/1,
  213                     cairo_font_options_equal/3,
  214                     cairo_font_options_get_antialias/2,
  215                     cairo_font_options_get_hint_metrics/2,
  216                     cairo_font_options_get_hint_style/2,
  217                     cairo_font_options_get_subpixel_order/2,
  218                     cairo_font_options_get_variations/2,
  219                     cairo_font_options_hash/2,
  220                     cairo_font_options_merge/2,
  221                     cairo_font_options_set_antialias/2,
  222                     cairo_font_options_set_hint_metrics/2,
  223                     cairo_font_options_set_hint_style/2,
  224                     cairo_font_options_set_subpixel_order/2,
  225                     cairo_font_options_set_variations/2,
  226
  227/* FIXME: add cairo freetype fonts */
  228/* FIXME: add cairo win32 fonts */
  229/* FIXME: add cairo quartz fonts */
  230/* FIXME: add cairo user fonts */
  231
  232                     /* Cairo Device */
  233                     cairo_device_acquire/1,
  234                     cairo_device_finish/1,
  235                     cairo_device_flush/1,
  236                     cairo_device_get_type/2,
  237                     cairo_device_observer_elapsed/2,
  238                     cairo_device_observer_fill_elapsed/2,
  239                     cairo_device_observer_glyphs_elapsed/2,
  240                     cairo_device_observer_mask_elapsed/2,
  241                     cairo_device_observer_paint_elapsed/2,
  242                     cairo_device_observer_print/3,
  243                     cairo_device_observer_stroke_elapsed/2,
  244                     cairo_device_release/1,
  245
  246                     /* Cairo Surface */
  247                     cairo_surface_copy_page/1,
  248                     cairo_surface_create_for_rectangle/6,
  249                     cairo_surface_create_similar/5,
  250                     cairo_surface_create_similar_image/5,
  251                     cairo_surface_finish/1,
  252                     cairo_surface_flush/1,
  253                     cairo_surface_get_content/2,
  254                     cairo_surface_get_device/2,
  255                     cairo_surface_get_device_offset/3,
  256                     cairo_surface_get_device_scale/3,
  257                     cairo_surface_get_fallback_resolution/3,
  258                     cairo_surface_get_font_options/2,
  259                     cairo_surface_get_type/2,
  260                     cairo_surface_has_show_text_glyphs/1,
  261                     cairo_surface_map_to_image/3,
  262                     cairo_surface_mark_dirty/1,
  263                     cairo_surface_mark_dirty_rectangle/5,
  264                     cairo_surface_set_device_offset/3,
  265                     cairo_surface_set_device_scale/3,
  266                     cairo_surface_set_fallback_resolution/3,
  267                     cairo_surface_show_page/1,
  268                     cairo_surface_supports_mime_type/2,
  269                     cairo_surface_unmap_image/2,
  270 
  271                     /* Cairo Image Surface */
  272                     cairo_image_surface_create/4,
  273                     cairo_image_surface_get_format/2,
  274                     cairo_image_surface_get_height/2,
  275                     cairo_image_surface_get_stride/2,
  276                     cairo_image_surface_get_width/2,
  277
  278                     /* Cairo PDF Surface */
  279                     cairo_pdf_get_versions/1,
  280                     cairo_pdf_surface_add_outline/6,
  281                     cairo_pdf_surface_create/4,
  282                     cairo_pdf_surface_create_for_stream/4,
  283                     cairo_pdf_surface_restrict_to_version/2,
  284                     cairo_pdf_surface_set_metadata/3,
  285                     cairo_pdf_surface_set_page_label/2,
  286                     cairo_pdf_surface_set_size/3,
  287                     cairo_pdf_surface_set_thumbnail_size/3,
  288                     cairo_pdf_version_to_string/2,
  289
  290                     /* Cairo PNG Surface */
  291                     cairo_image_surface_create_from_png/2,
  292                     cairo_image_surface_create_from_png_stream/2,
  293                     cairo_surface_write_to_png/2,
  294                     cairo_surface_write_to_png_stream/2,
  295
  296                     /* Cairo PostScript surface */
  297                     cairo_ps_get_levels/1,
  298                     cairo_ps_level_to_string/2,
  299                     cairo_ps_surface_create/4,
  300                     cairo_ps_surface_create_for_stream/4,
  301                     cairo_ps_surface_dsc_begin_page_setup/1,
  302                     cairo_ps_surface_dsc_begin_setup/1,
  303                     cairo_ps_surface_dsc_comment/2,
  304                     cairo_ps_surface_get_eps/2,
  305                     cairo_ps_surface_restrict_to_level/2,
  306                     cairo_ps_surface_set_eps/2,
  307                     cairo_ps_surface_set_size/3,
  308
  309                     /* Cairo Recording Surface */
  310                     cairo_recording_surface_create/3,
  311                     cairo_recording_surface_get_extents/2,
  312                     cairo_recording_surface_ink_extents/5,
  313
  314                     /* Cairo SVG Surface */
  315                     cairo_svg_get_versions/1,
  316                     cairo_svg_surface_create/4,
  317                     cairo_svg_surface_create_for_stream/4,
  318                     cairo_svg_surface_get_document_unit/2,
  319                     cairo_svg_surface_restrict_to_version/2,
  320                     cairo_svg_surface_set_document_unit/2,
  321                     cairo_svg_version_to_string/2,
  322
  323                     /* Cairo Script Surface */
  324                     cairo_script_create/2,
  325                     cairo_script_create_for_stream/2,
  326                     cairo_script_from_recording_surface/3,
  327                     cairo_script_get_mode/2,
  328                     cairo_script_set_mode/2,
  329                     cairo_script_surface_create/5,
  330                     cairo_script_surface_create_for_target/3,
  331                     cairo_script_write_comment/2,
  332
  333                     /* Cairo Matrix */
  334                     cairo_matrix_init/7,
  335                     cairo_matrix_init_identity/1,
  336                     cairo_matrix_init_rotate/2,
  337                     cairo_matrix_init_scale/3,
  338                     cairo_matrix_init_translate/3,
  339                     cairo_matrix_invert/1,
  340                     cairo_matrix_multiply/3,
  341                     cairo_matrix_rotate/2,
  342                     cairo_matrix_scale/3,
  343                     cairo_matrix_transform_distance/5,
  344                     cairo_matrix_transform_point/5,
  345                     cairo_matrix_translate/3,
  346
  347                     /* PLcairo Specific */
  348                     plcairo_debug/1,
  349                     plcairo_version/1
  350                   ]).  351
  352
  353:- use_module(library(plgi)).  354:- use_foreign_library(foreign(plcairo), install_plcairo).  355
  356:- multifile
  357	prolog:message/3.  358
  359prolog:error_message(plcairo_error(Message)) -->
  360	[ 'PLcairo Error: ~w'-[Message] ].
  361
  362prolog:error_message(cairo_error(Code, Message)) -->
  363	[ 'cairo Error: [~w] ~w'-[Code, Message] ]