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; } } }
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; } } }
void gemglutwindow::specialupCb(int c, int x, int y) { CALLBACK4WIN->motion(x,y); ggw->key(key2symbol(c), c, 0); }
void gemglutwindow::keyboardupCb(unsigned char c, int x, int y) { CALLBACK4WIN->motion(x,y); ggw->key(key2symbol(c), c, 0); }