* \author Bernardo Innocenti <bernie@develer.com>
*/
-/*
- * $Log$
- * 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.
- *
- */
+/*#*
+ *#* $Log$
+ *#* 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 <mware/gfx.h>
-void chart_init(Bitmap *bm, vcoord_t xmin, vcoord_t ymin, vcoord_t xmax, vcoord_t ymax)
+#ifndef CONFIG_CHART_ARROWS
+#define CONFIG_CHART_ARROWS 0
+#endif
+
+
+void chart_init(Bitmap *bm, coord_t xmin, coord_t ymin, coord_t xmax, coord_t ymax)
{
gfx_ClearBitmap(bm);
+
+ gfx_SetClipRect(bm, xmin + CHART_BORDERLEFT, ymin + CHART_BORDERTOP,
+ xmax - CHART_BORDERRIGHT, ymax - CHART_BORDERBOTTOM);
+
chart_drawAxis(bm);
+}
- gfx_SetClipRect(bm, CHART_BORDERLEFT, CHART_BORDERTOP,
- bm->width - CHART_BORDERRIGHT - 1, bm->height - CHART_BORDERBOTTOM - 1);
+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);
-
- //CHECK_WALL(wall_before_raster, WALL_SIZE);
- //CHECK_WALL(wall_after_raster, WALL_SIZE);
}
*/
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);
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);