Binding to Cairo, a 2D Vector Graphics Library.
OCaml C Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
doc
examples
opam
src
tests
.gitignore
.travis-opam.sh
.travis.yml
Makefile
Makefile.conf
README.md
_oasis
_opam
_tags
appveyor.yml
config.ml
myocamlbuild.ml
setup.ml

README.md

Travis Build Status AppVeyor Build status

OCaml interface to Cairo

This is an OCaml binding for the Cairo library, a 2D graphics library with support for multiple output devices.

You can read the API of Cairo and Cairo_gtk online.

Prerequisites

You need the development files of Cairo (e.g. on Debian, you must install the package libcairo2-dev, on Mageia libcairo-devel, and on Fedora cairo-devel) and the OCaml package lablgtk2 (in the OPAM package lablgtk).

Compilation & Installation

The easier way to install this library — once the prerequisites are set up — is to use opam:

opam install cairo2

If you would like to compile from the sources, install OASIS:

opam install oasis

and do:

oasis setup
ocaml setup.ml -configure
ocaml setup.ml -build

You can then install it with:

ocaml setup.ml -install

Examples

You can read a version of the Cairo tutorial using this module. The code of this tutorial is available in the examples/ directory. To compile it, you must configure the project with

ocaml setup.ml -configure --enable-examples

All the examples below are available (with some comments) by clicking on images in the tutorial.

Basic examples

  • stroke.ml shows how to draw (stroke) a simple rectangle on a PNG surface.

  • stroke.ml shows how to fill a simple rectangle on a PNG surface.

  • showtext.ml illustrates how to select a font and draw some text on a PNG surface.

  • paint.ml shows how to paint the current source everywhere within the current clip region.

  • mask.ml shows how to apply a radial transparency mask on top of a linear gradient.

  • setsourcergba.ml produces

    Source RGBA

  • setsourcegradient.ml shows how to use radial and linear patterns. It generates:

    Gradient

  • path_close.ml shows how to draw a closed path. It produces the PNG:

    close path

  • textextents.ml displays graphically the various dimensions one can request about text. It generates the PNG:

    text

  • text_extents.ml exemplifies drawing consecutive UTF-8 strings in a PDF file. Some helping lines are also added to show the text extents.

  • tips_ellipse.ml shows the action of dilation on the line width and how to properly draw ellipses. It generates the PNG:

    ellipse

  • tips_letter.ml illustrates the wrong way of centering characters based on their individual extents:

    letters

    Instead, one should combine them with the font extents as shown in tips_font.ml to have:

    fonts

Examples generating the images of the tutorial