00001
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 #include "charts.h"
00084 #include <gfx/gfx.h>
00085
00086
00087 #ifndef CONFIG_CHART_ARROWS
00088 #define CONFIG_CHART_ARROWS 0
00089 #endif
00090
00091
00092 void chart_init(Bitmap *bm, coord_t xmin, coord_t ymin, coord_t xmax, coord_t ymax)
00093 {
00094
00095 gfx_rectClear(bm, xmin, ymin, xmax, ymax);
00096
00097 gfx_setClipRect(bm, xmin + CHART_BORDERLEFT, ymin + CHART_BORDERTOP,
00098 xmax - CHART_BORDERRIGHT, ymax - CHART_BORDERBOTTOM);
00099
00100 chart_drawAxis(bm);
00101 }
00102
00103
00104 void chart_setScale(Bitmap *bm, chart_x_t xmin, chart_y_t ymin, chart_x_t xmax, chart_y_t ymax)
00105 {
00106 gfx_setViewRect(bm, xmin, ymin, xmax, ymax);
00107 }
00108
00109
00113 void chart_drawAxis(Bitmap *bm)
00114 {
00115 #if CONFIG_CHART_ARROWS
00116
00117
00118 gfx_moveTo(bm, bm->cr.xmin, bm->cr.ymin + 4);
00119 gfx_lineTo(bm, bm->cr.xmin, bm->cr.ymax - 1);
00120 gfx_lineTo(bm, bm->cr.xmax - 4 - 1, bm->cr.ymax - 1);
00121
00122
00123 gfx_moveTo(bm, bm->cr.xmin - 2, bm->cr.ymin + 3);
00124 gfx_lineTo(bm, bm->cr.xmin + 2, bm->cr.ymin + 3);
00125 gfx_lineTo(bm, bm->cr.xmin, bm->cr.ymin);
00126 gfx_lineTo(bm, bm->cr.xmin - 2, bm->cr.ymin + 3);
00127
00128
00129 gfx_moveTo(bm, bm->cr.xmax - 4, bm->cr.ymax - 3);
00130 gfx_lineTo(bm, bm->cr.xmax - 4, bm->cr.ymax + 1);
00131 gfx_lineTo(bm, bm->cr.xmax - 1, bm->cr.ymax - 1);
00132 gfx_lineTo(bm, bm->cr.xmax - 4, bm->cr.ymax - 3);
00133
00134 #else
00135
00136
00137 gfx_rectDraw(bm, bm->cr.xmin, bm->cr.ymin, bm->cr.xmax, bm->cr.ymax);
00138
00139 #endif
00140
00141
00142
00143 }
00144
00145
00151 void chart_drawCurve(Bitmap *bm, const chart_y_t *curve_y, int curve_cnt)
00152 {
00153 int i;
00154
00155 gfx_moveTo(bm, gfx_transformX(bm, 0), gfx_transformY(bm, curve_y[0]));
00156
00157 for (i = 1; i < curve_cnt; i++)
00158 gfx_lineTo(bm, gfx_transformX(bm, i), gfx_transformY(bm, curve_y[i]));
00159
00160
00161
00162 }
00163
00164
00169 void chart_drawDots(Bitmap *bm, const chart_x_t *dots_x, const chart_y_t *dots_y, int cnt)
00170 {
00171 int i;
00172 coord_t x, y;
00173
00174 for (i = 0; i < cnt; i++)
00175 {
00176 if (dots_x)
00177 x = gfx_transformX(bm, dots_x[i]);
00178 else
00179 x = gfx_transformX(bm, i);
00180
00181 y = gfx_transformY(bm, dots_y[i]);
00182
00183
00184 gfx_rectFill(bm,
00185 x - TICKS_WIDTH / 2, y - TICKS_HEIGHT / 2,
00186 x + (TICKS_WIDTH + 1) / 2, y + (TICKS_HEIGHT + 1) / 2);
00187
00188
00189
00190 }
00191
00192
00193
00194 }
00195