Cairo

Thin FFI bindings over the Cairo 2D graphics library.

The goal of this module is to expose Cairo's C API with Carp-friendly naming (kebab-case, grouped under Cairo), without adding a higher-level wrapper on top. Higher-level sketching primitives live in anima.carp.

Installation

Cairo must be installed on the system and discoverable via pkg-config:

brew install cairo        # macOS
apt install libcairo2-dev # Debian / Ubuntu

Example

(load "git@github.com:carpentry-org/cairo.carp@0.3.0")

(defn main []
  (let-do [surf (Cairo.image-surface-create Cairo.format-argb32 200 200)
           cr (Cairo.create surf)]
    (Cairo.set-source-rgb cr 1.0 1.0 1.0)
    (Cairo.paint cr)
    (Cairo.set-source-rgb cr 0.0 0.0 0.0)
    (Cairo.set-line-width cr 4.0)
    (Cairo.move-to cr 20.0 20.0)
    (Cairo.line-to cr 180.0 180.0)
    (Cairo.stroke cr)
    (ignore (Cairo.surface-write-to-png surf (cstr "out.png")))
    (Cairo.destroy cr)
    (Cairo.surface-destroy surf)))

Memory management

Cairo uses reference counting internally; this binding does not manage lifetimes for you. Every Cairo.create must be paired with a Cairo.destroy, every *-surface-create with a Cairo.surface-destroy, and every Cairo.region-create* with a Cairo.region-destroy. Cairo.pop-group hands back a pattern that needs a Cairo.pattern-destroy, where Cairo.pop-group-to-source disposes of it for you. See the Cairo manual for details.

=

defn

(Fn [CairoStatus, CairoStatus] Bool)

                        (= a b)
                    

Equality on status codes, implemented by converting to Int first.

antialias-best

external

CairoAntialias

antialias-default

external

CairoAntialias

antialias-fast

external

CairoAntialias

antialias-good

external

CairoAntialias

antialias-gray

external

CairoAntialias

antialias-none

external

CairoAntialias

antialias-subpixel

external

CairoAntialias

append-path

defn

(Fn [(Ptr CairoContext), (Ref (Array CairoPathElement) a)] ())

                        (append-path cr elements)
                    

Append elements to the context's current path, interpreting their coordinates in the context's current user space.

arc

external

(Fn [(Ptr CairoContext), Double, Double, Double, Double, Double] ())

