X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Fcharts.c;h=d78b0227ea5b382e4f7d253da9d2636015b0f950;hb=97773847f7c4c8b01a10d1740b9662a5c78181e5;hp=469f6f28a1d4b2f9dab046e8b9e3ab1c1cd9fc23;hpb=d2781083b8f0cffe71696623a4a78f2bf252d295;p=bertos.git diff --git a/mware/charts.c b/mware/charts.c index 469f6f28..d78b0227 100755 --- a/mware/charts.c +++ b/mware/charts.c @@ -24,49 +24,46 @@ * \author Bernardo Innocenti */ -/* - * $Log$ - * Revision 1.1 2004/08/04 03:16:30 bernie - * Import simple chart drawing code. - * - */ +/*#* + *#* $Log$ + *#* Revision 1.6 2004/11/16 21:04:23 bernie + *#* Update to new naming scheme in mware/gfx.c. + *#* + *#* Revision 1.5 2004/09/14 20:56:39 bernie + *#* Make more generic and adapt to new gfx functions. + *#* + *#* Revision 1.3 2004/08/11 19:39:12 bernie + *#* Use chart_x_t and chart_y_t for the input dataset. + *#* + *#* Revision 1.1 2004/08/04 03:16:30 bernie + *#* Import simple chart drawing code. + *#* + *#*/ #include "charts.h" #include -static Bitmap ChartBitmap; - -/*! - * Raster buffer to draw into. - * - * Bits in the bitmap bytes have vertical orientation, - * as required by the printer driver. - */ -DECLARE_WALL(wall_before_raster, WALL_SIZE) -static uint8_t ChartRaster[BM_WIDTH * ((BM_HEIGHT + 7) / 8)]; -DECLARE_WALL(wall_after_raster, WALL_SIZE) +#ifndef CONFIG_CHART_ARROWS +#define CONFIG_CHART_ARROWS 0 +#endif -Bitmap *chart_init(vcoord_t xmin, vcoord_t ymin, vcoord_t xmax, vcoord_t ymax) +void chart_init(Bitmap *bm, coord_t xmin, coord_t ymin, coord_t xmax, coord_t ymax) { - /* Initialize anti-corruption walls */ - INIT_WALL(wall_before_raster, WALL_SIZE); - INIT_WALL(wall_after_raster, WALL_SIZE); - - gfx_InitBitMap(&ChartBitmap, ChartRaster, BM_WIDTH, BM_HEIGHT); - gfx_ClearBitMap(&ChartBitmap); - gfx_DrawAxis(&ChartBitmap); + /* Clear the chart area */ + gfx_rectClear(bm, xmin, ymin, xmax, ymax); - gfx_SetClipRect(&ChartBitmap, CHART_BORDERLEFT, CHART_BORDERTOP, - BM_WIDTH - CHART_BORDERRIGHT - 1, BM_HEIGHT - CHART_BORDERBOTTOM - 1); + gfx_setClipRect(bm, xmin + CHART_BORDERLEFT, ymin + CHART_BORDERTOP, + xmax - CHART_BORDERRIGHT, ymax - CHART_BORDERBOTTOM); - gfx_SetViewRect(&ChartBitmap, xmin, ymin, xmax, ymax); + chart_drawAxis(bm); +} - CHECK_WALL(wall_before_raster, WALL_SIZE); - CHECK_WALL(wall_after_raster, WALL_SIZE); - return &ChartBitmap; +void chart_setScale(Bitmap *bm, chart_x_t xmin, chart_y_t ymin, chart_x_t xmax, chart_y_t ymax) +{ + gfx_setViewRect(bm, xmin, ymin, xmax, ymax); } @@ -75,25 +72,34 @@ Bitmap *chart_init(vcoord_t xmin, vcoord_t ymin, vcoord_t xmax, vcoord_t ymax) */ void chart_drawAxis(Bitmap *bm) { +#if CONFIG_CHART_ARROWS + /* Draw axis */ - gfx_MoveTo(bm, CHART_BORDERLEFT, 4); - gfx_LineTo(bm, CHART_BORDERLEFT, CHART_BORDERTOP + CHART_HEIGHT - 1); - gfx_LineTo(bm, CHART_BORDERLEFT + CHART_WIDTH - 5, CHART_BORDERTOP + CHART_HEIGHT - 1); + gfx_moveTo(bm, bm->cr.xmin, bm->cr.ymin + 4); + gfx_lineTo(bm, bm->cr.xmin, bm->cr.ymax - 1); + gfx_lineTo(bm, bm->cr.xmax - 4 - 1, bm->cr.ymax - 1); /* Draw up arrow */ - gfx_MoveTo(bm, CHART_BORDERLEFT - 2, 3); - gfx_LineTo(bm, CHART_BORDERLEFT + 2, 3); - gfx_LineTo(bm, CHART_BORDERLEFT, 0); - gfx_LineTo(bm, CHART_BORDERLEFT - 2, 3); + gfx_moveTo(bm, bm->cr.xmin - 2, bm->cr.ymin + 3); + gfx_lineTo(bm, bm->cr.xmin + 2, bm->cr.ymin + 3); + gfx_lineTo(bm, bm->cr.xmin, bm->cr.ymin); + gfx_lineTo(bm, bm->cr.xmin - 2, bm->cr.ymin + 3); /* Draw right arrow */ - gfx_MoveTo(bm, CHART_BORDERLEFT + CHART_WIDTH - 4, CHART_BORDERTOP + CHART_HEIGHT - 3); - gfx_LineTo(bm, CHART_BORDERLEFT + CHART_WIDTH - 4, CHART_BORDERTOP + CHART_HEIGHT + 1); - gfx_LineTo(bm, CHART_BORDERLEFT + CHART_WIDTH - 1, CHART_BORDERTOP + CHART_HEIGHT - 1); - gfx_LineTo(bm, CHART_BORDERLEFT + CHART_WIDTH - 4, CHART_BORDERTOP + CHART_HEIGHT - 3); + gfx_moveTo(bm, bm->cr.xmax - 4, bm->cr.ymax - 3); + gfx_lineTo(bm, bm->cr.xmax - 4, bm->cr.ymax + 1); + gfx_lineTo(bm, bm->cr.xmax - 1, bm->cr.ymax - 1); + gfx_lineTo(bm, bm->cr.xmax - 4, bm->cr.ymax - 3); + +#else /* CONFIG_CHART_ARROWS */ + + /* Draw a box around the chart */ + gfx_rectDraw(bm, bm->cr.xmin, bm->cr.ymin, bm->cr.xmax, bm->cr.ymax); + +#endif /* CONFIG_CHART_ARROWS */ - CHECK_WALL(wall_before_raster, WALL_SIZE); - CHECK_WALL(wall_after_raster, WALL_SIZE); + //CHECK_WALL(wall_before_raster, WALL_SIZE); + //CHECK_WALL(wall_after_raster, WALL_SIZE); } @@ -102,17 +108,17 @@ void chart_drawAxis(Bitmap *bm) * are identified by the \a curve_y array and X-coordinates are * are evenly spaced by one virtual unit. */ -void chart_drawCurve(Bitmap *bm, const vcoord_t *curve_y, int curve_cnt) +void chart_drawCurve(Bitmap *bm, const chart_y_t *curve_y, int curve_cnt) { int i; - gfx_MoveTo(bm, gfx_TransformX(bm, 0), gfx_TransformY(bm, curve_y[0])); + gfx_moveTo(bm, gfx_transformX(bm, 0), gfx_transformY(bm, curve_y[0])); for (i = 1; i < curve_cnt; i++) - gfx_LineTo(bm, gfx_TransformX(bm, i), gfx_TransformY(bm, curve_y[i])); + gfx_lineTo(bm, gfx_transformX(bm, i), gfx_transformY(bm, curve_y[i])); - CHECK_WALL(wall_before_raster, WALL_SIZE); - CHECK_WALL(wall_after_raster, WALL_SIZE); + //CHECK_WALL(wall_before_raster, WALL_SIZE); + //CHECK_WALL(wall_after_raster, WALL_SIZE); } @@ -120,27 +126,30 @@ void chart_drawCurve(Bitmap *bm, const vcoord_t *curve_y, int curve_cnt) * Disegna dei dot in corrispondenza delle coppie (dotsx[i];dotsy[i]) * Se dotsx e' NULL, i punti vengono disegnati ad intervalli regolari. */ -void chart_drawDots(BitMap *bm, const vcoord_t *dotsx, const vcoord_t *dotsy, int cnt) +void chart_drawDots(Bitmap *bm, const chart_x_t *dots_x, const chart_y_t *dots_y, int cnt) { int i; coord_t x, y; for (i = 0; i < cnt; i++) { - if (dotsx) - x = gfx_TransformX(bm, dotsx[i]); + if (dots_x) + x = gfx_transformX(bm, dots_x[i]); else - x = gfx_TransformX(bm, i); + x = gfx_transformX(bm, i); - y = gfx_TransformY(bm, dotsy[i]); + y = gfx_transformY(bm, dots_y[i]); - gfx_DrawRect(bm, x - 1, y - 1, x + 1, y + 1); + /* Draw tick over the curve */ + gfx_rectFill(bm, + x - TICKS_WIDTH / 2, y - TICKS_HEIGHT / 2, + x + (TICKS_WIDTH + 1) / 2, y + (TICKS_HEIGHT + 1) / 2); - /* Disegna ticks sull'asse X */ - gfx_DrawLine(bm, x, BM_HEIGHT - 1, x, CHART_HEIGHT - 1); + /* Draw vertical line from the curve to the X-axis */ + //gfx_drawLine(bm, x, y, x, bm->cr.ymax - 1); } - CHECK_WALL(wall_before_raster, WALL_SIZE); - CHECK_WALL(wall_after_raster, WALL_SIZE); + //CHECK_WALL(wall_before_raster, WALL_SIZE); + //CHECK_WALL(wall_after_raster, WALL_SIZE); }