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@14
|
18 static int virt_width, virt_height;
|
nuclear@6
|
19
|
nuclear@6
|
20 extern unsigned int prog_color, prog_ui;
|
nuclear@6
|
21
|
nuclear@6
|
22 int ui_init(void)
|
nuclear@6
|
23 {
|
nuclear@14
|
24 float xpos = 100;
|
nuclear@14
|
25 float ypos = 50;
|
nuclear@14
|
26 float vsep = 50;
|
nuclear@6
|
27
|
nuclear@13
|
28 /*goatkit::Label *label = new goatkit::Label;
|
nuclear@13
|
29 label->set_position(xpos, ypos);
|
nuclear@14
|
30 label->set_size(20, 20);
|
nuclear@6
|
31 label->set_text("Stereoscopic rendering");
|
nuclear@13
|
32 scr.add_widget(label);*/
|
nuclear@13
|
33
|
nuclear@13
|
34 goatkit::Button *button = new goatkit::Button;
|
nuclear@13
|
35 button->set_position(xpos, ypos);
|
nuclear@14
|
36 button->set_size(80, 30);
|
nuclear@13
|
37 button->set_text("Done");
|
nuclear@13
|
38 button->set_callback(goatkit::EV_CLICK, done_bn_handler);
|
nuclear@13
|
39 scr.add_widget(button);
|
nuclear@6
|
40
|
nuclear@6
|
41 /*
|
nuclear@6
|
42 goatkit::TextBox *text = new goatkit::TextBox;
|
nuclear@6
|
43 text->set_position(300, ypos += vsep);
|
nuclear@6
|
44 text->set_size(200, 30);
|
nuclear@6
|
45 text->set_text("foo");
|
nuclear@6
|
46 text->set_callback(goatkit::EV_CHANGE, callback);
|
nuclear@6
|
47 scr.add_widget(text);
|
nuclear@6
|
48
|
nuclear@6
|
49 goatkit::CheckBox *cbox = new goatkit::CheckBox;
|
nuclear@6
|
50 cbox->set_position(300, ypos += vsep);
|
nuclear@6
|
51 cbox->set_size(200, 20);
|
nuclear@6
|
52 cbox->set_text("a checkbox!");
|
nuclear@6
|
53 cbox->set_callback(goatkit::EV_CHANGE, callback);
|
nuclear@6
|
54 scr.add_widget(cbox);
|
nuclear@6
|
55
|
nuclear@6
|
56 goatkit::Slider *slider = new goatkit::Slider;
|
nuclear@6
|
57 slider->set_position(300, ypos += vsep);
|
nuclear@6
|
58 slider->set_size(200, 40);
|
nuclear@6
|
59 slider->set_callback(goatkit::EV_CHANGE, callback);
|
nuclear@6
|
60 slider->set_continuous_change(false);
|
nuclear@6
|
61 slider->set_range(0, 100.0);
|
nuclear@6
|
62 scr.add_widget(slider);
|
nuclear@6
|
63
|
nuclear@6
|
64 goatkit::Slider *intslider = new goatkit::Slider;
|
nuclear@6
|
65 intslider->set_position(300, ypos += vsep);
|
nuclear@6
|
66 intslider->set_size(200, 40);
|
nuclear@6
|
67 intslider->set_callback(goatkit::EV_CHANGE, callback);
|
nuclear@6
|
68 intslider->set_continuous_change(false);
|
nuclear@6
|
69 intslider->set_range(0, 100.0);
|
nuclear@6
|
70 intslider->set_step(10);
|
nuclear@6
|
71 scr.add_widget(intslider);
|
nuclear@6
|
72 */
|
nuclear@6
|
73
|
nuclear@6
|
74 scr.show();
|
nuclear@6
|
75
|
nuclear@6
|
76 // load the theme
|
nuclear@6
|
77 //goatkit::add_theme_path("themes/simple");
|
nuclear@6
|
78
|
nuclear@11
|
79 if(!(goatkit::theme = goatkit::get_theme("istereo"))) {
|
nuclear@7
|
80 return -1;
|
nuclear@7
|
81 }
|
nuclear@6
|
82
|
nuclear@6
|
83 return 0;
|
nuclear@6
|
84 }
|
nuclear@6
|
85
|
nuclear@6
|
86 void ui_shutdown(void)
|
nuclear@6
|
87 {
|
nuclear@6
|
88 }
|
nuclear@6
|
89
|
nuclear@6
|
90 void ui_reshape(int x, int y)
|
nuclear@6
|
91 {
|
nuclear@6
|
92 width = x;
|
nuclear@6
|
93 height = y;
|
nuclear@13
|
94 aspect = (float)width / (float)height;
|
nuclear@14
|
95
|
nuclear@14
|
96 virt_width = 500.0 * aspect;
|
nuclear@14
|
97 virt_height = 500.0;
|
nuclear@6
|
98 }
|
nuclear@6
|
99
|
nuclear@6
|
100 void ui_draw(void)
|
nuclear@6
|
101 {
|
nuclear@6
|
102 bind_program(prog_ui);
|
nuclear@6
|
103
|
nuclear@6
|
104 gl_matrix_mode(GL_PROJECTION);
|
nuclear@6
|
105 gl_push_matrix();
|
nuclear@6
|
106 gl_load_identity();
|
nuclear@14
|
107 gl_ortho(0, virt_width, 0, virt_height, -1, 1);
|
nuclear@6
|
108 gl_matrix_mode(GL_MODELVIEW);
|
nuclear@6
|
109 gl_push_matrix();
|
nuclear@6
|
110 gl_load_identity();
|
nuclear@6
|
111
|
nuclear@6
|
112 glDisable(GL_CULL_FACE);
|
nuclear@6
|
113 glDisable(GL_DEPTH_TEST);
|
nuclear@7
|
114 glEnable(GL_BLEND);
|
nuclear@7
|
115 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
nuclear@6
|
116
|
nuclear@7
|
117 set_uniform_float4(prog_ui, "ucolor", 0, 0, 0, 0.5);
|
nuclear@7
|
118
|
nuclear@7
|
119 gl_begin(GL_QUADS);
|
nuclear@7
|
120 //gl_color4f(0, 0, 0, 0.5);
|
nuclear@6
|
121 gl_vertex3f(0, 0, 0);
|
nuclear@14
|
122 gl_vertex3f(0, virt_height, 0);
|
nuclear@14
|
123 gl_vertex3f(virt_width, virt_height, 0);
|
nuclear@14
|
124 gl_vertex3f(virt_width, 0, 0);
|
nuclear@6
|
125 gl_end();
|
nuclear@6
|
126
|
nuclear@6
|
127 scr.draw();
|
nuclear@6
|
128
|
nuclear@7
|
129 glDisable(GL_BLEND);
|
nuclear@6
|
130 glEnable(GL_CULL_FACE);
|
nuclear@6
|
131 glEnable(GL_DEPTH_TEST);
|
nuclear@6
|
132
|
nuclear@6
|
133
|
nuclear@6
|
134 gl_matrix_mode(GL_PROJECTION);
|
nuclear@6
|
135 gl_pop_matrix();
|
nuclear@6
|
136 gl_matrix_mode(GL_MODELVIEW);
|
nuclear@6
|
137 gl_pop_matrix();
|
nuclear@6
|
138 }
|
nuclear@6
|
139
|
nuclear@6
|
140 void ui_button(int bn, int press, int x, int y)
|
nuclear@6
|
141 {
|
nuclear@14
|
142 float normx = virt_width * (float)x / (float)width;
|
nuclear@14
|
143 float normy = virt_height - virt_height * (float)y / (float)height;
|
nuclear@13
|
144
|
nuclear@13
|
145 scr.sysev_mouse_button(bn, press != 0, normx, normy);
|
nuclear@6
|
146 }
|
nuclear@6
|
147
|
nuclear@6
|
148 void ui_motion(int x, int y)
|
nuclear@6
|
149 {
|
nuclear@14
|
150 float normx = virt_width * (float)x / (float)width;
|
nuclear@14
|
151 float normy = virt_height - virt_height * (float)y / (float)height;
|
nuclear@13
|
152
|
nuclear@13
|
153 scr.sysev_mouse_motion(normx, normy);
|
nuclear@9
|
154 }
|