When creating graphic libraries you most likely end up dealing with points and rectangles. If you're particularly unlucky, you may end up dealing with affine matrices and 2D transformations. If you're writing a graphic library with 3D transformations, though, you are going to hit the jackpot: 4x4 matrices, projections, transformations, vectors, and quaternions.Is the description of Graphene as hosted on GitHub.
Most of this stuff exists, in various forms, in many libraries; it also comes with the rest of the libraries, which may or may not be what you want.
For this reason, I wrote the smallest possible layer needed to write a canvas library: Graphene.
This library provides types and relative API; it does not deal with windowing system surfaces, drawing, or event handling. You're supposed to do that yourself.
Those interested in learning more about Graphene and its graphics library intentions can be found via this GNOME.org blog post.