summaryrefslogtreecommitdiffstats
Unidiff
-rw-r--r--src/Makefile.am4
-rw-r--r--src/controller/exp004mouse.c55
-rw-r--r--src/controller/mousewheel.c45
-rw-r--r--src/controller/mousewheel.h11
-rw-r--r--src/controller/performzoom.c65
-rw-r--r--src/controller/performzoom.h9
-rw-r--r--src/view/exp004view.c4
7 files changed, 149 insertions, 44 deletions
diff --git a/src/controller/performzoom.c b/src/controller/performzoom.c
new file mode 100644
index 0000000..2fed1d2
--- a/dev/null
+++ b/src/controller/performzoom.c
@@ -0,0 +1,65 @@
1#include "performzoom.h"
2#include "exp004reshape.h"
3#include "../util/check_error.h"
4#include "../view/exp004state0.h"
5#include <GL/glut.h>
6#include <math.h>
7
8/*
9 * A simple alias to make the code more readable.
10 */
11#define S exp004state0
12
13void
14performzoom (int x1, int y1, int x2, int y2)
15{
16 /*
17 * Convert the selection boundary from window coordinates to
18 * world coordinates.
19 */
20 glMatrixMode (GL_MODELVIEW);
21 glLoadIdentity ();
22 GLdouble model[16];
23 glGetDoublev (GL_MODELVIEW_MATRIX, model);
24 GLdouble projection[16];
25 glGetDoublev (GL_PROJECTION_MATRIX, projection);
26 GLint viewport[4];
27 glGetIntegerv (GL_VIEWPORT, viewport);
28
29 check_error (__FILE__, __LINE__);
30
31 GLdouble start_position[3];
32 gluUnProject (x1,
33 y1,
34 0,
35 model,
36 projection,
37 viewport,
38 &start_position[0],
39 &start_position[1], &start_position[2]);
40
41 check_error (__FILE__, __LINE__);
42
43 GLdouble end_position[3];
44 gluUnProject (x2,
45 y2,
46 0,
47 model,
48 projection,
49 viewport,
50 &end_position[0], &end_position[1], &end_position[2]);
51
52 check_error (__FILE__, __LINE__);
53
54 S.zoom.active = true;
55 S.zoom.coords[0] = fmin (start_position[0], end_position[0]);
56 S.zoom.coords[1] = fmax (start_position[0], end_position[0]);
57 S.zoom.coords[2] = fmin (start_position[1], end_position[1]);
58 S.zoom.coords[3] = fmax (start_position[1], end_position[1]);
59
60 exp004reshape (S.viewport.w, S.viewport.h);
61
62 glutPostRedisplay ();
63
64 return;
65}

Valid XHTML 1.0 Strict

Copyright © 2009 Don Pellegrino All Rights Reserved.