cairoをWindowsで直接使う #1

描画ライブラリのcairoはGTK+等のcairoを想定したフレームワークから使うと便利だが、
そういったライブラリを介さずに使ってもそれほど変わりがあるわけではない。
コードの既述量の違いはcairoを取り巻く部分であり、
cairoに直接関わっている部分は同じように既述できると思う。
ということで、Linux/GNOMEでcairoを扱うのは普通だと思うのでWindowsで使用してみる。
まずは直接画面にグラフィクスを描かないもの、
つまり直接Win32APIと無関係のものを。
cairoの公式ページのFAQにあるようなPNGファイルを出力するものに近いが、
代わりに縞々のhello worldが描かれたPDFファイルを出力する。

cairotest1.c
#include <cairo.h>
#include <cairo-pdf.h>

void draw_hello(cairo_surface_t *surf);

int main (void)
{
    cairo_surface_t *surf = cairo_pdf_surface_create("hello.pdf", 841.68, 595.44);

    draw_hello(surf);
    cairo_surface_destroy(surf);
    return 0;
}

void draw_hello(cairo_surface_t *surf)
{
    int i;
    cairo_t *cr = cairo_create(surf);

    cairo_select_font_face(cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
    cairo_set_font_size(cr, 256.0);
    cairo_set_source_rgb(cr, 0.0, 0.0, 1.0);
    cairo_move_to(cr, 40.0, 220.0);
    cairo_text_path(cr, "HELLO");
    cairo_move_to(cr, 10.0, 440.0);
    cairo_text_path(cr, "WORLD");
    cairo_clip(cr);
    cairo_set_line_width(cr, 10.0);
    for (i = 0; i <= 440; i += 20) {
        cairo_move_to(cr, 0, i);
        cairo_line_to(cr, 900, i);
    }
    cairo_stroke(cr);
    cairo_destroy(cr);
}

PDFサーフェスを利用する場合はcairo-pdf.hをインクルードする必要がある。
841.68×595.44ポイントはA4横サイズのはず。
このように簡単にPDFファイルを作ることができる。