#include "../../controller/callbacks/reshape.h" #include "../../view/exp004state0.h" #include "density_legend_geometry.h" #include #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); /* * 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; const double *bottom; if (S.zoom.active) { left = &S.zoom.coords[0]; right = &S.zoom.coords[1]; bottom = &S.zoom.coords[2]; top = &S.zoom.coords[3]; } else { left = &S.ortho.min_x; right = &S.ortho.max_x; bottom = &S.ortho.min_y; top = &S.ortho.max_y; } /* * 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 = (*top - *bottom) / S.viewport.h * 10.0; 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; }