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 +