istereo2

annotate src/ui.cc @ 15:7bd4264bf74a

gui done?
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 30 Sep 2015 04:41:21 +0300
parents 018f997dc646
children 1b7776cb800b
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@15 10 extern int stereo;
nuclear@15 11 extern int show_opt;
nuclear@15 12 extern int use_bump;
nuclear@15 13 extern float split;
nuclear@13 14
nuclear@15 15 static void done_bn_handler(Widget *w, const Event &ev, void *cls);
nuclear@15 16 static void stereo_cbox_handler(Widget *w, const Event &ev, void *cls);
nuclear@15 17 static void bump_cbox_handler(Widget *w, const Event &ev, void *cls);
nuclear@15 18 static void split_slider_handler(Widget *w, const Event &ev, void *cls);
nuclear@15 19
nuclear@15 20 static Screen scr;
nuclear@13 21 static float aspect;
nuclear@6 22 static int width, height;
nuclear@14 23 static int virt_width, virt_height;
nuclear@15 24 static Slider *slider_split;
nuclear@15 25 static Label *label_split;
nuclear@6 26
nuclear@6 27 extern unsigned int prog_color, prog_ui;
nuclear@6 28
nuclear@6 29 int ui_init(void)
nuclear@6 30 {
nuclear@15 31 float ypos = 300;
nuclear@15 32 float vsep = 70;
nuclear@15 33 float vsz = 35;
nuclear@6 34
nuclear@15 35 CheckBox *cbox = new CheckBox;
nuclear@15 36 cbox->set_position(300, ypos);
nuclear@15 37 cbox->set_size(300, vsz);
nuclear@15 38 cbox->set_text("Stereoscopic rendering");
nuclear@15 39 cbox->set_callback(EV_CHANGE, stereo_cbox_handler);
nuclear@15 40 //cbox->set_toggle_transition(80);
nuclear@15 41 scr.add_widget(cbox);
nuclear@15 42 ypos -= vsep;
nuclear@13 43
nuclear@15 44 label_split = new Label;
nuclear@15 45 label_split->set_position(170, ypos);
nuclear@15 46 label_split->set_size(20, vsz);
nuclear@15 47 label_split->set_text("Stereo split");
nuclear@15 48 if(!stereo) label_split->deactivate();
nuclear@15 49 scr.add_widget(label_split);
nuclear@15 50
nuclear@15 51 slider_split = new Slider;
nuclear@15 52 slider_split->set_position(300, ypos);
nuclear@15 53 slider_split->set_size(300, vsz);
nuclear@15 54 slider_split->set_callback(EV_CHANGE, split_slider_handler);
nuclear@15 55 slider_split->set_continuous_change(true);
nuclear@15 56 slider_split->set_range(0, 1.0);
nuclear@15 57 slider_split->set_value(split);
nuclear@15 58 if(!stereo) slider_split->deactivate();
nuclear@15 59 scr.add_widget(slider_split);
nuclear@15 60 ypos -= vsep;
nuclear@15 61
nuclear@15 62 cbox = new CheckBox;
nuclear@15 63 cbox->set_position(300, ypos);
nuclear@15 64 cbox->set_size(300, vsz);
nuclear@15 65 cbox->set_text("Bump mapping");
nuclear@15 66 cbox->set_callback(EV_CHANGE, bump_cbox_handler);
nuclear@15 67 scr.add_widget(cbox);
nuclear@15 68 ypos -= vsep;
nuclear@15 69
nuclear@15 70 ypos -= vsep * 0.5;
nuclear@15 71 Button *button = new Button;
nuclear@15 72 button->set_position(450, ypos);
nuclear@15 73 button->set_size(150, vsz);
nuclear@13 74 button->set_text("Done");
nuclear@15 75 button->set_callback(EV_CLICK, done_bn_handler);
nuclear@13 76 scr.add_widget(button);
nuclear@15 77 ypos -= vsep;
nuclear@6 78
nuclear@6 79 /*
nuclear@15 80 TextBox *text = new TextBox;
nuclear@6 81 text->set_position(300, ypos += vsep);
nuclear@6 82 text->set_size(200, 30);
nuclear@6 83 text->set_text("foo");
nuclear@15 84 text->set_callback(EV_CHANGE, callback);
nuclear@6 85 scr.add_widget(text);
nuclear@6 86
nuclear@15 87 CheckBox *cbox = new CheckBox;
nuclear@6 88 cbox->set_position(300, ypos += vsep);
nuclear@6 89 cbox->set_size(200, 20);
nuclear@6 90 cbox->set_text("a checkbox!");
nuclear@15 91 cbox->set_callback(EV_CHANGE, callback);
nuclear@6 92 scr.add_widget(cbox);
nuclear@6 93
nuclear@15 94 Slider *intslider = new Slider;
nuclear@6 95 intslider->set_position(300, ypos += vsep);
nuclear@6 96 intslider->set_size(200, 40);
nuclear@15 97 intslider->set_callback(EV_CHANGE, callback);
nuclear@6 98 intslider->set_continuous_change(false);
nuclear@6 99 intslider->set_range(0, 100.0);
nuclear@6 100 intslider->set_step(10);
nuclear@6 101 scr.add_widget(intslider);
nuclear@6 102 */
nuclear@6 103
nuclear@15 104 scr.set_visibility_transition(400);
nuclear@6 105
nuclear@6 106 // load the theme
nuclear@15 107 //add_theme_path("themes/simple");
nuclear@6 108
nuclear@15 109 if(!(theme = get_theme("istereo"))) {
nuclear@7 110 return -1;
nuclear@7 111 }
nuclear@6 112
nuclear@6 113 return 0;
nuclear@6 114 }
nuclear@6 115
nuclear@6 116 void ui_shutdown(void)
nuclear@6 117 {
nuclear@6 118 }
nuclear@6 119
nuclear@15 120 void ui_show()
nuclear@15 121 {
nuclear@15 122 scr.show();
nuclear@15 123 }
nuclear@15 124
nuclear@15 125 void ui_hide()
nuclear@15 126 {
nuclear@15 127 scr.hide();
nuclear@15 128 }
nuclear@15 129
nuclear@15 130 int ui_visible()
nuclear@15 131 {
nuclear@15 132 return scr.get_visibility() > 0.01;
nuclear@15 133 }
nuclear@15 134
nuclear@6 135 void ui_reshape(int x, int y)
nuclear@6 136 {
nuclear@6 137 width = x;
nuclear@6 138 height = y;
nuclear@13 139 aspect = (float)width / (float)height;
nuclear@14 140
nuclear@14 141 virt_width = 500.0 * aspect;
nuclear@14 142 virt_height = 500.0;
nuclear@6 143 }
nuclear@6 144
nuclear@6 145 void ui_draw(void)
nuclear@6 146 {
nuclear@6 147 bind_program(prog_ui);
nuclear@6 148
nuclear@6 149 gl_matrix_mode(GL_PROJECTION);
nuclear@6 150 gl_push_matrix();
nuclear@6 151 gl_load_identity();
nuclear@14 152 gl_ortho(0, virt_width, 0, virt_height, -1, 1);
nuclear@6 153 gl_matrix_mode(GL_MODELVIEW);
nuclear@6 154 gl_push_matrix();
nuclear@6 155 gl_load_identity();
nuclear@6 156
nuclear@6 157 glDisable(GL_CULL_FACE);
nuclear@6 158 glDisable(GL_DEPTH_TEST);
nuclear@7 159 glEnable(GL_BLEND);
nuclear@7 160 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
nuclear@6 161
nuclear@15 162 set_uniform_float4(prog_ui, "ucolor", 0, 0, 0, 0.5 * scr.get_visibility());
nuclear@7 163
nuclear@7 164 gl_begin(GL_QUADS);
nuclear@7 165 //gl_color4f(0, 0, 0, 0.5);
nuclear@6 166 gl_vertex3f(0, 0, 0);
nuclear@14 167 gl_vertex3f(0, virt_height, 0);
nuclear@14 168 gl_vertex3f(virt_width, virt_height, 0);
nuclear@14 169 gl_vertex3f(virt_width, 0, 0);
nuclear@6 170 gl_end();
nuclear@6 171
nuclear@6 172 scr.draw();
nuclear@6 173
nuclear@7 174 glDisable(GL_BLEND);
nuclear@6 175 glEnable(GL_CULL_FACE);
nuclear@6 176 glEnable(GL_DEPTH_TEST);
nuclear@6 177
nuclear@6 178
nuclear@6 179 gl_matrix_mode(GL_PROJECTION);
nuclear@6 180 gl_pop_matrix();
nuclear@6 181 gl_matrix_mode(GL_MODELVIEW);
nuclear@6 182 gl_pop_matrix();
nuclear@6 183 }
nuclear@6 184
nuclear@6 185 void ui_button(int bn, int press, int x, int y)
nuclear@6 186 {
nuclear@14 187 float normx = virt_width * (float)x / (float)width;
nuclear@14 188 float normy = virt_height - virt_height * (float)y / (float)height;
nuclear@13 189
nuclear@13 190 scr.sysev_mouse_button(bn, press != 0, normx, normy);
nuclear@6 191 }
nuclear@6 192
nuclear@6 193 void ui_motion(int x, int y)
nuclear@6 194 {
nuclear@14 195 float normx = virt_width * (float)x / (float)width;
nuclear@14 196 float normy = virt_height - virt_height * (float)y / (float)height;
nuclear@13 197
nuclear@13 198 scr.sysev_mouse_motion(normx, normy);
nuclear@9 199 }
nuclear@15 200
nuclear@15 201
nuclear@15 202 static void done_bn_handler(Widget *w, const Event &ev, void *cls)
nuclear@15 203 {
nuclear@15 204 show_opt = 0;
nuclear@15 205 ui_hide();
nuclear@15 206 }
nuclear@15 207
nuclear@15 208 static void stereo_cbox_handler(Widget *w, const Event &ev, void *cls)
nuclear@15 209 {
nuclear@15 210 stereo = ((CheckBox*)w)->is_checked() ? 1 : 0;
nuclear@15 211
nuclear@15 212 if(stereo) {
nuclear@15 213 slider_split->activate();
nuclear@15 214 label_split->activate();
nuclear@15 215 } else {
nuclear@15 216 slider_split->deactivate();
nuclear@15 217 label_split->deactivate();
nuclear@15 218 }
nuclear@15 219 }
nuclear@15 220
nuclear@15 221 static void bump_cbox_handler(Widget *w, const Event &ev, void *cls)
nuclear@15 222 {
nuclear@15 223 use_bump = ((CheckBox*)w)->is_checked() ? 1 : 0;
nuclear@15 224 }
nuclear@15 225
nuclear@15 226 static void split_slider_handler(Widget *w, const Event &ev, void *cls)
nuclear@15 227 {
nuclear@15 228 split = ((Slider*)w)->get_value();
nuclear@15 229 }
nuclear@15 230