istereo2

annotate src/ui.cc @ 13:ea928c313344

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 28 Sep 2015 19:04:50 +0300
parents 03cc3b1884d1
children 018f997dc646
rev   line source
nuclear@7 1 #include <stdio.h>
nuclear@6 2 #include "ui.h"
nuclear@6 3 #include "goatkit/goatkit.h"
nuclear@6 4 #include "opengl.h"
nuclear@9 5 #include "sanegl.h"
nuclear@6 6 #include "sdr.h"
nuclear@6 7
nuclear@13 8 using namespace goatkit;
nuclear@13 9
nuclear@13 10 static void done_bn_handler(Widget *w, const Event &ev, void *cls)
nuclear@13 11 {
nuclear@13 12 printf("done\n");
nuclear@13 13 }
nuclear@13 14
nuclear@6 15 static goatkit::Screen scr;
nuclear@13 16 static float aspect;
nuclear@6 17 static int width, height;
nuclear@6 18
nuclear@6 19 extern unsigned int prog_color, prog_ui;
nuclear@6 20
nuclear@6 21 int ui_init(void)
nuclear@6 22 {
nuclear@13 23 float xpos = 0.25;
nuclear@13 24 float ypos = 0.8;
nuclear@6 25 float vsep = 0.1;
nuclear@6 26
nuclear@13 27 /*goatkit::Label *label = new goatkit::Label;
nuclear@13 28 label->set_position(xpos, ypos);
nuclear@6 29 label->set_size(0.1, 0.1);
nuclear@6 30 label->set_text("Stereoscopic rendering");
nuclear@13 31 scr.add_widget(label);*/
nuclear@13 32
nuclear@13 33 goatkit::Button *button = new goatkit::Button;
nuclear@13 34 button->set_position(xpos, ypos);
nuclear@13 35 button->set_size(0.2, 0.1);
nuclear@13 36 button->set_text("Done");
nuclear@13 37 button->set_callback(goatkit::EV_CLICK, done_bn_handler);
nuclear@13 38 scr.add_widget(button);
nuclear@6 39
nuclear@6 40 /*
nuclear@6 41 goatkit::TextBox *text = new goatkit::TextBox;
nuclear@6 42 text->set_position(300, ypos += vsep);
nuclear@6 43 text->set_size(200, 30);
nuclear@6 44 text->set_text("foo");
nuclear@6 45 text->set_callback(goatkit::EV_CHANGE, callback);
nuclear@6 46 scr.add_widget(text);
nuclear@6 47
nuclear@6 48 goatkit::CheckBox *cbox = new goatkit::CheckBox;
nuclear@6 49 cbox->set_position(300, ypos += vsep);
nuclear@6 50 cbox->set_size(200, 20);
nuclear@6 51 cbox->set_text("a checkbox!");
nuclear@6 52 cbox->set_callback(goatkit::EV_CHANGE, callback);
nuclear@6 53 scr.add_widget(cbox);
nuclear@6 54
nuclear@6 55 goatkit::Slider *slider = new goatkit::Slider;
nuclear@6 56 slider->set_position(300, ypos += vsep);
nuclear@6 57 slider->set_size(200, 40);
nuclear@6 58 slider->set_callback(goatkit::EV_CHANGE, callback);
nuclear@6 59 slider->set_continuous_change(false);
nuclear@6 60 slider->set_range(0, 100.0);
nuclear@6 61 scr.add_widget(slider);
nuclear@6 62
nuclear@6 63 goatkit::Slider *intslider = new goatkit::Slider;
nuclear@6 64 intslider->set_position(300, ypos += vsep);
nuclear@6 65 intslider->set_size(200, 40);
nuclear@6 66 intslider->set_callback(goatkit::EV_CHANGE, callback);
nuclear@6 67 intslider->set_continuous_change(false);
nuclear@6 68 intslider->set_range(0, 100.0);
nuclear@6 69 intslider->set_step(10);
nuclear@6 70 scr.add_widget(intslider);
nuclear@6 71 */
nuclear@6 72
nuclear@6 73 scr.show();
nuclear@6 74
nuclear@6 75 // load the theme
nuclear@6 76 //goatkit::add_theme_path("themes/simple");
nuclear@6 77
nuclear@11 78 if(!(goatkit::theme = goatkit::get_theme("istereo"))) {
nuclear@7 79 return -1;
nuclear@7 80 }
nuclear@6 81
nuclear@6 82 return 0;
nuclear@6 83 }
nuclear@6 84
nuclear@6 85 void ui_shutdown(void)
nuclear@6 86 {
nuclear@6 87 }
nuclear@6 88
nuclear@6 89 void ui_reshape(int x, int y)
nuclear@6 90 {
nuclear@6 91 width = x;
nuclear@6 92 height = y;
nuclear@13 93 aspect = (float)width / (float)height;
nuclear@6 94 }
nuclear@6 95
nuclear@6 96 void ui_draw(void)
nuclear@6 97 {
nuclear@6 98 bind_program(prog_ui);
nuclear@6 99
nuclear@6 100 gl_matrix_mode(GL_PROJECTION);
nuclear@6 101 gl_push_matrix();
nuclear@6 102 gl_load_identity();
nuclear@6 103 gl_scalef(2.0 / aspect, 2.0, 1);
nuclear@6 104 gl_translatef(-1, -1, 0);
nuclear@6 105 gl_matrix_mode(GL_MODELVIEW);
nuclear@6 106 gl_push_matrix();
nuclear@6 107 gl_load_identity();
nuclear@6 108
nuclear@6 109 glDisable(GL_CULL_FACE);
nuclear@6 110 glDisable(GL_DEPTH_TEST);
nuclear@7 111 glEnable(GL_BLEND);
nuclear@7 112 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
nuclear@6 113
nuclear@7 114 set_uniform_float4(prog_ui, "ucolor", 0, 0, 0, 0.5);
nuclear@7 115
nuclear@7 116 gl_begin(GL_QUADS);
nuclear@7 117 //gl_color4f(0, 0, 0, 0.5);
nuclear@6 118 gl_vertex3f(0, 0, 0);
nuclear@7 119 gl_vertex3f(0, 1.0, 0);
nuclear@7 120 gl_vertex3f(1.0 * aspect, 1.0, 0);
nuclear@7 121 gl_vertex3f(1.0 * aspect, 0, 0);
nuclear@6 122 gl_end();
nuclear@6 123
nuclear@6 124 scr.draw();
nuclear@6 125
nuclear@7 126 glDisable(GL_BLEND);
nuclear@6 127 glEnable(GL_CULL_FACE);
nuclear@6 128 glEnable(GL_DEPTH_TEST);
nuclear@6 129
nuclear@6 130
nuclear@6 131 gl_matrix_mode(GL_PROJECTION);
nuclear@6 132 gl_pop_matrix();
nuclear@6 133 gl_matrix_mode(GL_MODELVIEW);
nuclear@6 134 gl_pop_matrix();
nuclear@6 135 }
nuclear@6 136
nuclear@6 137 void ui_button(int bn, int press, int x, int y)
nuclear@6 138 {
nuclear@13 139 float normx = aspect * (float)x / (float)width;
nuclear@13 140 float normy = 1.0 - (float)y / (float)height;
nuclear@13 141
nuclear@13 142 scr.sysev_mouse_button(bn, press != 0, normx, normy);
nuclear@6 143 }
nuclear@6 144
nuclear@6 145 void ui_motion(int x, int y)
nuclear@6 146 {
nuclear@13 147 float normx = aspect * (float)x / (float)width;
nuclear@13 148 float normy = 1.0 - (float)y / (float)height;
nuclear@13 149
nuclear@13 150 scr.sysev_mouse_motion(normx, normy);
nuclear@9 151 }