From 311c0e71684462269afb15264b7134a0f16064bc Mon Sep 17 00:00:00 2001 From: Andrew Hannam Date: Thu, 13 Dec 2012 22:33:05 +1000 Subject: [PATCH] Add grids to graph demo and update graph arrows Add grid lines to graph demo. Update graph arrows to allow seperate control of positive and negative axis arrowheads. --- demos/modules/graph/main.c | 12 ++++++------ include/gwin/graph.h | 11 +++++++++-- src/gwin/graph.c | 8 ++++++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/demos/modules/graph/main.c b/demos/modules/graph/main.c index 40267522..04d0b9b8 100644 --- a/demos/modules/graph/main.c +++ b/demos/modules/graph/main.c @@ -18,9 +18,9 @@ GGraphStyle GraphStyle1 = { { GGRAPH_LINE_NONE, 2, Gray }, // line { GGRAPH_LINE_SOLID, 0, White }, // x axis { GGRAPH_LINE_SOLID, 0, White }, // y axis - { GGRAPH_LINE_NONE, 0, White, 0 }, // x grid - { GGRAPH_LINE_NONE, 0, White, 0 }, // y grid - GWIN_GRAPH_STYLE_XAXIS_ARROWS|GWIN_GRAPH_STYLE_YAXIS_ARROWS // flags + { GGRAPH_LINE_DASH, 5, Gray, 50 }, // x grid + { GGRAPH_LINE_DOT, 7, Yellow, 50 }, // y grid + GWIN_GRAPH_STYLE_POSITIVE_AXIS_ARROWS // flags }; GGraphStyle GraphStyle2 = { @@ -28,9 +28,9 @@ GGraphStyle GraphStyle2 = { { GGRAPH_LINE_NONE, 2, Gray }, // line { GGRAPH_LINE_SOLID, 0, White }, // x axis { GGRAPH_LINE_SOLID, 0, White }, // y axis - { GGRAPH_LINE_NONE, 0, White, 0 }, // x grid - { GGRAPH_LINE_NONE, 0, White, 0 }, // y grid - GWIN_GRAPH_STYLE_XAXIS_ARROWS|GWIN_GRAPH_STYLE_YAXIS_ARROWS // flags + { GGRAPH_LINE_DASH, 5, Gray, 50 }, // x grid + { GGRAPH_LINE_DOT, 7, Yellow, 50 }, // y grid + GWIN_GRAPH_STYLE_POSITIVE_AXIS_ARROWS // flags }; int main(void) { diff --git a/include/gwin/graph.h b/include/gwin/graph.h index 752460cb..58c5fdee 100644 --- a/include/gwin/graph.h +++ b/include/gwin/graph.h @@ -80,8 +80,15 @@ typedef struct GGraphStyle_t { GGraphGridStyle xgrid; GGraphGridStyle ygrid; uint16_t flags; - #define GWIN_GRAPH_STYLE_XAXIS_ARROWS 0x0001 - #define GWIN_GRAPH_STYLE_YAXIS_ARROWS 0x0002 + #define GWIN_GRAPH_STYLE_XAXIS_POSITIVE_ARROWS 0x0001 + #define GWIN_GRAPH_STYLE_XAXIS_NEGATIVE_ARROWS 0x0002 + #define GWIN_GRAPH_STYLE_YAXIS_POSITIVE_ARROWS 0x0004 + #define GWIN_GRAPH_STYLE_YAXIS_NEGATIVE_ARROWS 0x0008 + #define GWIN_GRAPH_STYLE_POSITIVE_AXIS_ARROWS (GWIN_GRAPH_STYLE_XAXIS_POSITIVE_ARROWS|GWIN_GRAPH_STYLE_YAXIS_POSITIVE_ARROWS) + #define GWIN_GRAPH_STYLE_NEGATIVE_AXIS_ARROWS (GWIN_GRAPH_STYLE_XAXIS_NEGATIVE_ARROWS|GWIN_GRAPH_STYLE_YAXIS_NEGATIVE_ARROWS) + #define GWIN_GRAPH_STYLE_XAXIS_ARROWS (GWIN_GRAPH_STYLE_XAXIS_POSITIVE_ARROWS|GWIN_GRAPH_STYLE_XAXIS_NEGATIVE_ARROWS) + #define GWIN_GRAPH_STYLE_YAXIS_ARROWS (GWIN_GRAPH_STYLE_YAXIS_POSITIVE_ARROWS|GWIN_GRAPH_STYLE_YAXIS_NEGATIVE_ARROWS) + #define GWIN_GRAPH_STYLE_ALL_AXIS_ARROWS (GWIN_GRAPH_STYLE_XAXIS_ARROWS|GWIN_GRAPH_STYLE_YAXIS_ARROWS) } GGraphStyle; // A graph window diff --git a/src/gwin/graph.c b/src/gwin/graph.c index 581001ad..cc457d7d 100644 --- a/src/gwin/graph.c +++ b/src/gwin/graph.c @@ -299,11 +299,13 @@ void gwinGraphDrawAxis(GHandle gh) { // x axis lineto(gg, xmin, 0, xmax, 0, &gg->style.xaxis); - if ((gg->style.flags & GWIN_GRAPH_STYLE_XAXIS_ARROWS)) { + if ((gg->style.flags & GWIN_GRAPH_STYLE_XAXIS_NEGATIVE_ARROWS)) { if (xmin > 0 || xmin < -(GGRAPH_ARROW_SIZE+1)) { lineto(gg, xmin, 0, xmin+GGRAPH_ARROW_SIZE, GGRAPH_ARROW_SIZE, &gg->style.xaxis); lineto(gg, xmin, 0, xmin+GGRAPH_ARROW_SIZE, -GGRAPH_ARROW_SIZE, &gg->style.xaxis); } + } + if ((gg->style.flags & GWIN_GRAPH_STYLE_XAXIS_POSITIVE_ARROWS)) { if (xmax < 0 || xmax > (GGRAPH_ARROW_SIZE+1)) { lineto(gg, xmax, 0, xmax-GGRAPH_ARROW_SIZE, GGRAPH_ARROW_SIZE, &gg->style.xaxis); lineto(gg, xmax, 0, xmax-GGRAPH_ARROW_SIZE, -GGRAPH_ARROW_SIZE, &gg->style.xaxis); @@ -312,11 +314,13 @@ void gwinGraphDrawAxis(GHandle gh) { // y axis lineto(gg, 0, ymin, 0, ymax, &gg->style.yaxis); - if ((gg->style.flags & GWIN_GRAPH_STYLE_YAXIS_ARROWS)) { + if ((gg->style.flags & GWIN_GRAPH_STYLE_YAXIS_NEGATIVE_ARROWS)) { if (ymin > 0 || ymin < -(GGRAPH_ARROW_SIZE+1)) { lineto(gg, 0, ymin, GGRAPH_ARROW_SIZE, ymin+GGRAPH_ARROW_SIZE, &gg->style.yaxis); lineto(gg, 0, ymin, -GGRAPH_ARROW_SIZE, ymin+GGRAPH_ARROW_SIZE, &gg->style.yaxis); } + } + if ((gg->style.flags & GWIN_GRAPH_STYLE_YAXIS_POSITIVE_ARROWS)) { if (ymax < 0 || ymax > (GGRAPH_ARROW_SIZE+1)) { lineto(gg, 0, ymax, GGRAPH_ARROW_SIZE, ymax-GGRAPH_ARROW_SIZE, &gg->style.yaxis); lineto(gg, 0, ymax, -GGRAPH_ARROW_SIZE, ymax-GGRAPH_ARROW_SIZE, &gg->style.yaxis);