Add a circular arc centered at (xc yc) with radius, sweeping from angle1 to angle2 radians (positive = clockwise in Cairo's default orientation).

arc-negative

external

(Fn [(Ptr CairoContext), Double, Double, Double, Double, Double] ())

clip

external

(Fn [(Ptr CairoContext)] ())

clip-preserve

external

(Fn [(Ptr CairoContext)] ())

close-path

external

(Fn [(Ptr CairoContext)] ())

content-alpha

external

CairoContent

content-color

external

CairoContent

content-color-alpha

external

CairoContent

copy-path

defn

(Fn [(Ptr CairoContext)] (Result (Array CairoPathElement) CairoStatus))

                        (copy-path cr)
                    

Return the current path as an array of CairoPathElements, in user-space coordinates, or the context's error status in the error branch.

Cairo reports a close-path as a ClosePath followed by a MoveTo back to the start of the closed subpath, which is where the current point ends up; both are surfaced as-is.

copy-path-flat

defn

(Fn [(Ptr CairoContext)] (Result (Array CairoPathElement) CairoStatus))

                        (copy-path-flat cr)
                    

Like copy-path, but with every curve approximated by a series of LineTo elements within tolerance. The result never contains a CurveTo.

create

external

(Fn [(Ptr CairoSurface)] (Ptr CairoContext))

Create a drawing context targeting the given surface. Must be paired with destroy.

curve-to

external

(Fn [(Ptr CairoContext), Double, Double, Double, Double, Double, Double] ())

Append a cubic Bézier spline through (x1 y1), (x2 y2), (x3 y3).

destroy

external

(Fn [(Ptr CairoContext)] ())

device-to-user

instantiate

(Fn [(Ptr CairoContext), Double, Double] CairoPoint)

Convert the point (x y) from device space to user space.

device-to-user-distance

instantiate

(Fn [(Ptr CairoContext), Double, Double] CairoPoint)

Convert the vector (dx dy) from device space to user space, ignoring translation.

extend-none

external

CairoExtend

extend-pad

external

CairoExtend

extend-reflect

external

CairoExtend

extend-repeat

external

CairoExtend

fill

external

(Fn [(Ptr CairoContext)] ())

fill-extents

instantiate

(Fn [(Ptr CairoContext)] CairoExtents)

Compute the bounding box of the area that would be affected by fill.

fill-preserve

external

(Fn [(Ptr CairoContext)] ())

fill-rule-even-odd

external

CairoFillRule

fill-rule-winding

external

CairoFillRule

filter-best

external

CairoFilter

filter-bilinear

external

CairoFilter

filter-fast

external

CairoFilter

filter-good

external

CairoFilter

filter-nearest

external

CairoFilter

font-extents

instantiate

(Fn [(Ptr CairoContext)] CairoFontExtents)

Return a CairoFontExtents for the current font (ascent, descent, height, max advances).

font-face-destroy

external

(Fn [(Ptr CairoFontFace)] ())

Drop a reference to a font face. Pairs with toy-font-face-create and font-face-reference.

font-face-reference

external

(Fn [(Ptr CairoFontFace)] (Ptr CairoFontFace))

Take an additional reference to a font face and return it. Each reference needs its own font-face-destroy.

font-face-status

external

(Fn [(Ptr CairoFontFace)] CairoStatus)

format-a1

external

CairoFormat

format-a8

external

CairoFormat

format-argb32

external

CairoFormat

32-bit ARGB, native-endian. Matches SDL_PIXELFORMAT_ARGB8888 on little-endian.

format-rgb24

external

CairoFormat

get-current-point-x

instantiate

(Fn [(Ptr CairoContext)] Double)

Return the x coordinate of the current point. Undefined if has-current-point? is false.

get-current-point-y

instantiate

(Fn [(Ptr CairoContext)] Double)

Return the y coordinate of the current point. Undefined if has-current-point? is false.

get-dash

instantiate

(Fn [(Ptr CairoContext)] (Array Double))

Return the current dash pattern as an array of doubles.

get-dash-count

external

(Fn [(Ptr CairoContext)] Int)

Return the number of dash segments in the current dash pattern (0 means solid).

get-dash-offset

instantiate

(Fn [(Ptr CairoContext)] Double)

Return the offset into the dash pattern set by set-dash.

get-font-face

external

(Fn [(Ptr CairoContext)] (Ptr CairoFontFace))

Return the context's current font face. The context keeps ownership; take a font-face-reference to hold on to it past the next set-font-face.

get-group-target

external

(Fn [(Ptr CairoContext)] (Ptr CairoSurface))

Return the surface drawing currently goes to: the innermost group's surface, or the context's target if no group is active. It is owned by the context and must not be destroyed.

get-matrix

instantiate

(Fn [(Ptr CairoContext)] CairoMatrix)

Return the context's current transformation matrix.

get-scaled-font

external

(Fn [(Ptr CairoContext)] (Ptr CairoScaledFont))

Return the scaled font the context would use for text right now, combining its font face, size, and transformation. The context keeps ownership.

glyph-extents

instantiate

(Fn [(Ptr CairoContext), (Ref (Array CairoGlyph) a)] CairoTextExtents)

Measure glyphs in the context's current font. Bearings and advances are relative to the first glyph's origin.

glyph-path

instantiate

(Fn [(Ptr CairoContext), (Ref (Array CairoGlyph) a)] ())

Append the outlines of glyphs to the current path, so they can be filled, stroked, or clipped with.

has-current-point?

instantiate

(Fn [(Ptr CairoContext)] Bool)

Return true if the context has a current point (after move-to or drawing operations).

identity-matrix

external

(Fn [(Ptr CairoContext)] ())

image-surface-create

external

(Fn [CairoFormat, Int, Int] (Ptr CairoSurface))

Create an in-memory image surface of the given format, width, and height.

image-surface-create-from-png

external

(Fn [(Ptr CChar)] (Ptr CairoSurface))

Load a PNG file into a new image surface. Must be paired with surface-destroy.

image-surface-get-data

external

(Fn [(Ptr CairoSurface)] (Ptr Byte))

Return a raw pointer to the surface's pixel buffer. Must be preceded by surface-flush.

image-surface-get-height

external

(Fn [(Ptr CairoSurface)] Int)

image-surface-get-stride

external

(Fn [(Ptr CairoSurface)] Int)

image-surface-get-width

external

(Fn [(Ptr CairoSurface)] Int)

line-cap-butt

external

CairoLineCap

line-cap-round

external

CairoLineCap

line-cap-square

external

CairoLineCap

line-join-bevel

external

CairoLineJoin

line-join-miter

external

CairoLineJoin

line-join-round

external

CairoLineJoin

line-to

external

(Fn [(Ptr CairoContext), Double, Double] ())

mask

external

(Fn [(Ptr CairoContext), (Ptr CairoPattern)] ())

Paint the current source through the alpha channel of pattern.

mask-surface

external

(Fn [(Ptr CairoContext), (Ptr CairoSurface), Double, Double] ())

Paint the current source through the alpha channel of surface, with the surface's origin placed at (x y) in user space.

matrix-init-identity

instantiate

(Fn [] CairoMatrix)

Return the identity matrix.

matrix-init-rotate

instantiate

(Fn [Double] CairoMatrix)

Return a matrix that rotates by radians.

matrix-init-scale

instantiate

(Fn [Double, Double] CairoMatrix)

Return a matrix that scales by sx in x and sy in y.

matrix-init-translate

instantiate

(Fn [Double, Double] CairoMatrix)

Return a matrix that translates by (tx ty).

matrix-invert

defn

(Fn [(Ref CairoMatrix a)] (Result CairoMatrix CairoStatus))

                        (matrix-invert m)
                    

Invert m, or return status-invalid-matrix in the error branch if m is not invertible.

matrix-multiply

instantiate

(Fn [(Ref CairoMatrix a), (Ref CairoMatrix b)] CairoMatrix)

Return the matrix that applies a first, then b.

matrix-rotate

instantiate

(Fn [(Ref CairoMatrix a), Double] CairoMatrix)

Return m with a rotation by radians applied before it: points are rotated, then transformed by m.

matrix-scale

instantiate

(Fn [(Ref CairoMatrix a), Double, Double] CairoMatrix)

Return m with a scale by (sx sy) applied before it: points are scaled, then transformed by m.

matrix-transform-distance

instantiate

(Fn [(Ref CairoMatrix a), Double, Double] CairoPoint)

Transform the vector (dx dy) by m, ignoring translation. The components come back in the point's x and y.

matrix-transform-point

instantiate

(Fn [(Ref CairoMatrix a), Double, Double] CairoPoint)

Transform the point (x y) by m.

matrix-translate

instantiate

(Fn [(Ref CairoMatrix a), Double, Double] CairoMatrix)

Return m with a translation by (tx ty) applied before it: points are translated, then transformed by m.

move-to

external

(Fn [(Ptr CairoContext), Double, Double] ())

new-path

external

(Fn [(Ptr CairoContext)] ())

new-sub-path

external

(Fn [(Ptr CairoContext)] ())

operator-add

external

CairoOperator

operator-atop

external

CairoOperator

operator-clear

external

CairoOperator

operator-dest

external

CairoOperator

operator-dest-atop

external

CairoOperator

operator-dest-in

external

CairoOperator

operator-dest-out

external

CairoOperator

operator-dest-over

external

CairoOperator

operator-in

external

CairoOperator

operator-multiply

external

CairoOperator

operator-out

external

CairoOperator

operator-over

external

CairoOperator

operator-screen

external

CairoOperator

operator-source

external

CairoOperator

operator-xor

external

CairoOperator

paint

external

(Fn [(Ptr CairoContext)] ())

Paint the current source everywhere within the current clip region.

paint-with-alpha

external

(Fn [(Ptr CairoContext), Double] ())

path-extents

instantiate

(Fn [(Ptr CairoContext)] CairoExtents)

Compute the bounding box enclosing the current path, ignoring stroke parameters.

pattern-add-color-stop-rgb

external

(Fn [(Ptr CairoPattern), Double, Double, Double, Double] ())

Add an opaque color stop at offset (0.0–1.0) to a gradient pattern.

pattern-add-color-stop-rgba

external

(Fn [(Ptr CairoPattern), Double, Double, Double, Double, Double] ())

Add a translucent color stop at offset (0.0–1.0) to a gradient pattern.

pattern-create-for-surface

external

(Fn [(Ptr CairoSurface)] (Ptr CairoPattern))

Create a pattern from a surface, useful for tiling or compositing.

pattern-create-linear

external

(Fn [Double, Double, Double, Double] (Ptr CairoPattern))

Create a linear gradient pattern along the line from (x0 y0) to (x1 y1).

pattern-create-radial

external

(Fn [Double, Double, Double, Double, Double, Double] (Ptr CairoPattern))

Create a radial gradient between two circles: center (cx0 cy0) radius r0 and center (cx1 cy1) radius r1.

pattern-destroy

external

(Fn [(Ptr CairoPattern)] ())

Destroy a pattern created by pattern-create-*. Must be called after the pattern is no longer needed.

pattern-get-extend

external

(Fn [(Ptr CairoPattern)] CairoExtend)

pattern-get-filter

external

(Fn [(Ptr CairoPattern)] CairoFilter)

pattern-get-matrix

instantiate

(Fn [(Ptr CairoPattern)] CairoMatrix)

Return the pattern's current matrix.

pattern-set-extend

external

(Fn [(Ptr CairoPattern), CairoExtend] ())

pattern-set-filter

external

(Fn [(Ptr CairoPattern), CairoFilter] ())

pattern-set-matrix

instantiate

(Fn [(Ptr CairoPattern), (Ref CairoMatrix a)] ())

Set the pattern's matrix, which maps user space to pattern space — the inverse of how the pattern moves on the surface.

pattern-status

external

(Fn [(Ptr CairoPattern)] CairoStatus)

pdf-surface-create

external

(Fn [(Ptr CChar), Double, Double] (Ptr CairoSurface))

Create a PDF surface writing to filename with dimensions in points (1 point = 1/72 inch).

pop-group

external

(Fn [(Ptr CairoContext)] (Ptr CairoPattern))

End the innermost group and return it as a pattern, restoring the state push-group saved. The pattern must be freed with pattern-destroy.

pop-group-to-source

external

(Fn [(Ptr CairoContext)] ())

End the innermost group and install it as the source, as pop-group followed by set-source and pattern-destroy would.

push-group

external

(Fn [(Ptr CairoContext)] ())

Redirect drawing into an intermediate group surface, so that a whole sequence of operations can be composited onto the target as a unit. Pairs with pop-group or pop-group-to-source, and saves the drawing state the way save does.

push-group-with-content

external

(Fn [(Ptr CairoContext), CairoContent] ())

Like push-group, but with the group surface's content type chosen explicitly instead of inferred from the target.

rectangle

external

(Fn [(Ptr CairoContext), Double, Double, Double, Double] ())

region-contains-point?

instantiate

(Fn [(Ptr CairoRegion), Int, Int] Bool)

Return true if the device-space point (x y) lies inside reg.

region-contains-rectangle

instantiate

(Fn [(Ptr CairoRegion), (Ref CairoRectangleInt a)] CairoRegionOverlap)

Report whether rect is entirely inside reg (region-overlap-in), entirely outside it (region-overlap-out), or straddles its edge (region-overlap-part).

region-copy

external

(Fn [(Ptr CairoRegion)] (Ptr CairoRegion))

Create an independent copy of reg, which must be destroyed separately.

region-create

external

(Fn [] (Ptr CairoRegion))

Create an empty region. Must be paired with region-destroy.

region-create-rectangle

instantiate

(Fn [(Ref CairoRectangleInt a)] (Ptr CairoRegion))

Create a region containing rect.

region-create-rectangles

instantiate

(Fn [(Ref (Array CairoRectangleInt) a)] (Ptr CairoRegion))

Create a region covering the union of rects.

region-destroy

external

(Fn [(Ptr CairoRegion)] ())

region-empty?

instantiate

(Fn [(Ptr CairoRegion)] Bool)

Return true if reg covers nothing.

region-equal?

instantiate

(Fn [(Ptr CairoRegion), (Ptr CairoRegion)] Bool)

Return true if a and b cover the same area.

region-get-extents

instantiate

(Fn [(Ptr CairoRegion)] CairoRectangleInt)

Return the bounding box of reg, or a zero-sized rectangle if it is empty.

region-get-rectangle

defn

(Fn [(Ptr CairoRegion), Int] (Maybe CairoRectangleInt))

                        (region-get-rectangle reg nth)
                    

Return the nth rectangle of reg, or Nothing if nth is out of range.

region-intersect

external

(Fn [(Ptr CairoRegion), (Ptr CairoRegion)] CairoStatus)

Reduce reg to its intersection with other, returning a CairoStatus.

region-intersect-rectangle

instantiate

(Fn [(Ptr CairoRegion), (Ref CairoRectangleInt a)] CairoStatus)

Reduce reg to its intersection with rect, returning a CairoStatus.

region-num-rectangles

external

(Fn [(Ptr CairoRegion)] Int)

Return how many non-overlapping rectangles reg decomposes into.

region-overlap-in

external

CairoRegionOverlap

region-overlap-out

external

CairoRegionOverlap

region-overlap-part

external

CairoRegionOverlap

region-status

external

(Fn [(Ptr CairoRegion)] CairoStatus)

region-subtract

external

(Fn [(Ptr CairoRegion), (Ptr CairoRegion)] CairoStatus)

Subtract other from reg, returning a CairoStatus.

region-subtract-rectangle

instantiate

(Fn [(Ptr CairoRegion), (Ref CairoRectangleInt a)] CairoStatus)

Subtract rect from reg, returning a CairoStatus.

region-translate

external

(Fn [(Ptr CairoRegion), Int, Int] ())

Move reg by (dx dy) in device space.

region-union

external

(Fn [(Ptr CairoRegion), (Ptr CairoRegion)] CairoStatus)

Grow reg to also cover other, returning a CairoStatus.

region-union-rectangle

instantiate

(Fn [(Ptr CairoRegion), (Ref CairoRectangleInt a)] CairoStatus)

Grow reg to also cover rect, returning a CairoStatus.

region-xor

external

(Fn [(Ptr CairoRegion), (Ptr CairoRegion)] CairoStatus)

Reduce reg to the area covered by exactly one of reg and other, returning a CairoStatus.

region-xor-rectangle

instantiate

(Fn [(Ptr CairoRegion), (Ref CairoRectangleInt a)] CairoStatus)

Reduce reg to the area covered by exactly one of reg and rect, returning a CairoStatus.

rel-curve-to

external

(Fn [(Ptr CairoContext), Double, Double, Double, Double, Double, Double] ())

rel-line-to

external

(Fn [(Ptr CairoContext), Double, Double] ())

rel-move-to

external

(Fn [(Ptr CairoContext), Double, Double] ())

reset-clip

external

(Fn [(Ptr CairoContext)] ())

restore

external

(Fn [(Ptr CairoContext)] ())

Pop the top drawing state off the stack and make it current.

rotate

external

(Fn [(Ptr CairoContext), Double] ())

Rotate the current transformation by angle radians.

save

external

(Fn [(Ptr CairoContext)] ())

Push a copy of the current drawing state onto an internal stack.

scale

external

(Fn [(Ptr CairoContext), Double, Double] ())

scaled-font-create

instantiate

(Fn [(Ptr CairoFontFace), (Ref CairoMatrix a), (Ref CairoMatrix b)] (Ptr CairoScaledFont))

Scale face by the font matrix fm — usually (matrix-init-scale size size) — under the transformation ctm, using Cairo's default font options. Must be paired with scaled-font-destroy.

scaled-font-destroy

external

(Fn [(Ptr CairoScaledFont)] ())

Drop a reference to a scaled font. Pairs with scaled-font-create.

scaled-font-extents

instantiate

(Fn [(Ptr CairoScaledFont)] CairoFontExtents)

Return the metrics of a scaled font, the way font-extents does for a context's current font.

scaled-font-glyph-extents

instantiate

(Fn [(Ptr CairoScaledFont), (Ref (Array CairoGlyph) a)] CairoTextExtents)

Measure glyphs in a scaled font, without needing a context.

scaled-font-status

external

(Fn [(Ptr CairoScaledFont)] CairoStatus)

scaled-font-text-extents

instantiate

(Fn [(Ptr CairoScaledFont), (Ptr CChar)] CairoTextExtents)

Measure text in a scaled font, the way text-extents does for a context's current font.

scaled-font-text-to-glyphs

defn

(Fn [(Ptr CairoScaledFont), Double, Double, (Ptr CChar)] (Result (Array CairoGlyph) CairoStatus))

                        (scaled-font-text-to-glyphs sf x y text)
                    

Lay text out in a scaled font starting at (x y), returning the glyphs it maps to, or the failing status in the error branch.

The glyphs are copied out of Cairo's allocation, so the result is an ordinary Carp array and can be handed straight to show-glyphs.

select-font-face

external

(Fn [(Ptr CairoContext), (Ptr CChar), CairoFontSlant, CairoFontWeight] ())

Select a font face by family name, slant, and weight. Uses Cairo's built-in toy text API.

set-antialias

external

(Fn [(Ptr CairoContext), CairoAntialias] ())

set-dash

instantiate

(Fn [(Ptr CairoContext), (Ref (Array Double) a), Double] ())

Set the dash pattern. dashes is an array of on/off lengths; offset shifts the pattern start.

set-fill-rule

external

(Fn [(Ptr CairoContext), CairoFillRule] ())

set-font-face

external

(Fn [(Ptr CairoContext), (Ptr CairoFontFace)] ())

Use face for subsequent text operations on the context.

set-font-size

external

(Fn [(Ptr CairoContext), Double] ())

set-line-cap

external

(Fn [(Ptr CairoContext), CairoLineCap] ())

set-line-join

external

(Fn [(Ptr CairoContext), CairoLineJoin] ())

set-line-width

external

(Fn [(Ptr CairoContext), Double] ())

set-matrix

instantiate

(Fn [(Ptr CairoContext), (Ref CairoMatrix a)] ())

Replace the context's transformation matrix with m.

set-operator

external

(Fn [(Ptr CairoContext), CairoOperator] ())

set-scaled-font

external

(Fn [(Ptr CairoContext), (Ptr CairoScaledFont)] ())

Use sf for subsequent text operations, replacing the context's font face, size, and font matrix.

set-source

external

(Fn [(Ptr CairoContext), (Ptr CairoPattern)] ())

Set the pattern as the source for subsequent drawing operations.

set-source-rgb

external

(Fn [(Ptr CairoContext), Double, Double, Double] ())

set-source-rgba

external

(Fn [(Ptr CairoContext), Double, Double, Double, Double] ())

set-source-surface

external

(Fn [(Ptr CairoContext), (Ptr CairoSurface), Double, Double] ())

Set a surface as the source pattern, translated to (x y).

show-glyphs

instantiate

(Fn [(Ptr CairoContext), (Ref (Array CairoGlyph) a)] ())

Draw glyphs with the current source, leaving the current point after the last one.

show-text

external

(Fn [(Ptr CairoContext), (Ptr CChar)] ())

slant-italic

external

CairoFontSlant

slant-normal

external

CairoFontSlant

slant-oblique

external

CairoFontSlant

status

external

(Fn [(Ptr CairoContext)] CairoStatus)

status-invalid-matrix

external

CairoStatus

Status returned by matrix-invert when the matrix is not invertible.

status-success

external

CairoStatus

Success status code returned by most Cairo operations.

status-to-string

instantiate

(Fn [CairoStatus] (Ptr CChar))

Returns a human-readable description of the status code s.

stroke

external

(Fn [(Ptr CairoContext)] ())

stroke-extents

instantiate

(Fn [(Ptr CairoContext)] CairoExtents)

Compute the bounding box of the area that would be affected by stroke.

stroke-preserve

external

(Fn [(Ptr CairoContext)] ())

success?

defn

(Fn [CairoStatus] Bool)

                        (success? s)
                    

Returns true if the given status equals status-success.

surface-destroy

external

(Fn [(Ptr CairoSurface)] ())

surface-finish

external

(Fn [(Ptr CairoSurface)] ())

surface-flush

external

(Fn [(Ptr CairoSurface)] ())

Ensure pending drawing for the surface has been applied. Required before reading pixels directly.

surface-status

external

(Fn [(Ptr CairoSurface)] CairoStatus)

surface-write-to-png

external

(Fn [(Ptr CairoSurface), (Ptr CChar)] CairoStatus)

Write the contents of an image surface to a PNG file. Returns a CairoStatus.

svg-surface-create

external

(Fn [(Ptr CChar), Double, Double] (Ptr CairoSurface))

Create an SVG surface writing to filename with dimensions in points.

text-extents

instantiate

(Fn [(Ptr CairoContext), (Ptr CChar)] CairoTextExtents)

Measure text and return a CairoTextExtents with bearing, size, and advance fields.

toy-font-face-create

external

(Fn [(Ptr CChar), CairoFontSlant, CairoFontWeight] (Ptr CairoFontFace))

Create a font face from the family / slant / weight triple select-font-face takes, without installing it on a context. Must be paired with font-face-destroy.

toy-font-face-get-family

instantiate

(Fn [(Ptr CairoFontFace)] (Ptr CChar))

Return the family name of a toy font face. The string belongs to the face and dies with it.

toy-font-face-get-slant

external

(Fn [(Ptr CairoFontFace)] CairoFontSlant)

toy-font-face-get-weight

external

(Fn [(Ptr CairoFontFace)] CairoFontWeight)

transform

instantiate

(Fn [(Ptr CairoContext), (Ref CairoMatrix a)] ())

Compose m onto the context's transformation, the way translate and rotate do.

translate

external

(Fn [(Ptr CairoContext), Double, Double] ())

user-to-device

instantiate

(Fn [(Ptr CairoContext), Double, Double] CairoPoint)

Convert the point (x y) from user space to device space.

user-to-device-distance

instantiate

(Fn [(Ptr CairoContext), Double, Double] CairoPoint)

Convert the vector (dx dy) from user space to device space, ignoring translation.

weight-bold

external

CairoFontWeight

weight-normal

external

CairoFontWeight