bool MouseEventMatcher::operator()(Event* e) { if (e->hash() != MouseEvent::chash()) return false; auto me = static_cast<MouseEvent*>(e); if (me->state() == MouseState::Move) { if (states_.value & me->state()) { if (modifiers_ == KeyModifiers(flags::any) || modifiers_ == me->modifiers()) { if (me->buttonState() != MouseButton::None) { for (auto s : me->buttonState()) { if (buttons_.value & s) { return true; } } } else if (buttons_.value == MouseButton::None) { return true; } else if (buttons_.value == MouseButtons(flags::any)) { return true; } } } } else { if (buttons_.value & me->button()) { if (states_.value & me->state()) { if (modifiers_ == KeyModifiers(flags::any) || modifiers_ == me->modifiers()) { return true; } } } } return false; }
void GeoXGLWidget3D::mousePressEvent(QMouseEvent *event) { if (mode == PICK) { findClosestPoint(event->x(),event->y()); } if (mode == CAM || pickedPointIndex == -1) { camControl->mouseDown(event->x(),event->y(),MouseButtons(event->button()==Qt::LeftButton,event->button()==Qt::RightButton, event->button()==Qt::MidButton),event->modifiers()); } updateGL(); }
void GeoXGLWidget3D::mouseReleaseEvent (QMouseEvent * event) { if((mode == PICK) && (pickedPointIndex != -1)) { double modelview[16], projection[16]; int viewport[4]; glGetDoublev( GL_PROJECTION_MATRIX, projection ); glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetIntegerv( GL_VIEWPORT, viewport ); Vector3d objPos; gluUnProject(event->x(), viewport[3]-event->y(), pickedZ, modelview, projection, viewport, &objPos[0], &objPos[1], &objPos[2] ); points[pickedPointIndex].position = makeVector3f(objPos[0], objPos[1],objPos[2]); pickedPointIndex = -1; pickedZ = -1; recomputeNormal = false; emit widgetContentChanged(); } if (mode == CAM || pickedPointIndex == -1) { camControl->mouseUp(event->x(),event->y(),MouseButtons(event->button()==Qt::LeftButton,event->button()==Qt::RightButton, event->button()==Qt::MidButton),event->modifiers()); } updateGL(); }
void menu_keys () { static int enter; int ent = 0; static int esc; #ifdef MOUSE static int button; int but = 0; #endif if (maxim[1].max != maxlevel && !client) main_menu (); changed = 0; if (IsPressedLeft ()) { int i; for (i = 0; i < nnumbers; i++) if (maxim[i].line == selected) decrease (i); } if (IsPressedRight ()) { int i; for (i = 0; i < nnumbers; i++) if (maxim[i].line == selected) increase (i); } #ifdef MOUSE but = nomouse ? 0 : MouseButtons (); if (but) { int i; for (i = 0; i < nnumbers; i++) { if (MouseX () > maxim[i].x && MouseX () < maxim[i].x + 8 && MouseY () > maxim[i].y && MouseY () < maxim[i].y + 8) increase (i); if (MouseX () > minim[i].x && MouseX () < minim[i].x + 8 && MouseY () > minim[i].y && MouseY () < minim[i].y + 8) decrease (i); } } if (!but && button) { int i; i = (MouseY () - MAPHEIGHT / 2 - 20 + 5 * nmenu) / 10; if (i >= 0 && i < nmenu) { selected = i; #ifdef SOUND if (ssound) play_sound (S_CREATOR2); #endif menu[selected].func (); button = 0; return; } } button = but; #endif if (IsPressedEsc ()) { if(!esc) { if (client || nnumbers == 2) quit (); to_main_menu (); } esc=1; } else esc=0; if (IsPressedUp () && !mtime && selected > 0) selected--, fit_selector (); if (IsPressedDown () && !mtime && selected < nmenu - 1) selected++, fit_selector (); if (IsPressedEnter () && !mtime) ent = 1; if (!ent && enter) { #ifdef SOUND if (ssound) play_sound (S_CREATOR2); #endif menu[selected].func (); } enter = ent; if (!changed) inctime = 7, waittime = 0; }