-rw-r--r-- | src/model/geometry/datarose_geometry.c | 54 | ||||
-rw-r--r-- | src/model/geometry/datarose_geometry.h | 11 |
2 files changed, 65 insertions, 0 deletions
diff --git a/src/model/geometry/datarose_geometry.c b/src/model/geometry/datarose_geometry.c new file mode 100644 index 0000000..dded424 --- a/dev/null +++ b/src/model/geometry/datarose_geometry.c @@ -0,0 +1,54 @@ +#include "datarose_geometry.h" +#include "../../util/check_error.h" +#include "../../view/state0.h" +#include <GL/glut.h> + +#define S state0 + +void +datarose_geometry (void) +{ + glNewList (S.list_offset + DATAROSE_GEOMETRY, GL_COMPILE); + glPolygonMode (GL_FRONT, GL_FILL); + glColor4f (DEFAULT_COLOR_R, DEFAULT_COLOR_G, DEFAULT_COLOR_B, + DEFAULT_COLOR_A); + + /* + * The size of the rose will be a percentage of the world height so + * that it remains a fixed size when the window is resized or + * zoomed. + */ + GLint viewport[4]; + glGetIntegerv (GL_VIEWPORT, viewport); + const double *top = &S.ortho.max_y; + const double *bottom = &S.ortho.min_y; + double rose_radius = (*top - *bottom) / viewport[3] * 110.0; + + /* + * Place the rose in the upper right of the display. + */ + glMatrixMode (GL_MODELVIEW); + glPushMatrix (); + glLoadIdentity (); + const double *right = &S.ortho.max_x; + glTranslatef (*right - rose_radius - (rose_radius * 0.40), + *top - rose_radius - (rose_radius * 0.80), + 0.0); + + /* + * Create a circle. + */ + GLUquadricObj *obj = gluNewQuadric (); + gluQuadricDrawStyle (obj, GLU_LINE); + gluDisk (obj, rose_radius * 0.999, rose_radius, 60, 60); + + glPopMatrix (); + + glEndList (); + + gluDeleteQuadric (obj); + + check_error (__FILE__, __LINE__); + + return; +} |