Lines Matching full:chart
32 #include "chart.h"
34 int chart_init(struct chart *chart, const char *name, int num_samples) in chart_init() argument
36 memset(chart, 0, sizeof(*chart)); in chart_init()
37 chart->name = name; in chart_init()
38 chart->samples = malloc(sizeof(*chart->samples)*num_samples); in chart_init()
39 if (chart->samples == NULL) in chart_init()
42 chart->num_samples = num_samples; in chart_init()
43 chart->range_automatic = 1; in chart_init()
44 chart->stroke_width = 2; in chart_init()
45 chart->smooth = CHART_CURVE; in chart_init()
49 void chart_set_mode(struct chart *chart, enum chart_mode mode) in chart_set_mode() argument
51 chart->mode = mode; in chart_set_mode()
54 void chart_set_smooth(struct chart *chart, enum chart_smooth smooth) in chart_set_smooth() argument
56 chart->smooth = smooth; in chart_set_smooth()
59 void chart_set_stroke_width(struct chart *chart, float width) in chart_set_stroke_width() argument
61 chart->stroke_width = width; in chart_set_stroke_width()
64 void chart_set_stroke_rgba(struct chart *chart, float red, float green, float blue, float alpha) in chart_set_stroke_rgba() argument
66 chart->stroke_rgb[0] = red; in chart_set_stroke_rgba()
67 chart->stroke_rgb[1] = green; in chart_set_stroke_rgba()
68 chart->stroke_rgb[2] = blue; in chart_set_stroke_rgba()
69 chart->stroke_rgb[3] = alpha; in chart_set_stroke_rgba()
72 void chart_set_fill_rgba(struct chart *chart, float red, float green, float blue, float alpha) in chart_set_fill_rgba() argument
74 chart->fill_rgb[0] = red; in chart_set_fill_rgba()
75 chart->fill_rgb[1] = green; in chart_set_fill_rgba()
76 chart->fill_rgb[2] = blue; in chart_set_fill_rgba()
77 chart->fill_rgb[3] = alpha; in chart_set_fill_rgba()
80 void chart_set_position(struct chart *chart, int x, int y) in chart_set_position() argument
82 chart->x = x; in chart_set_position()
83 chart->y = y; in chart_set_position()
86 void chart_set_size(struct chart *chart, int w, int h) in chart_set_size() argument
88 chart->w = w; in chart_set_size()
89 chart->h = h; in chart_set_size()
92 void chart_set_range(struct chart *chart, double min, double max) in chart_set_range() argument
94 chart->range[0] = min; in chart_set_range()
95 chart->range[1] = max; in chart_set_range()
96 chart->range_automatic = 0; in chart_set_range()
99 void chart_get_range(struct chart *chart, double *range) in chart_get_range() argument
101 int n, max = chart->current_sample; in chart_get_range()
102 if (max > chart->num_samples) in chart_get_range()
103 max = chart->num_samples; in chart_get_range()
105 if (chart->samples[n] < range[0]) in chart_get_range()
106 range[0] = chart->samples[n]; in chart_get_range()
107 else if (chart->samples[n] > range[1]) in chart_get_range()
108 range[1] = chart->samples[n]; in chart_get_range()
112 void chart_add_sample(struct chart *chart, double value) in chart_add_sample() argument
116 if (chart->num_samples == 0) in chart_add_sample()
119 pos = chart->current_sample++ % chart->num_samples; in chart_add_sample()
120 chart->samples[pos] = value; in chart_add_sample()
123 static void chart_update_range(struct chart *chart) in chart_update_range() argument
125 int n, max = chart->current_sample; in chart_update_range()
126 if (max > chart->num_samples) in chart_update_range()
127 max = chart->num_samples; in chart_update_range()
128 chart->range[0] = chart->range[1] = chart->samples[0]; in chart_update_range()
130 if (chart->samples[n] < chart->range[0]) in chart_update_range()
131 chart->range[0] = chart->samples[n]; in chart_update_range()
132 else if (chart->samples[n] > chart->range[1]) in chart_update_range()
133 chart->range[1] = chart->samples[n]; in chart_update_range()
135 if (strcmp(chart->name, "power") == 0) in chart_update_range()
136 printf ("chart_update_range [%f, %f]\n", chart->range[0], chart->range[1]); in chart_update_range()
139 static double value_at(struct chart *chart, int n) in value_at() argument
141 if (n < chart->current_sample - chart->num_samples) in value_at()
142 n = chart->current_sample; in value_at()
143 else if (n >= chart->current_sample) in value_at()
144 n = chart->current_sample - 1; in value_at()
146 n %= chart->num_samples; in value_at()
148 n += chart->num_samples; in value_at()
150 return chart->samples[n]; in value_at()
153 static double gradient_at(struct chart *chart, int n) in gradient_at() argument
157 y0 = value_at(chart, n-1); in gradient_at()
158 y1 = value_at(chart, n+1); in gradient_at()
163 void chart_draw(struct chart *chart, cairo_t *cr) in chart_draw() argument
167 if (chart->current_sample == 0) in chart_draw()
170 if (chart->range_automatic) in chart_draw()
171 chart_update_range(chart); in chart_draw()
173 if (chart->range[1] <= chart->range[0]) in chart_draw()
178 cairo_translate(cr, chart->x, chart->y + chart->h); in chart_draw()
180 chart->w / (double)(chart->num_samples-1), in chart_draw()
181 -chart->h / (chart->range[1] - chart->range[0])); in chart_draw()
184 max = chart->current_sample; in chart_draw()
185 if (max >= chart->num_samples) { in chart_draw()
186 max = chart->num_samples; in chart_draw()
187 i = chart->current_sample - max; in chart_draw()
190 x = chart->num_samples - max; in chart_draw()
192 cairo_translate(cr, x, -chart->range[0]); in chart_draw()
195 if (chart->mode != CHART_STROKE) in chart_draw()
198 switch (chart->smooth) { in chart_draw()
201 n, value_at(chart, i + n)); in chart_draw()
205 n-2/3., value_at(chart, i + n -1) + gradient_at(chart, i + n - 1)/3., in chart_draw()
206 n-1/3., value_at(chart, i + n) - gradient_at(chart, i + n)/3., in chart_draw()
207 n, value_at(chart, i + n)); in chart_draw()
211 if (chart->mode != CHART_STROKE) in chart_draw()
215 cairo_set_line_width(cr, chart->stroke_width); in chart_draw()
216 switch (chart->mode) { in chart_draw()
218 …cairo_set_source_rgba(cr, chart->stroke_rgb[0], chart->stroke_rgb[1], chart->stroke_rgb[2], chart-… in chart_draw()
222 …cairo_set_source_rgba(cr, chart->fill_rgb[0], chart->fill_rgb[1], chart->fill_rgb[2], chart->fill_… in chart_draw()
227 …cairo_set_source_rgba(cr, chart->fill_rgb[0], chart->fill_rgb[1], chart->fill_rgb[2], chart->fill_… in chart_draw()
230 …cairo_set_source_rgba(cr, chart->stroke_rgb[0], chart->stroke_rgb[1], chart->stroke_rgb[2], chart-… in chart_draw()
237 void chart_fini(struct chart *chart) in chart_fini() argument
239 free(chart->samples); in chart_fini()