OCaml interface to Cairo
This is an OCaml binding for the Cairo library, a 2D graphics library with support for multiple output devices.
You need the development files of Cairo (e.g. on Debian, you must
install the package
libcairo2-dev, on Mageia
cairo-devel) and the OCaml package
lablgtk2 (in the OPAM package
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
oasis setup ocaml setup.ml -configure ocaml setup.ml -build
You can then install it with:
ocaml setup.ml -install
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
ocaml setup.ml -configure --enable-examples
All the examples below are available (with some comments) by clicking on images in the tutorial.
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.
setsourcegradient.ml shows how to use radial and linear patterns. It generates:
path_close.ml shows how to draw a closed path. It produces the PNG:
textextents.ml displays graphically the various dimensions one can request about text. It generates the PNG:
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:
tips_letter.ml illustrates the wrong way of centering characters based on their individual extents:
Instead, one should combine them with the font extents as shown in tips_font.ml to have: