Make more generic and adapt to new gfx functions.
[bertos.git] / mware / charts.c
index 03b3a3af36fcdbe8b610e02ae967cccc438daddd..f2aafeeb613e3d8f8a48d1bb5d9bb86ede8eddd2 100755 (executable)
@@ -26,8 +26,8 @@
 
 /*#*
  *#* $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);
 }
 
 
@@ -61,22 +68,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);
@@ -120,10 +136,13 @@ void chart_drawDots(Bitmap *bm, const chart_x_t *dots_x, const chart_y_t *dots_y
 
                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);