istereo2
diff 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 |
line diff
1.1 --- a/src/ui.cc Tue Sep 29 01:11:54 2015 +0300 1.2 +++ b/src/ui.cc Wed Sep 30 04:41:21 2015 +0300 1.3 @@ -7,76 +7,106 @@ 1.4 1.5 using namespace goatkit; 1.6 1.7 -static void done_bn_handler(Widget *w, const Event &ev, void *cls) 1.8 -{ 1.9 - printf("done\n"); 1.10 -} 1.11 +extern int stereo; 1.12 +extern int show_opt; 1.13 +extern int use_bump; 1.14 +extern float split; 1.15 1.16 -static goatkit::Screen scr; 1.17 +static void done_bn_handler(Widget *w, const Event &ev, void *cls); 1.18 +static void stereo_cbox_handler(Widget *w, const Event &ev, void *cls); 1.19 +static void bump_cbox_handler(Widget *w, const Event &ev, void *cls); 1.20 +static void split_slider_handler(Widget *w, const Event &ev, void *cls); 1.21 + 1.22 +static Screen scr; 1.23 static float aspect; 1.24 static int width, height; 1.25 static int virt_width, virt_height; 1.26 +static Slider *slider_split; 1.27 +static Label *label_split; 1.28 1.29 extern unsigned int prog_color, prog_ui; 1.30 1.31 int ui_init(void) 1.32 { 1.33 - float xpos = 100; 1.34 - float ypos = 50; 1.35 - float vsep = 50; 1.36 + float ypos = 300; 1.37 + float vsep = 70; 1.38 + float vsz = 35; 1.39 1.40 - /*goatkit::Label *label = new goatkit::Label; 1.41 - label->set_position(xpos, ypos); 1.42 - label->set_size(20, 20); 1.43 - label->set_text("Stereoscopic rendering"); 1.44 - scr.add_widget(label);*/ 1.45 + CheckBox *cbox = new CheckBox; 1.46 + cbox->set_position(300, ypos); 1.47 + cbox->set_size(300, vsz); 1.48 + cbox->set_text("Stereoscopic rendering"); 1.49 + cbox->set_callback(EV_CHANGE, stereo_cbox_handler); 1.50 + //cbox->set_toggle_transition(80); 1.51 + scr.add_widget(cbox); 1.52 + ypos -= vsep; 1.53 1.54 - goatkit::Button *button = new goatkit::Button; 1.55 - button->set_position(xpos, ypos); 1.56 - button->set_size(80, 30); 1.57 + label_split = new Label; 1.58 + label_split->set_position(170, ypos); 1.59 + label_split->set_size(20, vsz); 1.60 + label_split->set_text("Stereo split"); 1.61 + if(!stereo) label_split->deactivate(); 1.62 + scr.add_widget(label_split); 1.63 + 1.64 + slider_split = new Slider; 1.65 + slider_split->set_position(300, ypos); 1.66 + slider_split->set_size(300, vsz); 1.67 + slider_split->set_callback(EV_CHANGE, split_slider_handler); 1.68 + slider_split->set_continuous_change(true); 1.69 + slider_split->set_range(0, 1.0); 1.70 + slider_split->set_value(split); 1.71 + if(!stereo) slider_split->deactivate(); 1.72 + scr.add_widget(slider_split); 1.73 + ypos -= vsep; 1.74 + 1.75 + cbox = new CheckBox; 1.76 + cbox->set_position(300, ypos); 1.77 + cbox->set_size(300, vsz); 1.78 + cbox->set_text("Bump mapping"); 1.79 + cbox->set_callback(EV_CHANGE, bump_cbox_handler); 1.80 + scr.add_widget(cbox); 1.81 + ypos -= vsep; 1.82 + 1.83 + ypos -= vsep * 0.5; 1.84 + Button *button = new Button; 1.85 + button->set_position(450, ypos); 1.86 + button->set_size(150, vsz); 1.87 button->set_text("Done"); 1.88 - button->set_callback(goatkit::EV_CLICK, done_bn_handler); 1.89 + button->set_callback(EV_CLICK, done_bn_handler); 1.90 scr.add_widget(button); 1.91 + ypos -= vsep; 1.92 1.93 /* 1.94 - goatkit::TextBox *text = new goatkit::TextBox; 1.95 + TextBox *text = new TextBox; 1.96 text->set_position(300, ypos += vsep); 1.97 text->set_size(200, 30); 1.98 text->set_text("foo"); 1.99 - text->set_callback(goatkit::EV_CHANGE, callback); 1.100 + text->set_callback(EV_CHANGE, callback); 1.101 scr.add_widget(text); 1.102 1.103 - goatkit::CheckBox *cbox = new goatkit::CheckBox; 1.104 + CheckBox *cbox = new CheckBox; 1.105 cbox->set_position(300, ypos += vsep); 1.106 cbox->set_size(200, 20); 1.107 cbox->set_text("a checkbox!"); 1.108 - cbox->set_callback(goatkit::EV_CHANGE, callback); 1.109 + cbox->set_callback(EV_CHANGE, callback); 1.110 scr.add_widget(cbox); 1.111 1.112 - goatkit::Slider *slider = new goatkit::Slider; 1.113 - slider->set_position(300, ypos += vsep); 1.114 - slider->set_size(200, 40); 1.115 - slider->set_callback(goatkit::EV_CHANGE, callback); 1.116 - slider->set_continuous_change(false); 1.117 - slider->set_range(0, 100.0); 1.118 - scr.add_widget(slider); 1.119 - 1.120 - goatkit::Slider *intslider = new goatkit::Slider; 1.121 + Slider *intslider = new Slider; 1.122 intslider->set_position(300, ypos += vsep); 1.123 intslider->set_size(200, 40); 1.124 - intslider->set_callback(goatkit::EV_CHANGE, callback); 1.125 + intslider->set_callback(EV_CHANGE, callback); 1.126 intslider->set_continuous_change(false); 1.127 intslider->set_range(0, 100.0); 1.128 intslider->set_step(10); 1.129 scr.add_widget(intslider); 1.130 */ 1.131 1.132 - scr.show(); 1.133 + scr.set_visibility_transition(400); 1.134 1.135 // load the theme 1.136 - //goatkit::add_theme_path("themes/simple"); 1.137 + //add_theme_path("themes/simple"); 1.138 1.139 - if(!(goatkit::theme = goatkit::get_theme("istereo"))) { 1.140 + if(!(theme = get_theme("istereo"))) { 1.141 return -1; 1.142 } 1.143 1.144 @@ -87,6 +117,21 @@ 1.145 { 1.146 } 1.147 1.148 +void ui_show() 1.149 +{ 1.150 + scr.show(); 1.151 +} 1.152 + 1.153 +void ui_hide() 1.154 +{ 1.155 + scr.hide(); 1.156 +} 1.157 + 1.158 +int ui_visible() 1.159 +{ 1.160 + return scr.get_visibility() > 0.01; 1.161 +} 1.162 + 1.163 void ui_reshape(int x, int y) 1.164 { 1.165 width = x; 1.166 @@ -114,7 +159,7 @@ 1.167 glEnable(GL_BLEND); 1.168 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 1.169 1.170 - set_uniform_float4(prog_ui, "ucolor", 0, 0, 0, 0.5); 1.171 + set_uniform_float4(prog_ui, "ucolor", 0, 0, 0, 0.5 * scr.get_visibility()); 1.172 1.173 gl_begin(GL_QUADS); 1.174 //gl_color4f(0, 0, 0, 0.5); 1.175 @@ -152,3 +197,34 @@ 1.176 1.177 scr.sysev_mouse_motion(normx, normy); 1.178 } 1.179 + 1.180 + 1.181 +static void done_bn_handler(Widget *w, const Event &ev, void *cls) 1.182 +{ 1.183 + show_opt = 0; 1.184 + ui_hide(); 1.185 +} 1.186 + 1.187 +static void stereo_cbox_handler(Widget *w, const Event &ev, void *cls) 1.188 +{ 1.189 + stereo = ((CheckBox*)w)->is_checked() ? 1 : 0; 1.190 + 1.191 + if(stereo) { 1.192 + slider_split->activate(); 1.193 + label_split->activate(); 1.194 + } else { 1.195 + slider_split->deactivate(); 1.196 + label_split->deactivate(); 1.197 + } 1.198 +} 1.199 + 1.200 +static void bump_cbox_handler(Widget *w, const Event &ev, void *cls) 1.201 +{ 1.202 + use_bump = ((CheckBox*)w)->is_checked() ? 1 : 0; 1.203 +} 1.204 + 1.205 +static void split_slider_handler(Widget *w, const Event &ev, void *cls) 1.206 +{ 1.207 + split = ((Slider*)w)->get_value(); 1.208 +} 1.209 +