summaryrefslogtreecommitdiffstats
Side-by-side diff
-rw-r--r--r/connect.R2
-rw-r--r--src/Makefile.am3
-rw-r--r--src/controller/exp004reshape.c11
-rw-r--r--src/model/density_legend_geometry.c81
-rw-r--r--src/model/density_legend_geometry.h9
-rw-r--r--src/model/display_list_index.h6
-rw-r--r--src/model/exp004state.h14
-rw-r--r--src/util/check_error.c6
-rw-r--r--src/view/exp004geometry.c7
-rw-r--r--src/view/exp004init.c8
-rw-r--r--src/view/exp004view.c4
11 files changed, 124 insertions, 27 deletions
diff --git a/src/model/density_legend_geometry.c b/src/model/density_legend_geometry.c
new file mode 100644
index 0000000..ab3e46c
--- a/dev/null
+++ b/src/model/density_legend_geometry.c
@@ -0,0 +1,81 @@
+#include "density_legend_geometry.h"
+#include "../view/exp004state0.h"
+#include "../controller/exp004reshape.h"
+#include <GL/glut.h>
+#include <stdio.h>
+
+#define S exp004state0
+
+void
+density_legend_geometry (void)
+{
+ glNewList (S.list_offset + DENSITY_LEGEND_GEOMETRY, GL_COMPILE);
+ glPolygonMode (GL_FRONT, GL_FILL);
+ glColor4f (DEFAULT_COLOR_R, DEFAULT_COLOR_G, DEFAULT_COLOR_B,
+ DEFAULT_COLOR_A);
+
+ /*
+ * This value should be a percentage of the world height so that it
+ * remains a fixed number of pixels tall when the window is resized
+ * or zoomed.
+ */
+ double legend_height = 0.5;
+
+ /*
+ * Calculate the bounding box for the legend.
+ */
+
+ double a[2];
+ double b[2];
+ double c[2];
+ double d[2];
+
+ const double *left;
+ const double *right;
+ const double *top;
+
+ if (S.zoom.active)
+ {
+ left = &S.zoom.coords[0];
+ right = &S.zoom.coords[1];
+ top = &S.zoom.coords[3];
+ }
+ else
+ {
+ left = &S.ortho.min_x;
+ top = &S.ortho.max_y;
+ right = &S.ortho.max_x;
+ }
+
+ a[0] = *left;
+ a[1] = *top;
+ b[0] = *right;
+ b[1] = *top;
+ c[0] = *right;
+ c[1] = *top - legend_height;
+ d[0] = *left;
+ d[1] = *top - legend_height;
+
+ /*
+ * Overlay a legend from default saturation / alpha to full saturation.
+ */
+ for (int i = 1; i <= 1 / DEFAULT_COLOR_A; i++)
+ {
+ glBegin (GL_QUADS);
+ glVertex2dv (a);
+ glVertex2dv (b);
+ glVertex2dv (c);
+ glVertex2dv (d);
+ glEnd ();
+
+ /*
+ * Step left to right along the x-coordinate.
+ */
+ a[0] = *left + (*right - *left) * (DEFAULT_COLOR_A * i);
+ d[0] = a[0];
+ }
+
+ glEndList ();
+
+ return;
+}

Valid XHTML 1.0 Strict

Copyright © 2009 Don Pellegrino All Rights Reserved.