Really make it work on both architectures.
[bertos.git] / mware / charts.c
index f305744ca163f0fba6a09a73a9f9ce184509f7eb..d78b0227ea5b382e4f7d253da9d2636015b0f950 100755 (executable)
  * \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.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 <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);
-       chart_drawAxis(bm);
+       /* Clear the chart area */
+       gfx_rectClear(bm, xmin, ymin, xmax, ymax);
 
-       gfx_SetClipRect(bm, 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);
+
+       chart_drawAxis(bm);
+}
 
-       gfx_SetViewRect(bm, xmin, ymin, xmax, ymax);
 
-       //CHECK_WALL(wall_before_raster, WALL_SIZE);
-       //CHECK_WALL(wall_after_raster, WALL_SIZE);
+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);
 }
 
 
@@ -58,22 +72,31 @@ void chart_init(Bitmap *bm, vcoord_t xmin, vcoord_t ymin, vcoord_t xmax, vcoord_
  */
 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);
@@ -89,10 +112,10 @@ 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);
@@ -111,16 +134,19 @@ void chart_drawDots(Bitmap *bm, const chart_x_t *dots_x, const chart_y_t *dots_y
        for (i = 0; i < cnt; i++)
        {
                if (dots_x)
-                       x = gfx_TransformX(bm, dots_x[i]);
+                       x = gfx_transformX(bm, dots_x[i]);
                else
-                       x = gfx_TransformX(bm, i);
+                       x = gfx_transformX(bm, i);
 
-               y = gfx_TransformY(bm, dots_y[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);