File: recording.ml

package info (click to toggle)
ocaml-cairo2 0.6.4%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 716 kB
  • sloc: ml: 2,955; ansic: 2,132; makefile: 24; sh: 17
file content (33 lines) | stat: -rw-r--r-- 1,109 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
(* Demonstrate the use of recording surfaces.  *)

open Printf

let () =
  let extents = { Cairo.x = 0.0; y = 0.0; w = 120.0; h = 120.0 } in
  let surface = Cairo.Recording.create ~extents Cairo.COLOR_ALPHA in
  let cr = Cairo.create surface in

  (* Drawing code goes here *)
  Cairo.set_line_width cr 2.;
  Cairo.set_source_rgb cr 1. 0. 0.;

  Cairo.move_to cr 25. 25.;
  Cairo.line_to cr 120. 120.;
  Cairo.stroke cr;
  let r = Cairo.Recording.ink_extents surface in
  printf "extents = {x=%g; y=%g; w=%g; h=%g}\n"
    r.Cairo.x r.Cairo.y r.Cairo.w r.Cairo.h;

  (* Replay the recorded content to a PNG and PDF output *)
  (* PNG *)
  let png_surface = Cairo.Image.create Cairo.Image.ARGB32 ~w:120 ~h:120 in
  let cr = Cairo.create png_surface in
  Cairo.set_source_surface cr surface ~x:0.0 ~y:0.0;
  Cairo.paint cr;
  Cairo.PNG.write png_surface "recording.png";
  (* PDF *)
  let pdf_surface = Cairo.PDF.create "recording.pdf" ~w:120.0 ~h:120.0 in
  let cr = Cairo.create pdf_surface in
  Cairo.set_source_surface cr surface ~x:0.0 ~y:0.0;
  Cairo.paint cr;
  Cairo.Surface.finish (Cairo.get_target cr)