On this page:
28.1 Handle Brushes
28.2 Cairo Library

28 Unsafe Libraries

The racket/draw library is currently implemented using Cairo and Pango. The get-handle in bitmap% method exposes the underlying Cairo surface for a bitmap% object, while make-handle-brush supports the creation of a brush from an existing Cairo surface. The representation of handles for these methods, however, is subject to change if the racket/draw library is implemented differently in the future.

28.1 Handle Brushes

 (require racket/draw/unsafe/brush)


(make-handle-brush handle    
  [#:copy? copy?])  (is-a?/c brush%)
  handle : cpointer?
  width : exact-nonnegative-integer?
  height : exact-nonnegative-integer?
  transformation : 
(or/c #f (vector/c (vector/c real? real? real?
                             real? real? real?)
                   real? real? real? real? real?))
  copy? : any/c = #t
Creates a brush given a handle that (currently) is a cairo_surface_t. If copy? is true, then the surface is copied, so that it can be freed or modified after the brush is created; if copy? is #f, the surface must remain available and unchanged as long as the brush can be used.

The width and height arguments specify the surface bounds for use when the surface must be copied—even when copy? is #f. The surface may need to be converted to a stipple bitmap, for example, when drawing to a monochrome target.

The given surface is treated much like a stipple bitmap: it is implicitly repeated, and the given transformation (if any) determines the surface’s alignment relative to the target drawing context.

When the brush is used with a record-dc% object, and if that object’s get-recorded-datum method is called, then the surface is effectively converted to a stipple bitmap for the result datum.

28.2 Cairo Library

 (require racket/draw/unsafe/cairo-lib)


cairo-lib : (or/c ffi-lib? #f)

A reference to the Cairo library for use with functions such as get-ffi-obj, or #f if Cairo is unavailable.