27 files changed, 179 insertions, 549 deletions
diff --git a/src/controller/callbacks/mouse.c b/src/controller/callbacks/mouse.c index 16e8b8b..f594c23 100644 --- a/src/controller/callbacks/mouse.c +++ b/src/controller/callbacks/mouse.c @@ -9,6 +9,7 @@ #include "reshape.h" #include <GL/glut.h> #include <math.h> +#include <stdio.h> #include <stdlib.h> /* @@ -19,8 +20,12 @@ void mouse (int button, int state, int x, int y) { + // Release left button. if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { + // Deactive a panning event if one was happening. + S.pan.active = false; + if (S.selection.active && S.selection.purpose == ZOOM) { /* @@ -41,7 +46,9 @@ mouse (int button, int state, int x, int y) /* * Complete a selection if one was started and not cancelled. */ - if (S.selection.active && S.selection.purpose == SET) + if (S.selection.active && + S.selection.purpose == SET && + glutGetModifiers () == GLUT_ACTIVE_CTRL) { /* @@ -116,12 +123,31 @@ mouse (int button, int state, int x, int y) } - if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) + // Begin selection. + if (button == GLUT_LEFT_BUTTON && + state == GLUT_DOWN && + glutGetModifiers () == GLUT_ACTIVE_CTRL) { S.selection.active = true; S.selection.x = x; S.selection.y = y; } + // Pan. + if (button == GLUT_LEFT_BUTTON && + state == GLUT_DOWN && + glutGetModifiers () != GLUT_ACTIVE_CTRL) + { + /* + * Detection of the first point in a panning event. + */ + if (S.pan.active == false) + { + S.pan.active = true; + S.pan.begin[0] = x; + S.pan.begin[1] = y; + } + } + return; } |