Example #1
0
GEM_EXTERN void dispatchGemWindowMessages(WindowInfo &win)
{
  SDL_Event event;
  while (SDL_PollEvent(&event))
  {
    switch (event.type)
    {
      case SDL_QUIT:
        // ignore
        break;
      case SDL_WINDOWEVENT:
        switch (event.window.event)
        {
          case SDL_WINDOWEVENT_CLOSE:
            // ignore
            break;
          case SDL_WINDOWEVENT_RESIZED:
          case SDL_WINDOWEVENT_SIZE_CHANGED:
            triggerResizeEvent(event.window.data1, event.window.data2);
            break;
        }
        break;
      case SDL_KEYDOWN:
      case SDL_KEYUP:
        triggerKeyboardEvent
          ( key2symbol(event.key.keysym.sym).c_str()
          , event.key.keysym.scancode
          , event.type == SDL_KEYDOWN
          );
        break;
      case SDL_MOUSEBUTTONDOWN:
      case SDL_MOUSEBUTTONUP:
        triggerButtonEvent
          ( event.button.button == SDL_BUTTON_LEFT ? 0
          : event.button.button == SDL_BUTTON_MIDDLE ? 1
          : event.button.button == SDL_BUTTON_RIGHT ? 2
          : event.button.button // FIXME
          , event.type == SDL_MOUSEBUTTONDOWN
          , event.button.x
          , event.button.y
          );
        break;
      case SDL_MOUSEMOTION:
        triggerMotionEvent(event.motion.x, event.motion.y);
        break;
      case SDL_MOUSEWHEEL: // FIXME
        if (event.wheel.y != 0) triggerWheelEvent(0, event.wheel.y);
        if (event.wheel.x != 0) triggerWheelEvent(1, event.wheel.x);
        break;
    }
  }
}
Example #2
0
void gemsdlwindow :: dispatch()
{
  if(!m_surface)return;

  std::vector<t_atom>al;
  t_atom a;
  int state;
  unsigned long devID=0;
  SDL_Event event;
  while (SDL_PollEvent(&event)) {
    switch(event.type) {
    default:
      post("event: %d", event.type);
      break;
    case SDL_ACTIVEEVENT: {
      state=event.active.gain;
      if(event.active.state & SDL_APPMOUSEFOCUS) {
        entry(devID, state);
      }
      if(event.active.state & SDL_APPINPUTFOCUS) {
        info("inputentry", state);
      }
      if(event.active.state & SDL_APPACTIVE) {
        info("visible", state);
      }
    }
      break;
    case SDL_KEYUP:
    case SDL_KEYDOWN:
      key(event.key.which, key2symbol(event.key.keysym.sym, event.key.keysym.unicode), event.key.keysym.scancode, event.key.state==SDL_PRESSED);
      break;
    case SDL_MOUSEMOTION:
      motion(event.motion.which, event.motion.x, event.motion.y);
      break;
    case SDL_MOUSEBUTTONUP:
    case SDL_MOUSEBUTTONDOWN:
      motion(event.button.which, event.button.x, event.button.y);
      button(event.button.which, event.button.button-SDL_BUTTON_LEFT, event.button.state==SDL_PRESSED);
      break;
    case SDL_VIDEORESIZE:
      dimension(event.resize.w, event.resize.h);
      break;
    case SDL_VIDEOEXPOSE:
      info("window", "exposed");
      break;
    case SDL_QUIT:
      info("window", "destroy");
      break;
    }
  }
}
Example #3
0
void gemglutwindow::specialupCb(int c, int x, int y) {
  CALLBACK4WIN->motion(x,y);
  ggw->key(key2symbol(c), c, 0);
}
Example #4
0
void gemglutwindow::keyboardupCb(unsigned char c, int x, int y) {
  CALLBACK4WIN->motion(x,y);
  ggw->key(key2symbol(c), c, 0);
}