]> git.cworth.org Git - acre/blob - acre-test.c
Add another dataset style: ACRE_STYLE_BARS
[acre] / acre-test.c
1 #include "acre.h"
2 #include <math.h>
3
4 int
5 main (void)
6 {
7     int i;
8
9     cairo_t *cr;
10     cairo_surface_t *surface;
11
12     acre_t *acre;
13     acre_data_t *data0, *data1, *data2;
14
15     surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 1600, 1200);
16     cr = cairo_create (surface);
17
18     acre = acre_create ();
19     acre_set_x_axis_label (acre, "X axis");
20     acre_set_y_axis_label (acre, "Y axis");
21
22     data0 = acre_data_create ();
23     data1 = acre_data_create ();
24     data2 = acre_data_create ();
25
26     acre_data_set_name (data0, "Data 0");
27     acre_data_set_name (data1, "Data 1");
28     acre_data_set_name (data2, "Data 2");
29
30     for (i = 0; i <= 100; i++) {
31         acre_data_add_point_2d (data0, i,   0 - (i/3.0)*(i/3.0));
32     }
33
34     for (i = 0; i < 100; i++) {
35         double t = 1.0 - (i / 100.0);
36         acre_data_add_point_2d (data1, i, -1000 * (1.0 - t*t*t));
37     }
38
39     for (i = 0; i <= 1000; i++) {
40         double t, x, y;
41         t = i/10.0 - 50;
42         x = t + 50;
43         if (t == 0.0)
44             y = -200;
45         else
46             y = -1200 + 1000 * sin(t) / t;
47         acre_data_add_point_2d (data2, x, y);
48     }
49
50     acre_add_data (acre, data0);
51     acre_add_data (acre, data1);
52     acre_add_data (acre, data2);
53
54     /* Draw a full-data-range graph in upper-left. */
55     acre_set_title (acre, "All the data");
56
57     acre_draw (acre, cr, 800, 600);
58
59     /* Zoom in on X and draw at lower-left. */
60     cairo_translate (cr, 0, 600);
61
62     acre_set_title (acre, "Zoom X, auto-size Y");
63     acre_set_x_axis_range (acre, 40, 60);
64
65     acre_draw (acre, cr, 800, 600);
66
67     /* Zoom in on Y and draw at upper-right. */
68     cairo_translate (cr, 800, -600);
69
70     acre_set_title (acre, "Zoom Y, auto-size X");
71     acre_set_x_axis_range_auto (acre);
72     acre_set_y_axis_range (acre, -250, 0);
73
74     acre_draw (acre, cr, 800, 600);
75
76     /* Zoom out on X and Y lower-right. */
77     cairo_translate (cr, 0, 600);
78
79     acre_set_title (acre, "Zoom out X and Y");
80     acre_set_x_axis_range (acre, -50, 150);
81     acre_set_y_axis_range (acre, -1500, 500);
82
83     acre_draw (acre, cr, 800, 600);
84
85     acre_destroy (acre);
86
87     cairo_destroy (cr);
88
89     cairo_surface_write_to_png (surface, "acre-test.png");
90
91     cairo_surface_destroy (surface);
92
93     return 0;
94 }