CAMLprim value ml_cairo_set_font_matrix (value v_cr, value v_matrix) { #ifndef ARCH_ALIGN_DOUBLE cairo_set_font_matrix (cairo_t_val (v_cr), cairo_matrix_t_val (v_matrix)); #else cairo_matrix_t mat; ml_convert_cairo_matrix_in (v_matrix, &mat); cairo_set_font_matrix (cairo_t_val (v_cr), &mat); #endif check_cairo_status (v_cr); return Val_unit; }
CAMLprim value ml_cairo_get_font_matrix (value v_cr) { #ifndef ARCH_ALIGN_DOUBLE CAMLparam1(v_cr); value v = cairo_matrix_alloc(); cairo_get_font_matrix (cairo_t_val (v_cr), cairo_matrix_t_val (v)); CAMLreturn(v); #else cairo_matrix_t mat; cairo_get_font_matrix (cairo_t_val (v_cr), &mat); check_cairo_status (v_cr); return ml_convert_cairo_matrix_out (&mat); #endif }
CAMLprim value ml_cairo_pop_group (value cr) { cairo_pattern_t *p = cairo_pop_group (cairo_t_val (cr)); check_cairo_status (cr); return Val_cairo_pattern_t (p); }
CAMLprim value ml_cairo_set_dash (value cr, value d, value off) { #ifndef ARCH_ALIGN_DOUBLE cairo_set_dash (cairo_t_val (cr), Double_array_val (d), Double_array_length (d), Double_val (off)); #else int i, ndash = Double_array_length (d); double *dashes = caml_stat_alloc (ndash * sizeof (double)); for (i = 0; i < ndash; i++) dashes[i] = Double_field (d, i); cairo_set_dash (cairo_t_val (cr), dashes, ndash, Double_val (off)); caml_stat_free (dashes); #endif check_cairo_status (cr); return Val_unit; }
CAMLprim value ml_cairo_in_fill (value v_cr, value p) { cairo_bool_t c_ret; c_ret = cairo_in_fill (cairo_t_val (v_cr), Double_field (p, 0), Double_field (p, 1)); check_cairo_status (v_cr); return Val_bool (c_ret); }
CAMLprim value ml_cairo_device_to_user_distance (value cr, value p) { double x, y; x = Double_field (p, 0); y = Double_field (p, 1); cairo_device_to_user_distance (cairo_t_val (cr), &x, &y); check_cairo_status (cr); return ml_cairo_point (x, y); }
CAMLprim value ml_cairo_show_glyphs (value v_cr, value v_glyphs) { int num_glyphs; cairo_glyph_t *c_glyphs; c_glyphs = ml_convert_cairo_glypth_in (v_glyphs, &num_glyphs); cairo_show_glyphs (cairo_t_val (v_cr), c_glyphs, num_glyphs); caml_stat_free (c_glyphs); check_cairo_status (v_cr); return Val_unit; }
CAMLprim value ml_cairo_fill_extents (value v_cr) { double x1, y1, x2, y2; cairo_fill_extents (cairo_t_val (v_cr), &x1, &y1, &x2, &y2); check_cairo_status (v_cr); { CAMLparam0 (); CAMLlocal1 (t); t = caml_alloc_tuple (4); Store_field (t, 0, caml_copy_double (x1)); Store_field (t, 1, caml_copy_double (y1)); Store_field (t, 2, caml_copy_double (x2)); Store_field (t, 3, caml_copy_double (y2)); CAMLreturn (t); } }
value ml_set_plplot_cairo_context( value context ) { CAMLparam1( context ); pl_cmd( PLESC_DEVINIT, cairo_t_val( context ) ); CAMLreturn( Val_unit ); }