aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Bodenmann <joel.bodenmann@hevs.ch>2012-10-24 22:21:49 +0200
committerJoel Bodenmann <joel.bodenmann@hevs.ch>2012-10-24 22:21:49 +0200
commit707ade1f2ffbfd4671441da87caafdfbc99ce965 (patch)
tree379db11945c8e2bc579228e4b19f25071b829924
parent1527c69cc047146da19e541d6690a8727c1f0459 (diff)
downloaduGFX-707ade1f2ffbfd4671441da87caafdfbc99ce965.tar.gz
uGFX-707ade1f2ffbfd4671441da87caafdfbc99ce965.tar.bz2
uGFX-707ade1f2ffbfd4671441da87caafdfbc99ce965.zip
graph - added boundary checks
-rw-r--r--src/graph.c55
1 files changed, 42 insertions, 13 deletions
diff --git a/src/graph.c b/src/graph.c
index c01b66e7..8a270251 100644
--- a/src/graph.c
+++ b/src/graph.c
@@ -54,11 +54,6 @@ void graphDrawSystem(Graph *g) {
g->y1 = g->origin_y - abs(g->ymax);
/* X - Axis */
- gdispDrawLine(g->x0, g->origin_y, g->x1, g->origin_y, g->axis_color);
- if(g->arrows) {
- gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y+5, g->axis_color);
- gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y-5, g->axis_color);
- }
if(g->full_grid) {
for(i = 1; i <= ((g->origin_y - g->y1) / g->grid_size); i++) {
_horizontalDotLine(g->x0, g->origin_y - g->grid_size * i, g->x1, g->dot_space, g->grid_color);
@@ -67,14 +62,13 @@ void graphDrawSystem(Graph *g) {
_horizontalDotLine(g->x0, g->origin_y + g->grid_size * i, g->x1, g->dot_space, g->grid_color);
}
}
-
-
- /* Y - Axis */
- gdispDrawLine(g->origin_x, g->y0, g->origin_x, g->y1, g->axis_color);
+ gdispDrawLine(g->x0, g->origin_y, g->x1, g->origin_y, g->axis_color);
if(g->arrows) {
- gdispDrawLine(g->origin_x, g->y1, g->origin_x-5, g->y1+5, g->axis_color);
- gdispDrawLine(g->origin_x, g->y1, g->origin_x+5, g->y1+5, g->axis_color);
+ gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y+5, g->axis_color);
+ gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y-5, g->axis_color);
}
+
+ /* Y - Axis */
if(g->full_grid) {
for(i = 1; i <= ((g->origin_x - g->x0) / g->grid_size); i++) {
_verticalDotLine(g->origin_x - g->grid_size * i, g->y1, g->y0, g->dot_space, g->grid_color);
@@ -83,9 +77,30 @@ void graphDrawSystem(Graph *g) {
_verticalDotLine(g->origin_x + g->grid_size * i, g->y1, g->y0, g->dot_space, g->grid_color);
}
}
+ gdispDrawLine(g->origin_x, g->y0, g->origin_x, g->y1, g->axis_color);
+ if(g->arrows) {
+ gdispDrawLine(g->origin_x, g->y1, g->origin_x-5, g->y1+5, g->axis_color);
+ gdispDrawLine(g->origin_x, g->y1, g->origin_x+5, g->y1+5, g->axis_color);
+ }
+}
+
+bool_t _boundaryCheck(Graph *g, coord_t x, coord_t y) {
+ if(g->origin_x + x > g->x1)
+ return 1;
+ if(g->origin_x + x < g->x0)
+ return 1;
+ if(g->origin_y + y < g->y1)
+ return 1;
+ if(g->origin_y + y > g->y0)
+ return 1;
+
+ return 0;
}
void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color) {
+ if(_boundaryCheck(g, x, y))
+ return;
+
if(radius == 0)
gdispDrawPixel(g->origin_x + x, g->origin_y + y, color);
else
@@ -96,6 +111,9 @@ void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius,
uint16_t i;
for(i = 0; i < entries; i++) {
+ if(_boundaryCheck(g, coord[i][0], coord[i][1]))
+ continue;
+
if(radius == 0)
gdispDrawPixel(coord[i][0] + g->origin_x, g->origin_y - coord[i][1], color);
else
@@ -106,11 +124,22 @@ void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius,
void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t lineColor, uint16_t dotColor) {
uint16_t i;
- for(i = 0; i < entries; ++i)
+ /* draw lines */
+ for(i = 0; i < entries; ++i) {
+ if(_boundaryCheck(g, coord[i][0], coord[i][1]))
+ continue;
+
gdispDrawLine(coord[i-1][0] + g->origin_x, g->origin_y - coord[i-1][1], coord[i][0] + g->origin_x, g->origin_y - coord[i][1], lineColor);
- for(i = 0; i < entries; ++i)
+ }
+
+ /* draw dots */
+ for(i = 0; i < entries; ++i) {
+ if(_boundaryCheck(g, coord[i][0], coord[i][1]))
+ continue;
+
if(radius != 0)
lcdFillCircle(coord[i][0] + g->origin_x, g->origin_y - coord[i][1], radius, dotColor);
+ }
}
#endif /* GFX_USE_GRAPH */