예제 #1
0
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();
}
예제 #4
0
파일: menu.c 프로젝트: lkundrak/koules
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;

}