rev |
line source |
nuclear@0
|
1 // GLUT frontend
|
nuclear@0
|
2 #ifdef USE_GLUT
|
nuclear@0
|
3
|
nuclear@0
|
4 #include <stdlib.h>
|
nuclear@0
|
5 #include "opengl.h"
|
nuclear@0
|
6
|
nuclear@0
|
7 #ifdef __APPLE__
|
nuclear@0
|
8 #include <GLUT/glut.h>
|
nuclear@0
|
9 #else
|
nuclear@0
|
10 #include <GL/glut.h>
|
nuclear@0
|
11 #endif
|
nuclear@0
|
12
|
nuclear@11
|
13 #include "viewer.h"
|
nuclear@3
|
14 #include "opt.h"
|
nuclear@0
|
15
|
nuclear@0
|
16 static void display();
|
nuclear@0
|
17 static void reshape(int x, int y);
|
nuclear@0
|
18 static void key_down(unsigned char key, int x, int y);
|
nuclear@0
|
19 static void key_up(unsigned char key, int x, int y);
|
nuclear@0
|
20 static void mouse(int bn, int state, int x, int y);
|
nuclear@0
|
21 static void motion(int x, int y);
|
nuclear@0
|
22
|
nuclear@4
|
23 static int win_width, win_height;
|
nuclear@7
|
24 static unsigned int mod;
|
nuclear@4
|
25
|
nuclear@0
|
26 int main(int argc, char **argv)
|
nuclear@0
|
27 {
|
nuclear@0
|
28 glutInit(&argc, argv);
|
nuclear@3
|
29
|
nuclear@3
|
30 if(parse_args(argc, argv) == -1) {
|
nuclear@3
|
31 return 1;
|
nuclear@3
|
32 }
|
nuclear@3
|
33
|
nuclear@6
|
34 glutInitWindowSize(opt.xsz, opt.ysz);
|
nuclear@0
|
35 glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
|
nuclear@0
|
36 glutCreateWindow("dicom viewer");
|
nuclear@0
|
37
|
nuclear@0
|
38 glutDisplayFunc(display);
|
nuclear@0
|
39 glutReshapeFunc(reshape);
|
nuclear@1
|
40 glutKeyboardFunc(key_down);
|
nuclear@1
|
41 glutKeyboardUpFunc(key_up);
|
nuclear@0
|
42 glutMouseFunc(mouse);
|
nuclear@0
|
43 glutMotionFunc(motion);
|
nuclear@7
|
44 glutPassiveMotionFunc(motion);
|
nuclear@0
|
45
|
nuclear@0
|
46 glewInit();
|
nuclear@0
|
47
|
nuclear@0
|
48 if(init() == -1) {
|
nuclear@0
|
49 return 1;
|
nuclear@0
|
50 }
|
nuclear@0
|
51
|
nuclear@0
|
52 glutMainLoop();
|
nuclear@0
|
53 return 0;
|
nuclear@0
|
54 }
|
nuclear@0
|
55
|
nuclear@0
|
56 void swap_buffers()
|
nuclear@0
|
57 {
|
nuclear@0
|
58 glutSwapBuffers();
|
nuclear@0
|
59 }
|
nuclear@0
|
60
|
nuclear@0
|
61 void redisplay()
|
nuclear@0
|
62 {
|
nuclear@0
|
63 glutPostRedisplay();
|
nuclear@0
|
64 }
|
nuclear@0
|
65
|
nuclear@0
|
66 void quit()
|
nuclear@0
|
67 {
|
nuclear@0
|
68 cleanup();
|
nuclear@0
|
69 exit(0);
|
nuclear@0
|
70 }
|
nuclear@0
|
71
|
nuclear@4
|
72 void get_window_size(int *xsz, int *ysz)
|
nuclear@4
|
73 {
|
nuclear@4
|
74 *xsz = win_width;
|
nuclear@4
|
75 *ysz = win_height;
|
nuclear@4
|
76 }
|
nuclear@4
|
77
|
nuclear@7
|
78 unsigned int get_modifiers()
|
nuclear@7
|
79 {
|
nuclear@7
|
80 return mod;
|
nuclear@7
|
81 }
|
nuclear@7
|
82
|
nuclear@0
|
83 static void display()
|
nuclear@0
|
84 {
|
nuclear@0
|
85 ev_display();
|
nuclear@0
|
86 }
|
nuclear@0
|
87
|
nuclear@0
|
88 static void reshape(int x, int y)
|
nuclear@0
|
89 {
|
nuclear@4
|
90 win_width = x;
|
nuclear@4
|
91 win_height = y;
|
nuclear@0
|
92 ev_reshape(x, y);
|
nuclear@0
|
93 }
|
nuclear@0
|
94
|
nuclear@0
|
95 static void key_down(unsigned char key, int x, int y)
|
nuclear@0
|
96 {
|
nuclear@7
|
97 mod = glutGetModifiers();
|
nuclear@8
|
98
|
nuclear@8
|
99 switch(key) {
|
nuclear@8
|
100 case 'i':
|
nuclear@8
|
101 {
|
nuclear@8
|
102 static bool fullrate;
|
nuclear@8
|
103 fullrate = !fullrate;
|
nuclear@8
|
104 glutIdleFunc(fullrate ? glutPostRedisplay : 0);
|
nuclear@8
|
105 }
|
nuclear@8
|
106 break;
|
nuclear@8
|
107 }
|
nuclear@8
|
108
|
nuclear@0
|
109 ev_keyboard(key, 1, x, y);
|
nuclear@0
|
110 }
|
nuclear@0
|
111
|
nuclear@0
|
112 static void key_up(unsigned char key, int x, int y)
|
nuclear@0
|
113 {
|
nuclear@7
|
114 mod = glutGetModifiers();
|
nuclear@0
|
115 ev_keyboard(key, 0, x, y);
|
nuclear@0
|
116 }
|
nuclear@0
|
117
|
nuclear@0
|
118 static void mouse(int bn, int state, int x, int y)
|
nuclear@0
|
119 {
|
nuclear@7
|
120 mod = glutGetModifiers();
|
nuclear@0
|
121 ev_mouse_button(bn - GLUT_LEFT_BUTTON, state == GLUT_DOWN ? 1 : 0, x, y);
|
nuclear@0
|
122 }
|
nuclear@0
|
123
|
nuclear@0
|
124 static void motion(int x, int y)
|
nuclear@0
|
125 {
|
nuclear@0
|
126 ev_mouse_motion(x, y);
|
nuclear@0
|
127 }
|
nuclear@0
|
128
|
nuclear@0
|
129 #endif // USE_GLUT
|