#include #include #include #include #include #include #include "ui.h" // Ui stuff ui_button buttons[] = { { /* pos */ { { 0.5, 0.5, 0.0 }, { -50.0, -25.0, 0.0 } }, /* size */ { 100.0, 50.0, 0.0 }, /* onclick */ NULL, /* text */ "Test :)" } }; ui_slider sliders[] = { { /* pos */ { { 0.5, 0.7, 0.0 }, {-50.0, -5.0, 0.0 } }, /* size */ { 100.0, 10.0, 10.0 }, 0.1 } }; void display(void) { printf("Drawing!\n"); // Clear screen glClearColor(0.0, 0.0, 0.0, 1.0); // Dark theme :) glClear(GL_COLOR_BUFFER_BIT); // Draw buttons for(ui_button* b = buttons; b < buttons + sizeof buttons / sizeof(ui_button); b += 1) { ui_button_draw(b); } for(ui_slider* s = sliders; s < sliders + sizeof sliders / sizeof(ui_slider); s += 1) { ui_slider_draw(s); } int err = glGetError(); if(err != 0) { printf("opengl error %d: %s\n", err, gluErrorString(err)); } glutSwapBuffers(); glFlush(); } void mouseEvent(int button, int state, int x, int y) { if(state == 1) { for(ui_button* b = buttons; b < buttons + sizeof buttons / sizeof(ui_button); b += 1) { if(ui_button_mouse_over(b, x, y) && b->onClick != NULL) { b->onClick(); return; } } } for(ui_slider* s = sliders; s < sliders + sizeof sliders / sizeof(ui_slider); s += 1) { if(ui_slider_mouse_over(s, x, y)) { ui_slider_onclick(s, x, y, button, state); } } } void mouseWheelEvent(int wheel, int dir, int x, int y) { printf("wheel event\n"); for(ui_slider* s = sliders; s < sliders + sizeof sliders / sizeof(ui_slider); s += 1) { if(ui_slider_mouse_over(s, x, y)) { s->value += dir * 0.05; if(s->value < 0.0) s->value = 0.0; if(s->value > 1.0) s->value = 1.0; printf("Updated %p value to %f\n", s, s->value); } } glutPostRedisplay(); } void keyboardEvent(unsigned char c, int x, int y) { if(c == '\e') { glutLeaveMainLoop(); exit(0); } if(c == 'a') { glutPostRedisplay(); } } int main(int argc, char** argv) { /* initialize glut and window */ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(800, 500); glutInitWindowPosition(450, 450); /* create window and set callbacks */ glutCreateWindow("World of Cow"); glutDisplayFunc(display); glutMouseFunc(mouseEvent); glutKeyboardFunc(keyboardEvent); glutMouseWheelFunc(mouseWheelEvent); /* set projection and camera */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 800.0, 0.0, 500.0); glutMainLoop(); return 0; }