00001
00040 #include "charts.h"
00041 #include <gfx/gfx.h>
00042
00043
00044 #ifndef CONFIG_CHART_ARROWS
00045 #define CONFIG_CHART_ARROWS 0
00046 #endif
00047
00048
00049 void chart_init(Bitmap *bm, coord_t xmin, coord_t ymin, coord_t xmax, coord_t ymax)
00050 {
00051
00052 gfx_rectClear(bm, xmin, ymin, xmax, ymax);
00053
00054 gfx_setClipRect(bm, xmin + CHART_BORDERLEFT, ymin + CHART_BORDERTOP,
00055 xmax - CHART_BORDERRIGHT, ymax - CHART_BORDERBOTTOM);
00056
00057 chart_drawAxis(bm);
00058 }
00059
00060
00061 void chart_setScale(Bitmap *bm, chart_x_t xmin, chart_y_t ymin, chart_x_t xmax, chart_y_t ymax)
00062 {
00063 gfx_setViewRect(bm, xmin, ymin, xmax, ymax);
00064 }
00065
00066
00070 void chart_drawAxis(Bitmap *bm)
00071 {
00072 #if CONFIG_CHART_ARROWS
00073
00074
00075 gfx_moveTo(bm, bm->cr.xmin, bm->cr.ymin + 4);
00076 gfx_lineTo(bm, bm->cr.xmin, bm->cr.ymax - 1);
00077 gfx_lineTo(bm, bm->cr.xmax - 4 - 1, bm->cr.ymax - 1);
00078
00079
00080 gfx_moveTo(bm, bm->cr.xmin - 2, bm->cr.ymin + 3);
00081 gfx_lineTo(bm, bm->cr.xmin + 2, bm->cr.ymin + 3);
00082 gfx_lineTo(bm, bm->cr.xmin, bm->cr.ymin);
00083 gfx_lineTo(bm, bm->cr.xmin - 2, bm->cr.ymin + 3);
00084
00085
00086 gfx_moveTo(bm, bm->cr.xmax - 4, bm->cr.ymax - 3);
00087 gfx_lineTo(bm, bm->cr.xmax - 4, bm->cr.ymax + 1);
00088 gfx_lineTo(bm, bm->cr.xmax - 1, bm->cr.ymax - 1);
00089 gfx_lineTo(bm, bm->cr.xmax - 4, bm->cr.ymax - 3);
00090
00091 #else
00092
00093
00094 gfx_rectDraw(bm, bm->cr.xmin, bm->cr.ymin, bm->cr.xmax, bm->cr.ymax);
00095
00096 #endif
00097
00098
00099
00100 }
00101
00102
00108 void chart_drawCurve(Bitmap *bm, const chart_y_t *curve_y, int curve_cnt)
00109 {
00110 int i;
00111
00112 gfx_moveTo(bm, gfx_transformX(bm, 0), gfx_transformY(bm, curve_y[0]));
00113
00114 for (i = 1; i < curve_cnt; i++)
00115 gfx_lineTo(bm, gfx_transformX(bm, i), gfx_transformY(bm, curve_y[i]));
00116
00117
00118
00119 }
00120
00121
00126 void chart_drawDots(Bitmap *bm, const chart_x_t *dots_x, const chart_y_t *dots_y, int cnt)
00127 {
00128 int i;
00129 coord_t x, y;
00130
00131 for (i = 0; i < cnt; i++)
00132 {
00133 if (dots_x)
00134 x = gfx_transformX(bm, dots_x[i]);
00135 else
00136 x = gfx_transformX(bm, i);
00137
00138 y = gfx_transformY(bm, dots_y[i]);
00139
00140
00141 gfx_rectFill(bm,
00142 x - TICKS_WIDTH / 2, y - TICKS_HEIGHT / 2,
00143 x + (TICKS_WIDTH + 1) / 2, y + (TICKS_HEIGHT + 1) / 2);
00144
00145
00146
00147 }
00148
00149
00150
00151 }
00152