diff options
Diffstat (limited to 'src/ml_cairo_surface.c')
-rw-r--r-- | src/ml_cairo_surface.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/src/ml_cairo_surface.c b/src/ml_cairo_surface.c index cb9c992..1b35895 100644 --- a/src/ml_cairo_surface.c +++ b/src/ml_cairo_surface.c @@ -10,7 +10,7 @@ wMake_Val_final_pointer(cairo_surface_t, cairo_surface_destroy, 0) -static cairo_content_t +cairo_content_t cairo_content_t_val (value v) { switch (Long_val (v)) @@ -22,6 +22,18 @@ cairo_content_t_val (value v) } } +value +Val_cairo_content_t (cairo_content_t c) +{ + switch (c) + { + case CAIRO_CONTENT_COLOR : return Val_long(0); + case CAIRO_CONTENT_ALPHA : return Val_long(1); + case CAIRO_CONTENT_COLOR_ALPHA: return Val_long(2); + default: assert(0); + } +} + wML_4(cairo_surface_create_similar, \ cairo_surface_t_val, cairo_content_t_val, \ Int_val, Int_val, Val_cairo_surface_t) @@ -37,6 +49,10 @@ ml_cairo_surface_finish (value surf) return Val_unit; } +#define Val_cairo_surface_type_t(v) Val_int(v) +wML_1 (cairo_surface_get_type, cairo_surface_t_val, Val_cairo_surface_type_t) +wML_1 (cairo_surface_get_content, cairo_surface_t_val, Val_cairo_content_t) + static void ml_cairo_destroy_user_data (void *data) { @@ -94,3 +110,30 @@ wML_1(cairo_surface_mark_dirty, cairo_surface_t_val, Unit) wML_5(cairo_surface_mark_dirty_rectangle, cairo_surface_t_val, Int_val, Int_val, Int_val, Int_val, Unit) wML_3(cairo_surface_set_device_offset, cairo_surface_t_val, Double_val, Double_val, Unit) +CAMLprim value +ml_cairo_surface_get_device_offset (value s) +{ + double x, y; + CAMLparam1(s); + CAMLlocal1(v); + cairo_surface_get_device_offset (cairo_surface_t_val(s), &x, &y); + v = caml_alloc_tuple(2); + Store_field(v, 0, caml_copy_double(x)); + Store_field(v, 1, caml_copy_double(y)); + CAMLreturn (v); +} + +wML_3(cairo_surface_set_fallback_resolution, cairo_surface_t_val, Double_val, Double_val, Unit) + + +/* Image surface */ +wML_3(cairo_image_surface_create, cairo_format_t_val, Int_val, Int_val, Val_cairo_surface_t) + +/* cairo_image_surface_create_for_data -> in ml_cairo_bigarr.c */ +/* cairo_image_surface_get_data -> in ml_cairo_bigarr.c */ + +wML_1 (cairo_image_surface_get_format, cairo_surface_t_val, Val_cairo_format_t) +wML_1 (cairo_image_surface_get_width, cairo_surface_t_val, Val_int) +wML_1 (cairo_image_surface_get_height, cairo_surface_t_val, Val_int) +wML_1 (cairo_image_surface_get_stride, cairo_surface_t_val, Val_int) + |