/*#*
*#* $Log$
- *#* Revision 1.4 2004/08/25 14:12:09 rasky
- *#* Aggiornato il comment block dei log RCS
+ *#* 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.
#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);
/*#*
*#* $Log$
- *#* Revision 1.4 2004/08/25 14:12:09 rasky
- *#* Aggiornato il comment block dei log RCS
+ *#* 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.
* \{
*/
#define TICKS_HEIGHT 2
-#define TICKS_WIDTH 3
+#define TICKS_WIDTH 2
/*\}*/
/*!
* \{
*/
#define CHART_BORDERTOP 0
-#define CHART_BORDERBOTTOM TICKS_HEIGHT
-#define CHART_BORDERLEFT TICKS_WIDTH
+#define CHART_BORDERBOTTOM 0
+#define CHART_BORDERLEFT 0
#define CHART_BORDERRIGHT 0
/*\}*/
-/*!
- * \name Chart size in pixels
- * \{
- */
-#define CHART_WIDTH (bm->width - CHART_BORDERLEFT - CHART_BORDERRIGHT)
-#define CHART_HEIGHT (bm->height - CHART_BORDERTOP - CHART_BORDERBOTTOM)
-/*\}*/
-
#ifndef CONFIG_CHART_TYPE_X
#define CONFIG_CHART_TYPE_X vcoord_t
#endif
/* Public function protos */
-extern void chart_init(Bitmap *bm, vcoord_t xmin, vcoord_t ymin, vcoord_t xmax, vcoord_t ymax);
-extern void chart_drawAxis(Bitmap *bm);
-extern void chart_drawCurve(Bitmap *bm, const chart_y_t *curve_y, int curve_cnt);
-extern void chart_drawDots(Bitmap *bm, const chart_x_t *dots_x, const chart_y_t *dots_y, int cnt);
+void chart_init(Bitmap *bm, coord_t xmin, coord_t ymin, coord_t xmax, coord_t ymax);
+void chart_setScale(Bitmap *bm, chart_x_t xmin, chart_y_t ymin, chart_x_t xmax, chart_y_t ymax);
+void chart_drawAxis(Bitmap *bm);
+void chart_drawCurve(Bitmap *bm, const chart_y_t *curve_y, int curve_cnt);
+void chart_drawDots(Bitmap *bm, const chart_x_t *dots_x, const chart_y_t *dots_y, int cnt);
#endif /* MWARE_CHARTS_H */