#include "ui.h" #include "vec.h" #include #include #include #include #include #define BACK_COLOR 0.3, 0.35, 0.35 void ui_button_draw(ui_button* b) { int wWidth = glutGet(GLUT_WINDOW_WIDTH); int wHeight = glutGet(GLUT_WINDOW_HEIGHT); vec3 pos = vec3_add(b->position.absolute, vec3_new(b->position.relative.x * wWidth, b->position.relative.y * wHeight, 0.0)); vec3 ext = b->size; glColor3f(BACK_COLOR); glBegin(GL_QUADS); glVertexVec(pos); glVertex3f(pos.x + ext.x, pos.y, pos.z); glVertexVec(vec3_add(pos, ext)); glVertex3f(pos.x, pos.y + ext.y, pos.z); glEnd(); glColor3f(0.7, 0.7, 0.8); glLineWidth(2.0); glBegin(GL_LINE_LOOP); glVertexVec(pos); glVertex3f(pos.x + ext.x, pos.y, pos.z); glVertexVec(vec3_add(pos, ext)); glVertex3f(pos.x, pos.y + ext.y, pos.z); glEnd(); // Draw text if needed if(b->text != NULL) { glColor3f(1.0, 1.0, 1.0); // Get text size int textWidth = glutBitmapLength(GLUT_BITMAP_TIMES_ROMAN_24, (unsigned char*)b->text); int textHeight = glutBitmapHeight(GLUT_BITMAP_TIMES_ROMAN_24); // set raster position - not gonna take into account multiple line text buttons vec3 rPos = vec3_add(pos, vec3_mult(ext, 0.5)); rPos.x -= textWidth * 0.5; rPos.y -= textHeight * 0.25; glRasterPos3f(rPos.x, rPos.y, rPos.z); glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, (unsigned char*)b->text); } } char ui_button_mouse_over(ui_button* b, int mouseX, int mouseY) { int wWidth = glutGet(GLUT_WINDOW_WIDTH); int wHeight = glutGet(GLUT_WINDOW_HEIGHT); vec3 pos = vec3_add(b->position.absolute, vec3_new(b->position.relative.x * wWidth, b->position.relative.y * wHeight, 0.0)); vec3 ext = b->size; vec3 m = vec3_sub(vec3_new(mouseX, wHeight - mouseY, 0.0), pos); return m.x > 0.0 && m.x < ext.x && m.y > 0.0 && m.y < ext.y; } void ui_slider_draw(ui_slider* s) { int wWidth = glutGet(GLUT_WINDOW_WIDTH); int wHeight = glutGet(GLUT_WINDOW_HEIGHT); vec3 pos = vec3_add(s->position.absolute, vec3_new(s->position.relative.x * wWidth, s->position.relative.y * wHeight, 0.0)); vec3 ext = s->size; vec3 slider = vec3_add(pos, vec3_new(ext.x * s->value, ext.y * 0.5, 0.0)); glBegin(GL_QUADS); // draw background line glColor3f(BACK_COLOR); glVertexVec(pos); glVertex3f(pos.x + ext.x, pos.y, pos.z); glVertex3f(pos.x + ext.x, pos.y + ext.y, pos.z); glVertex3f(pos.x, pos.y + ext.y, pos.z); // Draw slider button thing glColor3f(1.0, 1.0, 1.0); glVertex3f(slider.x - ext.z, slider.y - ext.y, 0.0); glVertex3f(slider.x + ext.z, slider.y - ext.y, 0.0); glVertex3f(slider.x + ext.z, slider.y + ext.y, 0.0); glVertex3f(slider.x - ext.z, slider.y + ext.y, 0.0); glEnd(); } char ui_slider_mouse_over(ui_slider* s, int mouseX, int mouseY) { int wWidth = glutGet(GLUT_WINDOW_WIDTH); int wHeight = glutGet(GLUT_WINDOW_HEIGHT); vec3 pos = vec3_add(s->position.absolute, vec3_new(s->position.relative.x * wWidth, s->position.relative.y * wHeight, 0.0)); vec3 ext = s->size; vec3 m = vec3_sub(vec3_new(mouseX, wHeight - mouseY, 0.0), pos); return m.x > 0.0 && m.x < ext.x && m.y > 0.0 && m.y < ext.y; } void ui_slider_onclick(ui_slider* s, int mouseX, int mouseY, int button, int state) { }