]> Pileus Git - grits/blob - src/cube.c
Finally getting stuff to work again, NEXRAD Level II data needs to be
[grits] / src / cube.c
1 #include <config.h>
2 #include <gtk/gtk.h>
3 #include <gtk/gtkgl.h>
4 #include <gdk/gdkkeysyms.h>
5 #include <GL/gl.h>
6 #include <math.h>
7
8 static gboolean expose(GtkWidget *da, GdkEventExpose *event, gpointer user_data);
9 static gboolean rotate(gpointer user_data);
10
11 static GtkWidget *rotate_button;
12
13 float boxv[][3] = {
14         { -0.5, -0.5, -0.5 },
15         {  0.5, -0.5, -0.5 },
16         {  0.5,  0.5, -0.5 },
17         { -0.5,  0.5, -0.5 },
18         { -0.5, -0.5,  0.5 },
19         {  0.5, -0.5,  0.5 },
20         {  0.5,  0.5,  0.5 },
21         { -0.5,  0.5,  0.5 }
22 };
23 #define ALPHA 0.5
24
25 static float ang = 30.;
26
27 static gboolean expose(GtkWidget *da, GdkEventExpose *event, gpointer user_data)
28 {
29         //GdkGLContext  *glcontext  = gtk_widget_get_gl_context (da);
30         //GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da);
31
32         /* draw in here */
33         glPushMatrix();
34         
35         glRotatef (ang, 1, 0, 1);
36
37         glShadeModel(GL_FLAT);
38
39         glBegin (GL_LINES);
40         glColor3f (1., 0., 0.);
41         glVertex3f (0., 0., 0.);
42         glVertex3f (1., 0., 0.);
43         glEnd ();
44         
45         glBegin (GL_LINES);
46         glColor3f (0., 1., 0.);
47         glVertex3f (0., 0., 0.);
48         glVertex3f (0., 1., 0.);
49         glEnd ();
50         
51         glBegin (GL_LINES);
52         glColor3f (0., 0., 1.);
53         glVertex3f (0., 0., 0.);
54         glVertex3f (0., 0., 1.);
55         glEnd ();
56
57         glBegin(GL_LINES);
58         glColor3f (1., 1., 1.);
59         glVertex3fv(boxv[0]);
60         glVertex3fv(boxv[1]);
61         
62         glVertex3fv(boxv[1]);
63         glVertex3fv(boxv[2]);
64         
65         glVertex3fv(boxv[2]);
66         glVertex3fv(boxv[3]);
67         
68         glVertex3fv(boxv[3]);
69         glVertex3fv(boxv[0]);
70         
71         glVertex3fv(boxv[4]);
72         glVertex3fv(boxv[5]);
73         
74         glVertex3fv(boxv[5]);
75         glVertex3fv(boxv[6]);
76         
77         glVertex3fv(boxv[6]);
78         glVertex3fv(boxv[7]);
79         
80         glVertex3fv(boxv[7]);
81         glVertex3fv(boxv[4]);
82         
83         glVertex3fv(boxv[0]);
84         glVertex3fv(boxv[4]);
85         
86         glVertex3fv(boxv[1]);
87         glVertex3fv(boxv[5]);
88         
89         glVertex3fv(boxv[2]);
90         glVertex3fv(boxv[6]);
91         
92         glVertex3fv(boxv[3]);
93         glVertex3fv(boxv[7]);
94         glEnd();
95
96         glPopMatrix ();
97
98         return FALSE;
99 }
100
101 static gboolean rotate(gpointer user_data)
102 {
103         if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rotate_button)))
104                 return TRUE;
105
106         GtkWidget *da = GTK_WIDGET (user_data);
107
108         ang++;
109
110         gdk_window_invalidate_rect(da->window, &da->allocation, FALSE);
111         gdk_window_process_updates(da->window, FALSE);
112
113         return TRUE;
114 }
115
116 gboolean cube_init(GtkDrawingArea *drawing, GtkNotebook *config)
117 {
118         /* Add configuration tab */
119         GtkWidget *label = gtk_label_new("Cube");
120         rotate_button = gtk_toggle_button_new_with_label("Rotate");
121         gtk_notebook_append_page(GTK_NOTEBOOK(config), rotate_button, label);
122
123         /* Set up OpenGL Stuff */
124         g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL);
125         g_timeout_add(1000/60, rotate, drawing);
126         return TRUE;
127 }